ROOT logo
void seedToInteraction(Bool_t bPlotOnly = kTRUE, Int_t maxPoints = -1, TString infilename = "$ALICE_ROOT/TPC/Upgrade/macros/toyMC.root"){
  //
  // dummy tracking from distorted space points
  //

  // ==================================================================================================
  // Load libraries/OCDB
  gROOT->ProcessLine(".x $ALICE_ROOT/TPC/Upgrade/macros/loadlibs.C");
  gROOT->ProcessLine(".x $ALICE_ROOT/TPC/Upgrade/macros/ConfigOCDB.C");

  // ==================================================================================================
  // New processing or only plotting
  if(!bPlotOnly){
    
    // ==================================================================================================
    // OCDB
    // TString ocdb="local://$ALICE_ROOT/OCDB/";
    // AliCDBManager::Instance()->SetDefaultStorage(ocdb);
    // AliCDBManager::Instance()->SetRun(0);   
    // TGeoGlobalMagField::Instance()->SetField(new AliMagF("Maps","Maps", 1., 1., AliMagF::k5kG));  
   
    // ==================================================================================================
    // input file
    TFile * f = TFile::Open(infilename.Data(),"read");
    TTree * tree = (TTree*)f->Get("toyMCtree"); // AliToyMCEvent tree
    tree->SetMarkerStyle(25);
    tree->SetMarkerSize(0.4);
    
    tree->ls();
    tree->Print();
    
    TBranch *branchEvents = tree->GetBranch("event"); // AliToyMCEvent events
    AliToyMCEvent *events = new AliToyMCEvent();
    branchEvents->SetAddress(&events);
    
    // ==================================================================================================
    // output files
    TTreeSRedirector  * pcstream = new TTreeSRedirector("seedToInteraction.root","recreate");

    TFile *fOut     = TFile::Open("seedToInteraction_histos.root","recreate");
    TH1F  *hT0             = new TH1F("hT0","hT0",1000,0.0,0.0002);  
    TH1F  *hT0Ideal        = new TH1F("hT0Ideal","hT0Ideal",1000,0.0,0.0002);  
    TH1F  *hT0Dist         = new TH1F("hT0Dist","hT0Dist",1000,0.0,0.0002);  
    TH1F  *hT0DistCorr     = new TH1F("hT0DistCorr","hT0DistCorr",1000,0.0,0.0002);  
    TH1F  *hT0DistCorrFull = new TH1F("hT0DistCorrFull","hT0DistCorrFull",1000,0.0,0.0002);  
    TH1F  *hT0DiffIdeal        = new TH1F("hT0DiffIdeal","hT0DiffIdeal",1000,-0.0001,0.0001);  
    TH1F  *hT0DiffDist         = new TH1F("hT0DiffDist","hT0DiffDist",1000,-0.0001,0.0001);  
    TH1F  *hT0DiffDistCorr     = new TH1F("hT0DiffDistCorr","hT0DiffDistCorr",1000,-0.0001,0.0001);  
    TH1F  *hT0DiffDistCorrFull = new TH1F("hT0DiffDistCorrFull","hT0DiffDistCorrFull",1000,-0.0001,0.0001);  
    
    
    // ==================================================================================================
    //
    // Loop over all events
    //
    Int_t nEvents = tree->GetEntriesFast();
    //nEvents=1;//for testing only
    cout<<"Process "<<nEvents<<" events..."<<endl;
    
    Int_t nTracks = 0; // number of tracks per event
    Int_t nSP     = 0; // number of space points per track
    Int_t nDSP    = 0; // number of distorted space points per track
    Double_t t0   = 0.;// real time 0
    Double_t tDrift = 0.0000943;// full dift time = 94.3 us
    
    AliToyMCTrack         *mcTrack              = NULL;
    AliExternalTrackParam *recTrack             = NULL;
    AliExternalTrackParam *recTrackDist         = NULL;
    AliExternalTrackParam *recTrackDistCorr     = NULL;
    AliExternalTrackParam *recTrackDistCorrFull = NULL;
    
    for(Int_t iEvent = 0; iEvent < nEvents; iEvent++){
      tree->GetEntry(iEvent);

      // ==================================================================================================
      // Fill real time 0
      t0 = events->GetT0();      

      // ==================================================================================================
      // loop over all MC tracks
      nTracks = events->GetNumberOfTracks();
      for(Int_t iTrack = 0; iTrack < nTracks; iTrack++){
	
      // ==================================================================================================
      // retrieve the MC track
	mcTrack = events->GetTrack(iTrack); 
	nSP     = mcTrack->GetNumberOfSpacePoints();
	nDSP    = mcTrack->GetNumberOfDistSpacePoints();
	
	AliTrackPointArray pointArray(nSP);
	AliTrackPointArray pointArrayDist(nDSP);
	
	for(Int_t iSP = 0; iSP < nSP; iSP++){
	  AliTPCclusterMI *point = (AliTPCclusterMI *)(mcTrack->GetSpacePoint(iSP))->Clone();
	  point->SetZ(point->GetTimeBin());
	  pointArray.AddPoint(iSP, point->MakePoint() );     
	}
	
	for(Int_t iDSP = 0; iDSP < nDSP; iDSP++){	
	  AliTPCclusterMI *pointDist = (AliTPCclusterMI *)(mcTrack->GetDistortedSpacePoint(iDSP))->Clone();
	  pointDist->SetZ(pointDist->GetTimeBin());
	  pointArrayDist.AddPoint(iDSP, pointDist->MakePoint() );      
	}

	// for(Int_t iDSP = 0; iDSP < nDSP; iDSP++){	
	//   AliTPCclusterMI *pointDistCorr = (AliTPCclusterMI *)(mcTrack->GetDistortedSpacePoint(iDSP))->Clone();
	//   pointDistCorr->SetZ(pointDistCorr->GetTimeBin());
	//   pointArrayDistCorr.AddPoint(iDSP, pointDistCorr->MakePoint(pointDistCorr) );      
	// }

	// for(Int_t iDSP = 0; iDSP < nDSP; iDSP++){	
	//   AliTPCclusterMI *pointDistCorrFull = (AliTPCclusterMI *)(mcTrack->GetDistortedSpacePoint(iDSP))->Clone();
	//   pointDistCorrFull->SetZ(pointDistCorrFull->GetTimeBin());
	//   pointArrayDistCorrFull.AddPoint(iDSP, pointDistCorrFull->MakePoint(pointDistCorrFull) );      
	// }
	
	// ==================================================================================================
	// reconstruct
	recTrack             = SeedToVertex(&pointArray, maxPoints);
	recTrackDist         = SeedToVertex(&pointArrayDist, maxPoints);
	// recTrackDistCorr     = SeedToVertex(&pointArrayDistCorr);
	// recTrackDistCorrFull = SeedToVertex(&pointArrayDistCorrFull);

	//cout<<"ALPHA = "<< mcTrack->GetAlpha()<<" "<<recTrack->GetAlpha()<<" "<<recTrackDist->GetAlpha()<<endl;
	//cout<<mcTrack->Phi()<<" "<<recTrack->Phi()<<" "<<recTrackDist->Phi()<<endl;
  

	// // ==================================================================================================
	// // debug
	// if(recTrack->GetY()>10 || recTrack->GetY() < -1){
	//   cout<<mcTrack->Phi()<<" "<<recTrack->Phi()<<" "<<recTrackDist->Phi()<<endl;
	//   cout<<"MC    = "<<mcTrack->GetY()<<" "<<mcTrack->GetZ()<<" "<<mcTrack->GetSnp()<<" "<<mcTrack->GetTgl()<<" "<<mcTrack->GetSigned1Pt()<<endl;
	//   cout<<"Ideal = "<<recTrack->GetY()<<" "<<recTrack->GetZ()<<" "<<recTrack->GetSnp()<<" "<<recTrack->GetTgl()<<" "<<recTrack->GetSigned1Pt()<<endl;
	//   cout<<"Dist  = "<<recTrackDist->GetY()<<" "<<recTrackDist->GetZ()<<" "<<recTrackDist->GetSnp()<<" "<<recTrackDist->GetTgl()<<" "<<recTrackDist->GetSigned1Pt()<<endl;
	// }
	
	// ==================================================================================================
	// output: debug streamer
	if (pcstream) (*pcstream)<<Form("seedToInt")<<
			"trackIn.="<<mcTrack<<          //  MC track
			"trackOutIdeal.="<<recTrack<<        //  rec track from ideal space points
			"trackOut.="<<recTrackDist<<    //  rec track from dist space points
			"\n"; 

	// ==================================================================================================
	// output: histograms
	hT0->Fill(t0);
	// only for good tracks
	if(recTrack->GetY() > -50 && recTrack->GetY() < 50){
	  hT0Ideal->Fill(recTrack->GetZ());
	  hT0DiffIdeal->Fill(recTrack->GetZ()-t0-tDrift);
	}
	if(recTrackDist->GetY() > -50 && recTrackDist->GetY() < 50){
	  hT0Dist->Fill(recTrackDist->GetZ());
	  hT0DiffDist->Fill(recTrackDist->GetZ()-t0-tDrift);
	}
      }
    }

    // ==================================================================================================
    // write histograms
    fOut->cd();
    hT0->Write();
    hT0Ideal->Write();
    hT0Dist->Write();
    hT0DistCorr->Write();
    hT0DistCorrFull->Write();
    hT0DiffIdeal->Write();
    hT0DiffDist->Write();
    hT0DiffDistCorr->Write();
    hT0DiffDistCorrFull->Write();
    fOut->Close();
    
    delete pcstream;
    
  }
  
  // ==================================================================================================
  //
  // Visualize 
  //
  TFile * f = TFile::Open("seedToInteraction.root");
  TTree * tree = (TTree*)f->Get("seedToInt");
  tree->SetMarkerStyle(25);
  tree->SetMarkerSize(0.4);

  // Event with space points
  TCanvas *canvasEvent = new TCanvas("canvasEvent","canvasEvent",1200,600);
  canvasEvent->Divide(2,1);

  canvasEvent->cd(1);
  tree->SetMarkerSize(0.25);
  tree->SetMarkerColor(1);
  tree->Draw("trackIn.fSpacePoints.fY:trackIn.fSpacePoints.fX","trackIn.fSpacePoints.fX!=0","",50,0);
  tree->SetMarkerColor(2);
  tree->Draw("trackIn.fDistortedSpacePoints.fY:trackIn.fDistortedSpacePoints.fX","trackIn.fDistortedSpacePoints.fX!=0","same",50,0);
  htemp = (TH2F*)gPad->GetPrimitive("htemp");
  htemp->GetXaxis()->SetTitle("x (cm)");
  htemp->GetYaxis()->SetTitle("y (cm)");
  htemp->SetTitle("Event (x-y plane)");
  canvasEvent->cd(1)->Update();

  canvasEvent->cd(2);
  tree->SetMarkerSize(0.25);
  tree->SetMarkerColor(1);
  tree->Draw("trackIn.fSpacePoints.fY:trackIn.fSpacePoints.fZ","trackIn.fSpacePoints.fX!=0","",50,0);
  tree->SetMarkerColor(2);
  tree->Draw("trackIn.fDistortedSpacePoints.fY:trackIn.fDistortedSpacePoints.fZ","trackIn.fDistortedSpacePoints.fX!=0","same",50,0);
  htemp = (TH2F*)gPad->GetPrimitive("htemp");
  htemp->GetXaxis()->SetTitle("z (cm)");
  htemp->GetYaxis()->SetTitle("y (cm)");
  htemp->SetTitle("Event (z-y plane)");
  canvasEvent->cd(2)->Update();

  canvasEvent->SaveAs("seedToInteraction_Points.eps");

  // track (5 parameters)
  TCanvas *canvasTrack = new TCanvas("canvasTrack","canvasTrack",1200,900);
  canvasTrack->Divide(3,2);

  for(Int_t i = 0; i < 5; i++){

    canvasTrack->cd(i+1);
    tree->SetLineColor(1);
    tree->Draw(Form("trackOutIdeal.fP[%d]",i),"","");
    tree->SetLineColor(4);
    tree->Draw(Form("trackIn.AliExternalTrackParam.fP[%d]",i),"","same");
    tree->SetLineColor(2);
    tree->Draw(Form("trackOut.fP[%d]",i),"","same");
    
  }

  
  canvasTrack->cd(6);
  TLatex *l = new TLatex;
  l->SetTextColor(4);
  l->DrawLatex(0.3,0.5,"Input MC track");
  l->SetTextColor(1);
  l->DrawLatex(0.3,0.4,"rec track (ideal)");
  l->SetTextColor(2);
  l->DrawLatex(0.3,0.3,"rec track (dist)");

  canvasTrack->SaveAs("seedToInteraction_Tracks.eps");

  f->Close();


  f = TFile::Open("seedToInteraction_histos.root");
  TH1F  *hT0             = (TH1F*)f->Get("hT0");
  TH1F  *hT0Ideal        = (TH1F*)f->Get("hT0Ideal");
  TH1F  *hT0Dist         = (TH1F*)f->Get("hT0Dist");
  TH1F  *hT0DistCorr     = (TH1F*)f->Get("hT0DistCorr");
  TH1F  *hT0DistCorrFull = (TH1F*)f->Get("hT0DistCorrFull");
  TH1F  *hT0DiffIdeal        = (TH1F*)f->Get("hT0DiffIdeal");
  TH1F  *hT0DiffDist         = (TH1F*)f->Get("hT0DiffDist");
  TH1F  *hT0DiffDistCorr     = (TH1F*)f->Get("hT0DiffDistCorr");
  TH1F  *hT0DiffDistCorrFull = (TH1F*)f->Get("hT0DiffDistCorrFull");

  // track (5 parameters)
  TCanvas *canvasT0 = new TCanvas("canvasT0","canvasT0",1200,900);
  canvasT0->Divide(2,1);
 
  canvasT0->cd(1);
  hT0->SetMarkerColor(4);
  hT0->SetLineColor(4);
  hT0->DrawCopy();
  hT0Ideal->SetMarkerColor(1);
  hT0Ideal->SetLineColor(1);
  hT0Ideal->DrawCopy("same");
  hT0Dist->SetMarkerColor(2);
  hT0Dist->SetLineColor(2);
  hT0Dist->DrawCopy("same");
  hT0DistCorr->SetMarkerColor(2);
  hT0DistCorr->SetLineColor(2);
  hT0DistCorr->DrawCopy("same");
  hT0DistCorrFull->SetMarkerColor(2);
  hT0DistCorrFull->SetLineColor(2);
  hT0DistCorrFull->DrawCopy("same");

  canvasT0->cd(2);
  hT0DiffIdeal->SetMarkerColor(1);
  hT0DiffIdeal->SetLineColor(1);
  hT0DiffIdeal->DrawCopy();
  hT0DiffDist->SetMarkerColor(2);
  hT0DiffDist->SetLineColor(2);
  hT0DiffDist->DrawCopy("same");
  hT0DiffDistCorr->SetMarkerColor(2);
  hT0DiffDistCorr->SetLineColor(2);
  hT0DiffDistCorr->DrawCopy("same");
  hT0DiffDistCorrFull->SetMarkerColor(2);
  hT0DiffDistCorrFull->SetLineColor(2);
  hT0DiffDistCorrFull->DrawCopy("same");

  if(maxPoints > 0){
    canvasT0->SaveAs(Form("seedToInteraction_T0_%dSP.eps",maxPoints));
  }
  else{
    canvasT0->SaveAs(Form("seedToInteraction_T0_allSP.eps"));
  }

  f->Close();

}

