sipm-characterisation 0.1.0
SiPM characterisation for ePIC — IV/DCR/gain, laser, readout, irradiation
Loading...
Searching...
No Matches
makeiv.C
Go to the documentation of this file.
1#pragma once
2
3#include "../utils/graphutils.C"
4
6makeiv(const std::string fnivscan, const std::string fnzero, bool invertX = true, bool invertY = true, bool write = true)
7{
8
10 auto zero = 0.;
11 auto ezero = 0.;
12 if (!fnzero.empty())
13 {
14 auto gzero = new TGraph(fnzero.c_str(), "%lg %*lg %lg");
15 gzero = invertY ? graphutils::invertY(gzero) : gzero;
16 auto pzero = new TProfile("pzero", "", 1, 0., 1.);
17 for (int i = 0; i < gzero->GetN(); ++i)
18 pzero->Fill(0., gzero->GetY()[i]);
19 zero = pzero->GetBinContent(1);
20 ezero = pzero->GetBinError(1);
21 }
22 //zero = 0.;
23 //ezero = 0.;
24 //
25 //std::cout << " --- zero volt level: " << zero * 1.e12 << " +- " << ezero * 1.e12 << " pA" << std::endl;
26
28 // std::cout << " --- open iv scan file: " << fnivscan << std::endl;
29 auto givscan = new TGraph(fnivscan.c_str(), "%*lg %lg %lg");
32 auto pivscan = new TProfile("pivscan", "", 10001, -0.005, 100.005);
33 for (int i = 0; i < givscan->GetN(); ++i)
34 pivscan->Fill(givscan->GetX()[i], givscan->GetY()[i]);
35
37 auto hivscan = new TH1F("hivscan", "", 10001, -0.005, 100.005);
38 auto gout = new TGraphErrors;
39 gout->SetName(fnivscan.c_str());
40 auto npoints = 0;
41 for (int i = 0; i < pivscan->GetNbinsX(); ++i)
42 {
43 if (pivscan->GetBinError(i + 1) == 0.)
44 continue;
45 auto cen = pivscan->GetBinCenter(i + 1);
46 auto val = pivscan->GetBinContent(i + 1);
47 auto eval = pivscan->GetBinError(i + 1);
48 val = val - zero;
49 eval = std::sqrt(eval * eval + ezero * ezero);
50 gout->SetPoint(npoints, cen, val);
51 gout->SetPointError(npoints, 0., eval);
52 hivscan->SetBinContent(i + 1, val);
53 hivscan->SetBinError(i + 1, eval);
54 npoints++;
55 }
56
57 if (!write)
58 {
59 delete pivscan;
60 delete hivscan;
61 return gout;
62 }
63
65 auto lastindex = fnivscan.find_last_of(".");
66 auto fnout = fnivscan.substr(0, lastindex) + ".makeiv.root";
67 // std::cout << " --- writing output file: " << fnout << std::endl;
68 auto fout = TFile::Open(fnout.c_str(), "RECREATE");
69 gout->Write("ivscan");
70 hivscan->Write("hivscan");
71 fout->Close();
72 delete pivscan;
73 delete hivscan;
74
75 return gout;
76}
TH2_Type * build_fine_tune_raw_histogram(std::vector< TString > kInputFileNames, TString kRunTag, TString kOutputFileName, bool kRecalculate)
Functions -------------------------------------------------------------------------------------------...
Definition fine_analysis.h:80
TGraph * invertX(TGraph *gin)
Definition graphutils.C:714
TGraph * invertY(TGraph *gin)
Definition graphutils.C:688
Definition zero.py:1
TGraphErrors * makeiv(const std::string fnivscan, const std::string fnzero, bool invertX=true, bool invertY=true, bool write=true)
Definition makeiv.C:6