BmnRoot
Loading...
Searching...
No Matches
simple_analysis.cpp
Go to the documentation of this file.
1#include <iostream>
2#include <fstream>
3#include <vector>
4#include <TFile.h>
5#include <TNtuple.h>
6#include <TGraph.h>
7#include <TF1.h>
8#include <TTree.h>
9#include <TCanvas.h>
10#include <TH1F.h>
11#include "TCutG.h"
12#include <algorithm>
13#include <fstream>
14#include <iostream>
15#include <map>
16#include <numeric>
17#include <stdio.h>
18//#include "utils.h"
19#include "TString.h"
20#include "TH1D.h"
21#include "TMultiGraph.h"
22#include "TStyle.h"
23#include "TH2.h"
24//#include "BmnHodoDigi.h"
25#include "TClonesArray.h"
26
27#include "../common/utilites.h"
28
29#define kNstrips 16
30#define kNsides 2
31#define kNgains 2
32
33int make_flat_index(uint32_t StripId, uint32_t StripSide, uint32_t Gain){
34 uint32_t address = BmnHodoAddress::GetAddress(0, StripId, StripSide, Gain);
35 return BmnHodoAddress::GetFlatIndex(address);
36}
37
38void simple_analysis(TString converted_root_file, TString result_file_name, int max_entries)
39{
40 TObjArray *canvas_array = new TObjArray;
41 canvas_array->SetName ("Canvas");
42 TObjArray *result_array = new TObjArray;
43 result_array->SetName("Histo");
44
45 int variantes = BmnHodoAddress::GetMaxFlatIndex();
46 std::vector<TH1F*> signalHistVect;
47 signalHistVect.resize(variantes);
48
49 for(uint32_t i =1; i < kNstrips+1; i++)
50 for(uint32_t j =0; j < kNsides; j++)
51 for(uint32_t k =0; k < kNgains; k++) {
52 auto idx = make_flat_index(i,j,k);
53 TString side = (j == 0)? "DOWN" : "UP";
54 TString gain = (k == 0)? "LOW" : "HIGH";
55 TString name = Form("strip%i side %s gain %s", i, side.Data(), gain.Data());
56 signalHistVect.at(idx) = new TH1F(Form("variant%i", idx),name.Data(), 300,0,4);
57
58 //cout << idx << " " << name << endl;
59 }
60
61 TFile *_file0 = TFile::Open(converted_root_file, "READONLY");
62 TTree *tree = (TTree *)_file0->Get("bmndata");
63
64 TClonesArray *DigiArray = nullptr; //leave nullptr!!!
65 tree->SetBranchAddress("HodoDigi", &DigiArray);
66
67 int counter = 0;
68 int n_events = (max_entries>0 && tree->GetEntries()>max_entries)? max_entries : tree->GetEntries();
69 cout << n_events << endl;
70 for (int ev = 0; ev < n_events; ev++)
71 {
72 tree->GetEntry(ev);
73 if (ev%10000 == 0) cout << "Event: " << ev << endl;
74 for (int i = 0; i < DigiArray->GetEntriesFast(); i++)
75 {
76 BmnHodoDigi *ThisDigi = (BmnHodoDigi *)DigiArray->At(i);
77
78 //##################################
79 //SELECTION
80 //if(ThisDigi->GetStripId() == 9) continue;
81 if(ThisDigi->fFitR2 > 0.55) continue;
82 if(ThisDigi->fTimeMax > 27 || ThisDigi->fTimeMax < 23) continue;
83 //##################################
84
85 auto strip = ThisDigi->GetStripId();
86 auto side = ThisDigi->GetStripSide();
87 auto gain = ThisDigi->GetGain();
88 auto idx = make_flat_index(strip,side,gain);
89 double signal = ThisDigi->GetSignal();
90
91 signalHistVect.at(idx)->Fill(signal);
92
93
94 //if(strip == 4 && side == 1 && gain == 1) cout<<ThisDigi->GetSignal()/ThisDigi->fAmpl<<endl;
95 }
96 }
97
98 BmnHodoRaw2Digit *Mapper = new BmnHodoRaw2Digit();
99 Mapper->ParseCalibration("HODO_S_calibration_2022.txt");
100
101
102 TCanvas *canv_total = new TCanvas("total", "total", 1600,1600);
103 canv_total->DivideSquare(64);
104 canvas_array->Add(canv_total);
105 int cnter = 0;
106 for(uint32_t i =1; i < kNstrips+1; i++)
107 for(uint32_t j =0; j < kNsides; j++)
108 for(uint32_t k =0; k < kNgains; k++) {
109 cnter++;
110 auto idx = make_flat_index(i,j,k);
111 TCanvas *canv_ptr = new TCanvas();
112 canv_ptr->SetLogy();
113 canvas_array->Add(canv_ptr);
114 //if(k == 0) continue;
115
116 double range_low, range_high;
117 //if(k == 0) { range_low = 500; range_high= 2000; }
118 //if(k == 1) { range_low = 2000; range_high= 10000; }
119 range_low = 15; range_high= 30;
120 double mean, sigma;
121 FitHistogrammSmartInMaxPeak(signalHistVect.at(idx), mean, sigma, 3, range_low, range_high);
122 double adj_now = 23.0/mean;
123 TString new_name = Form("%s MEAN %.5f", signalHistVect.at(idx)->GetTitle(), adj_now);
124 signalHistVect.at(idx)->SetTitle(new_name.Data());
125 result_array->Add(signalHistVect.at(idx));
126 signalHistVect.at(idx)->Draw();
127
128 canv_total->cd(cnter);
129 signalHistVect.at(idx)->Draw();
130
131 uint32_t address = BmnHodoAddress::GetAddress(0, i, j, k);
132 auto calib_pair = Mapper->GetCalibPairFromAddress(address);
133 double new_calib = calib_pair.first*adj_now;
134 printf("calib = Q %i %i %i %.5f 0.0\n", i, j, k, new_calib);
135 }
136
137
138 TFile *result_file = new TFile((result_file_name + ".root").Data(), "RECREATE");
139 TIter nx_iter((TCollection*)(result_array));
140 TObject* obj_ptr;
141 while ( (obj_ptr=(TObjArray*)nx_iter()) )
142 {
143 if(obj_ptr == nullptr) continue;
144 printf("Writing %s object\n", obj_ptr->GetName());
145 obj_ptr->Write();
146 }
147 printf("file %s was written\n", (result_file_name + ".root").Data());
148 result_file->Close();
149 delete result_file;
150
151 for (Int_t i = 0; i < canvas_array->GetLast (); i++)
152 ((TCanvas*) canvas_array->At(i))->SaveAs ((result_file_name + ".pdf(").Data ());
153 ((TCanvas*) canvas_array->At (canvas_array->GetLast ()))->SaveAs ((result_file_name + ".pdf)").Data ());
154 printf("file %s was written\n", (result_file_name + ".pdf").Data());
155
156}
int i
Definition P4_F32vec4.h:22
double GetSignal() const
float fFitR2
Energy deposition from fit of waveform [adc counts].
int fTimeMax
Energy deposition from waveform [adc counts].
static uint32_t GetAddress(uint32_t StripId, uint32_t StripSide, uint32_t Gain)
Return address from system ID, StripId, StripSide, Gain.
Data class for BmnHodo digital signal processing.
Definition BmnHodoDigi.h:25
uint32_t GetGain() const
Gain.
Definition BmnHodoDigi.h:70
uint32_t GetStripSide() const
Strip Side.
Definition BmnHodoDigi.h:65
uint32_t GetStripId() const
void ParseCalibration(const std::string &file)
std::optional< std::pair< float, float > > GetCalibPairFromAddress(uint32_t address)
Int_t FitHistogrammSmartInMaxPeak(TH1 *histogramm, Double_t &mean, Double_t &sigma, Double_t nRMSfit=2., Double_t RangeXmin=0., Double_t RangeXmax=0.)
Definition utilites.h:395
#define kNstrips
#define kNgains
#define kNsides
int make_flat_index(uint32_t StripId, uint32_t StripSide, uint32_t Gain)
void simple_analysis(TString converted_root_file, TString result_file_name, int max_entries)