AliExternalTrackParam * SeedToVertex(AliTrackPointArray *pointArray,  Int_t maxPoints = -1){
  //
  // Seeding and propagation to vertex region
  // Fixed parameters
  // dir      - direction - out=1 or in=-1
  // refX     - reference X to fit the track (needed?)
  //

  // Parameters
  Int_t dir = -1;
  Double_t refX = 0.;

  AliExternalTrackParam *track = 0x0;
  AliTrackPoint point1,point2,point3;

  Int_t ipoints[3] = {0,0,0}; // this should be a settable array later
  Int_t npoints = pointArray->GetNPoints();
  if(maxPoints > 2) npoints = maxPoints;

  // need to check if outermost points are filled
  if (dir==-1) {  // go from outermost point
    for(Int_t iPoint = 0; iPoint < npoints; iPoint++){
      pointArray->GetPoint(point1,npoints-iPoint-1);
      if(point1.GetX()!=0 && point1.GetY()!=0 && point1.GetZ()!=0){
	npoints = npoints-iPoint;
	break;
      }
    }
  }
  //
  // parameters (from AliTPCCorrection)
  //
  AliTPCROC * roc = AliTPCROC::Instance();
  const Int_t    npoints0=roc->GetNRows(0)+roc->GetNRows(36);
  const Double_t kRTPC0  =roc->GetPadRowRadii(0,0);
  const Double_t kRTPC1  =roc->GetPadRowRadii(36,roc->GetNRows(36)-1);
  const Double_t kMaxSnp = 0.85;  
  const Double_t kSigmaY=0.1;
  const Double_t kSigmaZ=0.1;
  const Double_t kMaxR=500;
  const Double_t kMaxZ=500;
  
  const Double_t kMaxZ0=220;
  const Double_t kZcut=3;
  const Double_t kMass = TDatabasePDG::Instance()->GetParticle("pi+")->Mass();

  if (dir==1) {  //make seed inner
    pointArray->GetPoint(point1,1);
    pointArray->GetPoint(point2,11);
    pointArray->GetPoint(point3,21);
    ipoints[0] = 1;
    ipoints[1] = 11;
    ipoints[2] = 21;
  }
  if (dir==-1){ //make seed outer
    pointArray->GetPoint(point1,npoints-21);
    pointArray->GetPoint(point2,npoints-11);
    pointArray->GetPoint(point3,npoints-1);
    ipoints[0] = npoints-1;
    ipoints[1] = npoints-11;
    ipoints[2] = npoints-21;
  } 
  if ((TMath::Abs(point1.GetX()-point3.GetX())+TMath::Abs(point1.GetY()-point3.GetY()))<1){
    printf("fit points not properly initialized\n");
    return 0;
  }
  track = AliTrackerBase::MakeSeed(point1, point2, point3);

  // ===========================================================================================================
  // track propagation (from AliTPCCorrection::FitDistortedTrack)
  track->ResetCovariance(10);

  for (Int_t jpoint=0; jpoint<npoints; jpoint++){

    Int_t ipoint = npoints-jpoint-1;//ipoints[jpoint]; 
    if(maxPoints==3) ipoint = ipoints[jpoint];
    //
    AliTrackPoint pIn;
    Double_t xyz[3];
    pointArray->GetPoint(pIn,ipoint);
    AliTrackPoint prot = pIn.Rotate(track->GetAlpha());   // rotate to the local frame - non distoted  point
    if (TMath::Abs(prot.GetX())<kRTPC0) continue;
    if (TMath::Abs(prot.GetX())>kRTPC1) continue;
    //
    if (!AliTrackerBase::PropagateTrackTo(track,prot.GetX(),kMass,5,kFALSE,kMaxSnp)) break;
    if (TMath::Abs(track->GetZ())>kMaxZ) break;
    if (TMath::Abs(track->GetX())>kMaxR) break;
    if (dir>0 && track->GetX()>refX) continue;
    if (dir<0 && track->GetX()<refX) continue;
    if (TMath::Abs(track->GetZ())<kZcut)continue;
    track->GetXYZ(xyz);  //track also propagated to the same reference radius
    //
    Double_t pointPos[2]={0,0};
    Double_t pointCov[3]={0,0,0};
    pointPos[0]=prot.GetY();//local y
    pointPos[1]=prot.GetZ();//local z
    pointCov[0]=prot.GetCov()[3];//simay^2
    pointCov[1]=prot.GetCov()[4];//sigmayz
    pointCov[2]=prot.GetCov()[5];//sigmaz^2
    if (!track->Update(pointPos,pointCov)) break;

  }

  AliTrackerBase::PropagateTrackTo(track,refX,kMass,5.,kTRUE,kMaxSnp);
  AliTrackerBase::PropagateTrackTo(track,refX,kMass,1.,kTRUE,kMaxSnp);
  // ===========================================================================================================


  return track;

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