ROOT logo
/*
  .L $ALICE_ROOT/TPC/fastSimul/testEdgeFit.C+
  testEdge(50000);
*/

#include "TVectorD.h"
#include "TMath.h"
#include "TLinearFitter.h"
#include "TRandom.h"
#include "TH2F.h"
#include "TFile.h"
#include "TTree.h"
#include "TLegend.h"
#include "TPad.h"

#include "TTreeStream.h"
//#include "TVectorD.h"


void testEdge(Int_t ntest){

  TTreeSRedirector *cstream = new TTreeSRedirector("testEdge.root");
  Double_t yth=1;
  Double_t ymc0=0;
  Double_t kx=0;
  Double_t sy=0.25;
  Int_t npoints=100;
  TVectorD vecX;
  TVectorD vecY0;
  TVectorD vecYC;
  TVectorD vecYT;

  TVectorD vecU;
  TVectorD vecYTa;
  TVectorD vecYTb;
  TVectorD vecYEa;
  TVectorD vecYEb;
  //
  TVectorD vecYTM5;
  TVectorD vecYTk5;
  //
  TVectorD vecE;
  //
  //
  for (Int_t it=0; it<ntest;it++){
    //
    ymc0 = gRandom->Rndm()*1;
    kx = gRandom->Rndm()*1.;
    npoints = TMath::Nint(gRandom->Rndm()*50);
    vecX.ResizeTo(npoints);
    vecY0.ResizeTo(npoints);
    vecYC.ResizeTo(npoints);
    vecYT.ResizeTo(npoints);
    //
    vecYTa.ResizeTo(npoints);
    vecYTb.ResizeTo(npoints);
    vecYEa.ResizeTo(npoints);
    vecYEb.ResizeTo(npoints);
    vecU.ResizeTo(npoints);
    //
    TLinearFitter fitter(2,"pol1");
    for (Int_t ipoint=npoints-1;ipoint>0;ipoint--){
      Double_t x[10];
      //
      x[0]=(Double_t)(ipoint)*0.2;
      Double_t y0   = ymc0+Double_t(x[0])*kx; 
      Double_t yc   = y0+gRandom->Gaus()*sy;
      //
      if (yc<yth)   yc=yth;
      vecX[ipoint]   = x[0];;
      vecY0[ipoint]  = y0;
      vecYC[ipoint]  = yc;
      vecU[ipoint]   = 0;
      vecYT[ipoint]  = -10;
      vecYTa[ipoint] = -10;
      vecYTb[ipoint] = -10;
      fitter.AddPoint(x,yc,sy);
      if (fitter.GetNpoints()>4){
	fitter.Eval();
	fitter.GetErrors(vecE);
	vecYTa[ipoint]=fitter.GetParameter(0);
	vecYTb[ipoint]=fitter.GetParameter(1);
	vecYEa[ipoint]=vecE[0];
	vecYEb[ipoint]=vecE[1];
	vecU[ipoint]=fitter.GetNpoints();
	vecYT[ipoint]=fitter.GetParameter(0)+fitter.GetParameter(1)*x[0];
      }
    }
    (*cstream)<<"Dump"<<
      "n="<<npoints<<
      "ymc="<<ymc0<<
      "kx="<<kx<<
      "vX.="<<&vecX<<
      "vU.="<<&vecU<<
      "vY0.="<<&vecY0<<
      "vYC.="<<&vecYC<<
      "vYT.="<<&vecYT<<
      "vYTax.="<<&vecYTa<<
      "vYTb.="<<&vecYTb<<
      "vYEa.="<<&vecYEa<<
      "vYEb.="<<&vecYEb<<
      "\n";
  }
  delete cstream;
}


