ROOT logo
#if !defined(__CINT__) || defined(__MAKECINT__)
#include <TF1.h>
#include <TFile.h>
#include <TLine.h>
#include <TH1F.h>
#include <TH2F.h>
#include <TGraph.h>
#include <TStyle.h>
#include <TSystem.h>
#include <TString.h>
#include <TGrid.h>
#include <TCanvas.h>
#include <TLatex.h>
#include <TObjArray.h>
#include "AliCDBEntry.h"
#include "AliITSDriftSpeedArraySDD.h"
#include "AliITSDriftSpeedSDD.h"
#include "AliITSgeomTGeo.h"
#endif

// Macro to plot the calibration parameters from the OCDB file 
// created from an INJECTOR run (OCDB/ITS/Calib/DriftSpeedSDD)
// Two methods ShowDriftSpeedSDD:
//  - the first takes the name of the file to be displayed
//  - the second builds the alien path+name from run number and file version
//
// Origin: F. Prino (prino@to.infn.it)

Bool_t kNoDraw = kFALSE; // set to kTRUE to eliminate module dependent plots


void ShowDriftSpeedSDD(Char_t filnam[150]="$ALICE_ROOT/ITS/Calib/DriftSpeedSDD/Run0_9999999_v0_s0.root", Int_t firstmod=0, Int_t lastmod=260,Int_t nrun=0){
  TFile *f= TFile::Open(filnam);
  AliCDBEntry *ent=(AliCDBEntry*)f->Get("AliCDBEntry");
  TObjArray *drspSDD = (TObjArray *)ent->GetObject();
  AliITSDriftSpeedArraySDD *vdriftarr0;
  AliITSDriftSpeedArraySDD *vdriftarr1;

  TH2F* hlay3=new TH2F("hlay3","Injector Status Layer 3",12,-0.5,5.5,14,-0.5,13.5);
  hlay3->GetXaxis()->SetTitle("Detector");
  hlay3->GetYaxis()->SetTitle("Ladder");
  hlay3->GetXaxis()->SetTickLength(0);
  hlay3->GetYaxis()->SetTickLength(0);
  hlay3->SetStats(0);
  hlay3->SetMinimum(-0.01);
  hlay3->SetMaximum(7.);
  TH2F* hlay4=new TH2F("hlay4","Injector Status Layer 4",16,-0.5,7.5,22,-0.5,21.5);
  hlay4->GetXaxis()->SetTitle("Detector");
  hlay4->GetYaxis()->SetTitle("Ladder");
  hlay4->GetXaxis()->SetTickLength(0);
  hlay4->GetYaxis()->SetTickLength(0);
  hlay4->GetYaxis()->SetTitle("Ladder");
  hlay4->SetStats(0);
  hlay4->SetMinimum(-0.01);
  hlay4->SetMaximum(7.);

  TGraph **gvdr0=new TGraph*[260];
  TGraph **gvdr1=new TGraph*[260];
  TCanvas *c0=0x0;
  if(!kNoDraw)c0=new TCanvas("c0","Module Drift Speed",700,1000);

  TGraph *tempvsmod0=new TGraph(0);
  TGraph *tempvsmod1=new TGraph(0);
  TGraph *vvsmod0=new TGraph(0);
  TGraph *vvsmod1=new TGraph(0);
  TGraph *poldegvsmod0=new TGraph(0); 
  TGraph *poldegvsmod1=new TGraph(0); 
  TGraph *anmaxvsmod0=new TGraph(0); 
  TGraph *anmaxvsmod1=new TGraph(0); 
  TGraph *dvcevsmod0=new TGraph(0);
  TGraph *dvcevsmod1=new TGraph(0);
  TGraph *dveevsmod0=new TGraph(0);
  TGraph *dveevsmod1=new TGraph(0);

  char tit0[100];
  sprintf(tit0,"Temperature vs. mod. number");
  if(nrun!=0)sprintf(tit0,"Temperature vs. mod. number - Run %d",nrun);
  tempvsmod0->SetTitle(tit0);
  tempvsmod1->SetTitle(tit0);

  sprintf(tit0,"Drift Speed vs. mod. number");
  if(nrun!=0)sprintf(tit0,"Drift Speed vs. mod. number - Run %d",nrun);
  vvsmod0->SetTitle(tit0);
  vvsmod1->SetTitle(tit0);

  sprintf(tit0,"Degree of poly fit vs. mod. number");
  if(nrun!=0)sprintf(tit0,"Degree of poly fit vs. mod. number - Run %d",nrun);
  poldegvsmod0->SetTitle(tit0);
  poldegvsmod1->SetTitle(tit0);

  sprintf(tit0,"Anode with max. vdrift vs. mod. number");
  if(nrun!=0)sprintf(tit0,"Anode with max. vdrift vs. mod. number - Run %d",nrun);
  anmaxvsmod0->SetTitle(tit0);
  anmaxvsmod1->SetTitle(tit0);

  sprintf(tit0,"Delta Vdrift 128-0 vs. mod. number");
  if(nrun!=0)sprintf(tit0,"Delta Vdrift 128-0 vs. mod. number - Run %d",nrun);
  dvcevsmod0->SetTitle(tit0);
  dvcevsmod1->SetTitle(tit0);

  sprintf(tit0,"Delta Vdrift 256-0 vs. mod. number");
  if(nrun!=0)sprintf(tit0,"Delta Vdrift 256-0 vs. mod. number - Run %d",nrun);
  dveevsmod0->SetTitle(tit0);
  dveevsmod1->SetTitle(tit0);

  TF1* fPoly=new TF1("fPoly","pol3",0.,256.);
  Char_t tit[100];
  TString psnm0 = "vdriftSDD.ps[";
  TString psnm1 = "vdriftSDD.ps";
  TString psnm2 = "vdriftSDD.ps]";
  if(!kNoDraw) c0->Print(psnm0.Data());
  Int_t cntpad = 0;
  Int_t iGoodInj=0;
  Int_t iRescaledSpeed=0;
  Int_t iAverSpeed=0;
  TLatex* tleft=new TLatex(0.2,0.82,"Side 0");
  tleft->SetNDC();
  tleft->SetTextColor(1);
  TLatex* tright=new TLatex(0.2,0.75,"Side 1");
  tright->SetNDC();
  tright->SetTextColor(2);

  for(Int_t i=firstmod; i<lastmod; i++){
    Int_t iMod=i+240;
    Int_t lay,lad,det;
    AliITSgeomTGeo::GetModuleId(iMod,lay,lad,det);
    Int_t i0=2*i;
    Int_t i1=1+2*i;
    vdriftarr0=(AliITSDriftSpeedArraySDD*)drspSDD->At(i0);
    vdriftarr1=(AliITSDriftSpeedArraySDD*)drspSDD->At(i1);
    AliITSDriftSpeedSDD* vdrift0=0x0;
    if(vdriftarr0) vdrift0=vdriftarr0->GetDriftSpeedObject(0);
    AliITSDriftSpeedSDD* vdrift1=0x0;
    if(vdriftarr1) vdrift1=vdriftarr1->GetDriftSpeedObject(0);

    gvdr0[i]=new TGraph(0);
    gvdr1[i]=new TGraph(0);
    gvdr0[i]->SetMarkerStyle(7);
    gvdr1[i]->SetMarkerStyle(7);
    gvdr0[i]->SetMarkerColor(kBlack);
    gvdr0[i]->SetLineColor(kBlack);
    gvdr0[i]->SetMinimum(5.);
    gvdr1[i]->SetMinimum(5.);
    gvdr0[i]->SetMaximum(7.5);
    gvdr1[i]->SetMaximum(7.5);
    sprintf(tit,"Mod %d\n",iMod);
    gvdr0[i]->SetTitle(tit);
    gvdr1[i]->SetTitle(tit);
    gvdr1[i]->SetMarkerColor(kRed);
    gvdr1[i]->SetLineColor(kRed);

    for(Int_t iAn=0; iAn<256; iAn++){
      Float_t vel0=0;
      if(vdrift0) vel0=vdrift0->GetDriftSpeedAtAnode(iAn);
      Float_t vel1=0;
      if(vdrift1) vel1=vdrift1->GetDriftSpeedAtAnode(iAn);
      gvdr0[i]->SetPoint(iAn,(Float_t)iAn,vel0);
      gvdr1[i]->SetPoint(iAn,(Float_t)iAn,vel1);
    }
    Int_t statusInj0=vdriftarr0->GetInjectorStatus();
    Int_t statusInj1=vdriftarr1->GetInjectorStatus();
    if(statusInj0>1) iGoodInj++;
    else if(statusInj0==1) iRescaledSpeed++;
    else iAverSpeed++;
    if(statusInj1>1) iGoodInj++;
    else if(statusInj1==1) iRescaledSpeed++;
    else iAverSpeed++;

    printf(" Mod. %d \tStatusLR=%X %X \t TimeStamp=%d \t v(an 128l)= %f",iMod,statusInj0,statusInj1,vdrift0->GetEventTimestamp(),vdriftarr0->GetDriftSpeed(0,128));
    printf("        \t v(an 128r)= %f  Degree=%d %d\n",vdriftarr1->GetDriftSpeed(0,128),vdrift0->GetDegreeofPoly(),vdrift1->GetDegreeofPoly());

    Int_t n7=(statusInj0&(0x1F<<25))>>25;
    Int_t n6=(statusInj0&(0x1F<<20))>>20;
    Int_t n5=(statusInj0&(0x1F<<15))>>15;
    Int_t n4=(statusInj0&(0x1F<<5))>>10;
    Int_t n3=(statusInj0&(0x1F<<5))>>5;
    Int_t n2=statusInj0&0x1F;
    Float_t aveStatus0=(7.*n7+6.*n6+5.*n5+4.*n4+3.*n3+2.*n2)/32.;
    n7=(statusInj1&(0x1F<<25))>>25;
    n6=(statusInj1&(0x1F<<20))>>20;
    n5=(statusInj1&(0x1F<<15))>>15;
    n4=(statusInj1&(0x1F<<5))>>10;
    n3=(statusInj1&(0x1F<<5))>>5;
    n2=statusInj1&0x1F;
    Float_t aveStatus1=(7.*n7+6.*n6+5.*n5+4.*n4+3.*n3+2.*n2)/32.;

    Int_t index=1+(det-1)*2;
    if(lay==3){ 
      hlay3->SetBinContent(index,lad,aveStatus0);
      hlay3->SetBinContent(index+1,lad,aveStatus1);
    }
    if(lay==4){ 
      hlay4->SetBinContent(index,lad,aveStatus0);
      hlay4->SetBinContent(index+1,lad,aveStatus1);
    }


    if(!kNoDraw){
      if (i%12==0 ) {
	c0->cd();
	c0->Modified();
	c0->Update();
	if (i) c0->Print(psnm1.Data());
	c0->Clear();
	c0->Divide(3,4);
	cntpad = 0;
      }
      c0->cd(++cntpad);
      gvdr0[i]->Draw("AP");
      gvdr0[i]->GetXaxis()->SetTitle("Anode");
      gvdr0[i]->GetYaxis()->SetTitle("Vdrift (#mum/ns)");      
      gvdr1[i]->Draw("P same");
      gvdr1[i]->GetXaxis()->SetTitle("Anode");
      gvdr1[i]->GetYaxis()->SetTitle("Vdrift (#mum/ns)");
      tleft->Draw();
      tright->Draw();
    }

    Float_t vel0=0;
    Float_t pd0=0;
    if(vdrift0){ 
      vel0=vdrift0->GetDriftSpeedAtAnode(128);
      pd0=vdrift0->GetDegreeofPoly();
    }
    Float_t vel1=0;
    Float_t pd1=0;
    if(vdrift1){ 
      vel1=vdrift1->GetDriftSpeedAtAnode(128);
      pd1=vdrift1->GetDegreeofPoly();
    }
    Float_t Edrift=(1800-45)/291/0.012;  
    Float_t mob0=vel0*1.E5/Edrift;  
    Float_t temper0=293.15*TMath::Power((mob0/1350.),-1/2.4); 
    Float_t mob1=vel1*1.E5/Edrift;  
    Float_t temper1=293.15*TMath::Power((mob1/1350.),-1/2.4); 
    tempvsmod0->SetPoint(tempvsmod0->GetN(),(Float_t)iMod,temper0);
    tempvsmod1->SetPoint(tempvsmod1->GetN(),(Float_t)iMod,temper1);
    vvsmod0->SetPoint(vvsmod0->GetN(),(Float_t)iMod,vel0);
    vvsmod1->SetPoint(vvsmod1->GetN(),(Float_t)iMod,vel1);
    poldegvsmod0->SetPoint(poldegvsmod0->GetN(),(Float_t)iMod,pd0);
    poldegvsmod1->SetPoint(poldegvsmod1->GetN(),(Float_t)iMod,pd1);

    for(Int_t ipar=0; ipar<=vdrift0->GetDegreeofPoly(); ipar++){
      fPoly->SetParameter(ipar,vdrift0->GetDriftSpeedParameter(ipar));
    }
    if(vdrift0->GetDegreeofPoly()<3){
      for(Int_t ipar=vdrift0->GetDegreeofPoly()+1; ipar<=3; ipar++) fPoly->SetParameter(ipar,0.);
    }

    anmaxvsmod0->SetPoint(anmaxvsmod0->GetN(),(Float_t)iMod,fPoly->GetMaximumX(0.,256.));
    dvcevsmod0->SetPoint(dvcevsmod0->GetN(),(Float_t)iMod,fPoly->Eval(128)-fPoly->Eval(0));
    dveevsmod0->SetPoint(dveevsmod0->GetN(),(Float_t)iMod,fPoly->Eval(256)-fPoly->Eval(0));
    
    for(Int_t ipar=0; ipar<=vdrift1->GetDegreeofPoly(); ipar++){
      fPoly->SetParameter(ipar,vdrift1->GetDriftSpeedParameter(ipar));
    }
    if(vdrift1->GetDegreeofPoly()<3){
      for(Int_t ipar=vdrift1->GetDegreeofPoly()+1; ipar<=3; ipar++) fPoly->SetParameter(ipar,0.);
    }
    anmaxvsmod1->SetPoint(anmaxvsmod1->GetN(),(Float_t)iMod,fPoly->GetMaximumX(0.,256.));
    dvcevsmod1->SetPoint(dvcevsmod1->GetN(),(Float_t)iMod,fPoly->Eval(128)-fPoly->Eval(0));
    dveevsmod1->SetPoint(dveevsmod1->GetN(),(Float_t)iMod,fPoly->Eval(256)-fPoly->Eval(0));
    //    getchar();
  }

  if(!kNoDraw){
    c0->cd();
    c0->Modified();
    c0->Update();
    c0->Print(psnm2.Data());
  }
  printf("Number of half-modules with drift speed from injectors               = %d\n",iGoodInj);
  printf("Number of half-modules with drift speed rescaled from golden module = %d\n",iRescaledSpeed);
  printf("Number of half-modules with average drift speed                      = %d\n",iAverSpeed);

  gStyle->SetPalette(59);

  TCanvas* clay=new TCanvas("clay","Injector Status",900,600);
  clay->Divide(2,1);
  clay->cd(1);
  hlay3->Draw("colz");
  TLine** linv3=new TLine*[5];
  for(Int_t i=0;i<5;i++){
    linv3[i]=new TLine(i+0.5,-0.5,i+0.5,13.5);
    linv3[i]->SetLineColor(kGray+1);
    linv3[i]->Draw();
  }
  TLine** linh3=new TLine*[13];
  for(Int_t i=0;i<13;i++){
    linh3[i]=new TLine(-0.5,i+0.5,5.5,i+0.5);
    linh3[i]->SetLineColor(kGray+1);
    linh3[i]->Draw();
  }
  clay->cd(2);
  hlay4->Draw("colz");
  TLine** linv4=new TLine*[7];
  for(Int_t i=0;i<7;i++){
    linv4[i]=new TLine(i+0.5,-0.5,i+0.5,21.5);
    linv4[i]->SetLineColor(kGray+1);
    linv4[i]->Draw();
  }
  TLine** linh4=new TLine*[21];
  for(Int_t i=0;i<21;i++){
    linh4[i]=new TLine(-0.5,i+0.5,7.5,i+0.5);
    linh4[i]->SetLineColor(kGray+1);
    linh4[i]->Draw();
  }
  clay->Modified();


  TCanvas* c2;
  c2=new TCanvas("c2","Vdrift vs. mod",1000,700);
  vvsmod0->SetMarkerStyle(20);
  vvsmod0->Draw("AP");
  vvsmod0->GetXaxis()->SetTitle("Module Number");
  vvsmod0->GetYaxis()->SetTitle("Vdrift (#mum/ns)");
  vvsmod1->SetMarkerStyle(21);
  vvsmod1->SetMarkerColor(2);
  vvsmod1->Draw("SAMEP");
  tleft->Draw();
  tright->Draw();

  TCanvas* c2t;
  c2t=new TCanvas("c2t","Temper vs. mod",1000,700);
  tempvsmod0->SetMarkerStyle(20);
  tempvsmod0->Draw("AP");
  tempvsmod0->GetXaxis()->SetTitle("Module Number");
  tempvsmod0->GetYaxis()->SetTitle("Temperature (K)");
  tempvsmod1->SetMarkerStyle(21);
  tempvsmod1->SetMarkerColor(2);
  tempvsmod1->Draw("SAMEP");
  tleft->Draw();
  tright->Draw();

  TCanvas* c3;
  c3=new TCanvas("c3","Params vs. mod",900,900);
  c3->Divide(2,2);
  
  c3->cd(1);
  gPad->SetLeftMargin(0.14);
  poldegvsmod0->SetMarkerStyle(20);
  poldegvsmod0->Draw("AP");
  poldegvsmod0->GetXaxis()->SetTitle("Module Number");
  poldegvsmod0->GetYaxis()->SetTitle("Degree of Polynomial fit");
  poldegvsmod0->GetYaxis()->SetTitleOffset(1.4);
  poldegvsmod1->SetMarkerStyle(21);
  poldegvsmod1->SetMarkerColor(2);
  poldegvsmod1->Draw("SAMEP");
  tleft->Draw();
  tright->Draw();
  c3->cd(2);
  gPad->SetLeftMargin(0.14);
  anmaxvsmod0->SetMarkerStyle(20);
  anmaxvsmod0->Draw("AP");
  anmaxvsmod0->GetXaxis()->SetTitle("Module Number");
  anmaxvsmod0->GetYaxis()->SetTitle("Anode with max. drift speed");
  anmaxvsmod0->GetYaxis()->SetTitleOffset(1.4);
  anmaxvsmod1->SetMarkerStyle(21);
  anmaxvsmod1->SetMarkerColor(2);
  anmaxvsmod1->Draw("SAMEP");
  tleft->Draw();
  tright->Draw();
  c3->cd(3);
  gPad->SetLeftMargin(0.14);
  dvcevsmod0->SetMarkerStyle(20);
  dvcevsmod0->Draw("AP");
  dvcevsmod0->GetXaxis()->SetTitle("Module Number");
  dvcevsmod0->GetYaxis()->SetTitle("vdrift(anode128)-vdrift(anode0)");
  dvcevsmod0->GetYaxis()->SetTitleOffset(1.4);
  dvcevsmod1->SetMarkerStyle(21);
  dvcevsmod1->SetMarkerColor(2);
  dvcevsmod1->Draw("SAMEP");
  tleft->Draw();
  tright->Draw();
  c3->cd(4);
  gPad->SetLeftMargin(0.14);
  dveevsmod0->SetMarkerStyle(20);
  dveevsmod0->Draw("AP");
  dveevsmod0->GetYaxis()->SetTitleOffset(1.4);
  dveevsmod0->GetXaxis()->SetTitle("Module Number");
  dveevsmod0->GetYaxis()->SetTitle("vdrift(anode256)-vdrift(anode0)");
  dveevsmod1->SetMarkerStyle(21);
  dveevsmod1->SetMarkerColor(2);
  dveevsmod1->Draw("SAMEP");
  tleft->Draw();
  tright->Draw();

  
}



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