gamma.cxx 3.52 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13
TChain* MakeChain1();
TChain* MakeChain2();
TChain* MakeChain();
TH2F*   MakeTH2();
TH2F*   GetTH2();
double off;
double c_light=299.792458;//mm/ns
auto chain = MakeChain();
void process1bar(int b);
auto h = new TH2F("h","h",200,0,200,500,0,1000);
auto r = new TH2F("r","r",200,0,200,10000,17000,20000);
ofstream output("Calibration/Nebula/offset_gamma.txt");
////////////////////////////////////////////////////////////////////////////////
Adrien Matta's avatar
Adrien Matta committed
14
void gamma(){
15 16 17 18 19 20 21 22 23 24 25 26
  double beta=0.5504;
  // Distance from SBT(-7377.56) to target(3774.7 for FP + a value for each target)
  double D1=7377.56-3774.7+2.795;
  double D2=7377.56-3774.7+6.972;
  // time offset for each case
  double off1 = D1/(beta*c_light);
  double off2 = D2/(beta*c_light);
  off = (off1+off2)*0.5;
  cout << "Offset1 : " << off1 << endl;
  cout << "Offset2 : " << off2 << endl;
  cout << "Mean : " << off << endl;
  auto c = new TCanvas("tof","tof");
Adrien Matta's avatar
Adrien Matta committed
27

28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
  chain->SetAlias("R","sqrt(Nebula.PosX*Nebula.PosX+Nebula.PosY*Nebula.PosY+(Nebula.PosZ+3774.7)*(Nebula.PosZ+3774.7))");
  h=GetTH2();
  h->Draw("colz");
  for(unsigned int i = 0 ; i < 160 ; i++){
    process1bar(i); 
  }
  output.close();
}

////////////////////////////////////////////////////////////////////////////////
void process1bar(int b){
  new TCanvas();
  // Get the Radius for the distance to this barre
  auto r1 = r->ProjectionY(Form("h%d",b),b,b+1);  
  double R =  r1->GetBinCenter(r1->GetMaximumBin());

  auto h1 = h->ProjectionY(Form("h%d",b),b,b+1);
Adrien Matta's avatar
Adrien Matta committed
45
  h1->Rebin(4);
46 47 48 49 50 51 52 53
  double max = h1->GetBinCenter(h1->GetMaximumBin());
  h1->Draw();
  auto f = new TF1("f","gaus(0)",max-50,max+50);
  f->SetParameter(0,h1->GetMaximum());
  f->SetParameter(1,max);
  f->SetParameter(2,50);
  h1->Fit(f,"R");
  
54 55 56 57 58 59 60
    // Vbad = R/(TOF) -> TOF/R = 1/Vbad
    // c= R/(TOF+X)   -> (TOF+X)/R = 1/c -> TOF/R+X/R=1/c
    // 1/Vbad +X/R = 1/c
    // X=R*(1/c-1/Vbad)
    
  double offset=R*(1/c_light-1/f->GetParameter(1)) ;

61 62
  cout <<f->GetParameter(1) << " " <<  offset << " " << R/(f->GetParameter(1)-offset) << endl;
  if(offset>0)
63
    output << "NEBULA_T_ID"  << b << " " << offset << endl; 
64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
}
////////////////////////////////////////////////////////////////////////////////
TH2F* GetTH2(){
  auto File= new TFile("Calibration/Nebula/hist_v.root");
  h = (TH2F*) File->FindObjectAny("h");

  File= new TFile("Calibration/Nebula/hist_r.root");
  r = (TH2F*) File->FindObjectAny("r");
  return h;
  }

////////////////////////////////////////////////////////////////////////////////
TH2F* MakeTH2(){
  TString cond=Form("(Nebula.TOF-%f)>20&&(Nebula.TOF-%f)<38",off,off);
  TString draw=Form("R/(Nebula.TOF-%f):Nebula.DetectorNumber>>h",off); 
  chain->Draw(draw,cond,"colz");
  h->SaveAs("Calibration/Nebula/hist_v.root");

  chain->Draw("R:Nebula.DetectorNumber>>r","","colz");
  r->SaveAs("Calibration/Nebula/hist_r.root");

  return h;
  }

////////////////////////////////////////////////////////////////////////////////
TChain* MakeChain(){
Adrien Matta's avatar
Adrien Matta committed
90
  auto chain = new TChain("PhysicsTree");
91 92 93
  chain->Add("root/analysis/gamma/run*.root");
  return chain;
}
Adrien Matta's avatar
Adrien Matta committed
94

95 96 97 98 99 100 101 102
////////////////////////////////////////////////////////////////////////////////
TChain* MakeChain1(){
  auto chain = new TChain("PhysicsTree");
  for(unsigned int i = 418 ; i < 442  ; i++){
    chain->Add(Form("root/analysis/gamma/run%d.root",i));
  }
  return chain;
}
Adrien Matta's avatar
Adrien Matta committed
103

104 105 106 107 108
////////////////////////////////////////////////////////////////////////////////
TChain* MakeChain2(){
  auto chain = new TChain("PhysicsTree");
  for(unsigned int i = 488 ; i < 498  ; i++){
    chain->Add(Form("root/analysis/gamma/run%d.root",i));
Adrien Matta's avatar
Adrien Matta committed
109
  }
110 111
  return chain;
}