void MakePicDy(){
  TFile f("testEdge.root");
  TTree * tree = (TTree*)f.Get("Dump");
  TObjArray arrfdy0,arrfdyT;
  TH2F *phisdY0 = new TH2F("hisdY0","hisdY0",25,1,3,200,-3,3);
  TH2F *phisdYT = new TH2F("hisdYT","hisdYT",25,1,3,200,-3,3);
  tree->Draw("10*(vYT.fElements-vY0.fElements):vY0.fElements>>hisdY0","vU.fElements>20&&kx>0.1","colz");
  phisdY0->SetDirectory(0);
  tree->Draw("10*(vYT.fElements-vY0.fElements):vYT.fElements>>hisdYT","vU.fElements>20&&kx>0.1","colz");
  phisdYT->SetDirectory(0);

  phisdY0->FitSlicesY(0,0,-1,0,"QNR",&arrfdy0); 
  phisdYT->FitSlicesY(0,0,-1,0,"QNR",&arrfdyT);
  //
  TH1 *hisdy0 = (TH1*)arrfdy0.At(1);
  TH1 *hisdyT = (TH1*)arrfdyT.At(1);
  hisdy0->SetLineColor(1);
  hisdyT->SetLineColor(2);
  hisdy0->SetMarkerColor(1);
  hisdyT->SetMarkerColor(2);
  hisdy0->SetMarkerStyle(22);
  hisdyT->SetMarkerStyle(24);
  hisdyT->SetXTitle("Y (cm)");
  hisdyT->SetYTitle("Y_{t}-Y_{mc} (mm)");
  hisdyT->SetMinimum(-hisdyT->GetMaximum());
  hisdyT->Draw();
  hisdy0->Draw("same");
  TLegend *legend = new TLegend(0.25,0.60,0.85,0.85, "Track residuals close to edge (Edge= 1 cm, #sigma_{cl}=0.25 cm)");
  legend->AddEntry(hisdy0,"Y=Y_{mc}");
  legend->AddEntry(hisdyT,"Y=Y_{t}");
  legend->Draw();
  gPad->SaveAs("picEdge/dYedgeMC.eps");
  gPad->SaveAs("picEdge/dYedgeMC.gif");
}

void MakePickDy(){
  TFile f("testEdge.root");
  TTree * tree = (TTree*)f.Get("Dump");
  TObjArray arrfdky0,arrfdkyT;
  TH2F *phisdKY0 = new TH2F("hisdKY0","hisdKY0",25,1,3,200,-150,150);
  TH2F *phisdKYT = new TH2F("hisdKYT","hisdKYT",25,1,3,200,-150,150);
  tree->Draw("1000*(vYTb.fElements-kx):vY0.fElements>>hisdKY0","vU.fElements>20","colz");
  phisdKY0->SetDirectory(0);
  tree->Draw("1000*(vYTb.fElements-kx):vYT.fElements>>hisdKYT","vU.fElements>20","colz");
  phisdKYT->SetDirectory(0);

  phisdKY0->FitSlicesY(0,0,-1,0,"QNR",&arrfdky0); 
  phisdKYT->FitSlicesY(0,0,-1,0,"QNR",&arrfdkyT);
  //
  TH1 *hisdky0 = (TH1*)arrfdky0.At(1);
  TH1 *hisdkyT = (TH1*)arrfdkyT.At(1);
  hisdky0->SetLineColor(1);
  hisdkyT->SetLineColor(2);
  hisdky0->SetMarkerColor(1);
  hisdkyT->SetMarkerColor(2);
  hisdky0->SetMarkerStyle(22);
  hisdkyT->SetMarkerStyle(24);
  hisdkyT->SetMinimum(-20);
  hisdkyT->SetMaximum(20);
  hisdkyT->SetXTitle("Y (cm)");
  hisdkyT->SetYTitle("k_{yt}-k_{ymc} (mrad)");
  hisdkyT->Draw();
  hisdky0->Draw("same");
  TLegend *legend = new TLegend(0.25,0.60,0.85,0.85, "Track residuals close to edge (Edge= 1 cm, #sigma_{cl}=0.25 cm)");
  legend->AddEntry(hisdky0,"Y=Y_{mc}");
  legend->AddEntry(hisdkyT,"Y=Y_{t}");
  legend->Draw();
  gPad->SaveAs("picEdge/dKYedgeMC.eps");
  gPad->SaveAs("picEdge/dKYedgeMC.gif");
}


 testEdgeFit.C:1
 testEdgeFit.C:2
 testEdgeFit.C:3
 testEdgeFit.C:4
 testEdgeFit.C:5
 testEdgeFit.C:6
 testEdgeFit.C:7
 testEdgeFit.C:8
 testEdgeFit.C:9
 testEdgeFit.C:10
 testEdgeFit.C:11
 testEdgeFit.C:12
 testEdgeFit.C:13
 testEdgeFit.C:14
 testEdgeFit.C:15
 testEdgeFit.C:16
 testEdgeFit.C:17
 testEdgeFit.C:18
 testEdgeFit.C:19
 testEdgeFit.C:20
 testEdgeFit.C:21
 testEdgeFit.C:22
 testEdgeFit.C:23
 testEdgeFit.C:24
 testEdgeFit.C:25
 testEdgeFit.C:26
 testEdgeFit.C:27
 testEdgeFit.C:28
 testEdgeFit.C:29
 testEdgeFit.C:30
 testEdgeFit.C:31
 testEdgeFit.C:32
 testEdgeFit.C:33
 testEdgeFit.C:34
 testEdgeFit.C:35
 testEdgeFit.C:36
 testEdgeFit.C:37
 testEdgeFit.C:38
 testEdgeFit.C:39
 testEdgeFit.C:40
 testEdgeFit.C:41
 testEdgeFit.C:42
 testEdgeFit.C:43
 testEdgeFit.C:44
 testEdgeFit.C:45
 testEdgeFit.C:46
 testEdgeFit.C:47
 testEdgeFit.C:48
 testEdgeFit.C:49
 testEdgeFit.C:50
 testEdgeFit.C:51
 testEdgeFit.C:52
 testEdgeFit.C:53
 testEdgeFit.C:54
 testEdgeFit.C:55
 testEdgeFit.C:56
 testEdgeFit.C:57
 testEdgeFit.C:58
 testEdgeFit.C:59
 testEdgeFit.C:60
 testEdgeFit.C:61
 testEdgeFit.C:62
 testEdgeFit.C:63
 testEdgeFit.C:64
 testEdgeFit.C:65
 testEdgeFit.C:66
 testEdgeFit.C:67
 testEdgeFit.C:68
 testEdgeFit.C:69
 testEdgeFit.C:70
 testEdgeFit.C:71
 testEdgeFit.C:72
 testEdgeFit.C:73
 testEdgeFit.C:74
 testEdgeFit.C:75
 testEdgeFit.C:76
 testEdgeFit.C:77
 testEdgeFit.C:78
 testEdgeFit.C:79
 testEdgeFit.C:80
 testEdgeFit.C:81
 testEdgeFit.C:82
 testEdgeFit.C:83
 testEdgeFit.C:84
 testEdgeFit.C:85
 testEdgeFit.C:86
 testEdgeFit.C:87
 testEdgeFit.C:88
 testEdgeFit.C:89
 testEdgeFit.C:90
 testEdgeFit.C:91
 testEdgeFit.C:92
 testEdgeFit.C:93
 testEdgeFit.C:94
 testEdgeFit.C:95
 testEdgeFit.C:96
 testEdgeFit.C:97
 testEdgeFit.C:98
 testEdgeFit.C:99
 testEdgeFit.C:100
 testEdgeFit.C:101
 testEdgeFit.C:102
 testEdgeFit.C:103
 testEdgeFit.C:104
 testEdgeFit.C:105
 testEdgeFit.C:106
 testEdgeFit.C:107
 testEdgeFit.C:108
 testEdgeFit.C:109
 testEdgeFit.C:110
 testEdgeFit.C:111
 testEdgeFit.C:112
 testEdgeFit.C:113
 testEdgeFit.C:114
 testEdgeFit.C:115
 testEdgeFit.C:116
 testEdgeFit.C:117
 testEdgeFit.C:118
 testEdgeFit.C:119
 testEdgeFit.C:120
 testEdgeFit.C:121
 testEdgeFit.C:122
 testEdgeFit.C:123
 testEdgeFit.C:124
 testEdgeFit.C:125
 testEdgeFit.C:126
 testEdgeFit.C:127
 testEdgeFit.C:128
 testEdgeFit.C:129
 testEdgeFit.C:130
 testEdgeFit.C:131
 testEdgeFit.C:132
 testEdgeFit.C:133
 testEdgeFit.C:134
 testEdgeFit.C:135
 testEdgeFit.C:136
 testEdgeFit.C:137
 testEdgeFit.C:138
 testEdgeFit.C:139
 testEdgeFit.C:140
 testEdgeFit.C:141
 testEdgeFit.C:142
 testEdgeFit.C:143
 testEdgeFit.C:144
 testEdgeFit.C:145
 testEdgeFit.C:146
 testEdgeFit.C:147
 testEdgeFit.C:148
 testEdgeFit.C:149
 testEdgeFit.C:150
 testEdgeFit.C:151
 testEdgeFit.C:152
 testEdgeFit.C:153
 testEdgeFit.C:154
 testEdgeFit.C:155
 testEdgeFit.C:156
 testEdgeFit.C:157
 testEdgeFit.C:158
 testEdgeFit.C:159
 testEdgeFit.C:160
 testEdgeFit.C:161
 testEdgeFit.C:162
 testEdgeFit.C:163
 testEdgeFit.C:164
 testEdgeFit.C:165
 testEdgeFit.C:166
 testEdgeFit.C:167
 testEdgeFit.C:168
 testEdgeFit.C:169
 testEdgeFit.C:170
 testEdgeFit.C:171
 testEdgeFit.C:172
 testEdgeFit.C:173
 testEdgeFit.C:174
 testEdgeFit.C:175
 testEdgeFit.C:176
 testEdgeFit.C:177
 testEdgeFit.C:178
 testEdgeFit.C:179
 testEdgeFit.C:180