BmnRoot 26.10.0-18-g4e3414f9
Software framework of the BM@N experiment
Loading...
Searching...
No Matches
BmnRescale.cxx
Go to the documentation of this file.
1#include "BmnRescale.h"
2
3BmnRescale::BmnRescale(UInt_t periodId, UInt_t runId, Double_t lowThr, Double_t ClusterSizeThr, Int_t nBins)
4{
5 fPeriodId = periodId;
6 fRunId = runId;
7 fSetup = (fRunId >= 2041 && fRunId <= 3588) ? kSRCSETUP : kBMNSETUP;
8 fLowThr = lowThr;
9 fClusterSizeThr = ClusterSizeThr;
10 fNBins = nBins;
12}
13
29
31{
32 TString xmlConfFileNameGEM;
33 TString xmlConfFileNameSil;
34 TString xmlConfFileNameCSC;
35 // Select xml configs
36 switch (fPeriodId) {
37 case 7:
38 if (fSetup == kBMNSETUP) {
39 xmlConfFileNameGEM = "GemRunSpring2018.xml";
40 xmlConfFileNameSil = "SiliconRunSpring2018.xml";
41 xmlConfFileNameCSC = "CSCRunSpring2018.xml";
42 } else {
43 xmlConfFileNameGEM = "GemRunSRCSpring2018.xml";
44 xmlConfFileNameSil = "SiliconRunSRCSpring2018.xml";
45 xmlConfFileNameCSC = "CSCRunSRCSpring2018.xml";
46 }
47 break;
48 case 6:
49 xmlConfFileNameGEM = "GemRunSpring2017.xml";
50 xmlConfFileNameSil = "SiliconRunSpring2017.xml";
51 break;
52 default:
53 printf("Error! Unknown config!\n");
54 return;
55 break;
56 }
57 // create 3d vectors for functions for all stations/modules/planes
58 if (xmlConfFileNameGEM.Length() > 0) {
59 xmlConfFileNameGEM = TString(getenv("VMCWORKDIR")) + "/parameters/gem/XMLConfigs/" + xmlConfFileNameGEM;
60 printf("xmlConfFileName %s\n", xmlConfFileNameGEM.Data());
61 fGemStationSet = new BmnGemStripStationSet(xmlConfFileNameGEM);
64 }
65 if (xmlConfFileNameSil.Length() > 0) {
66 xmlConfFileNameSil = TString(getenv("VMCWORKDIR")) + "/parameters/silicon/XMLConfigs/" + xmlConfFileNameSil;
67 printf("xmlConfFileName %s\n", xmlConfFileNameSil.Data());
68 fSilStationSet = new BmnSiliconStationSet(xmlConfFileNameSil);
71 }
72 if (xmlConfFileNameCSC.Length() > 0) {
73 xmlConfFileNameCSC = TString(getenv("VMCWORKDIR")) + "/parameters/csc/XMLConfigs/" + xmlConfFileNameCSC;
74 printf("xmlConfFileName %s\n", xmlConfFileNameCSC.Data());
75 fCscStationSet = new BmnCSCStationSet(xmlConfFileNameCSC);
78 }
79}
80
82{
83 if (!mc || !ex)
84 return nullptr;
85 TF1* funcRescale = new TF1(
86 name,
87 [mc, ex](Double_t* x, Double_t* p) {
88 Double_t r = mc->Eval(x[0]);
89 Double_t f = ex->GetX(r); //, ex->GetXmin(), ex->GetXmax(), 1.E-15, 100, kTRUE);
90 // printf("x = %f mc = %f y = %f\n", x[0], r, f);
91 return f;
92 },
93 mc->GetXmin(), mc->GetXmax(), 0);
94 return funcRescale;
95}
96
98 vector<TString> digiNames,
99 vector<vector<vector<vector<BmnSigInfo*>>>> digiVecs)
100{
101 vector<TClonesArray*> ars;
102 TChain* chain = new TChain("bmndata");
103 chain->Add(fileName.Data());
104 Long64_t NEventsMC = chain->GetEntries();
105 printf("%s recorded entries = %lld\n", fileName.Data(), NEventsMC);
106 for (TString& digiName : digiNames) {
107 TClonesArray* arDigi = nullptr;
108 chain->SetBranchAddress(digiName.Data(), &arDigi);
109 ars.push_back(arDigi);
110 }
111 for (size_t i = 0; i < digiVecs.size(); i++)
112 CreateDigitDistributions(chain, ars[i], digiVecs[i]);
113 delete chain;
114 return kBMNSUCCESS;
115}
116
118 vector<TString> hitNames,
119 vector<vector<vector<vector<BmnSigInfo*>>>> clusterVecs)
120{
121 vector<TClonesArray*> hitArr;
122 TChain* chain = new TChain("bmndata");
123 chain->Add(fileName.Data());
124 Long64_t NEvents = chain->GetEntries();
125 printf("%s recorded entries = %lld\n", fileName.Data(), NEvents);
126 for (TString& hitName : hitNames) {
127 TClonesArray* arDigi = nullptr;
128 chain->SetBranchAddress(hitName.Data(), &arDigi);
129 hitArr.push_back(arDigi);
130 }
131 // for (Int_t i = 0; i < fNArs; i++)
132 // CreateClusterDistributions(chain, ars[i], clusterVecs[i]);
134 BmnGemStripLayer>(chain, hitArr[0], fGemStationSet, clusterVecs[0]);
136 BmnSiliconLayer>(chain, hitArr[1], fSilStationSet, clusterVecs[1]);
138 chain, hitArr[2], fCscStationSet, clusterVecs[2]);
139 delete chain;
140 return kBMNSUCCESS;
141}
142
144 TString globalTrackName,
145 vector<TString> subTrackNames,
146 vector<TString> hitNames,
147 vector<vector<vector<vector<BmnSigInfo*>>>> clusterVecs)
148{
149 TClonesArray* globalTrackArr;
150 vector<TClonesArray*> subTrackArr;
151 vector<TClonesArray*> hitArr;
152 TChain* chain = new TChain("bmndata");
153 chain->Add(fileName.Data());
154 Long64_t NEvents = chain->GetEntries();
155 printf("%s recorded entries = %lld\n", fileName.Data(), NEvents);
156
157 chain->SetBranchAddress(globalTrackName.Data(), &globalTrackArr);
158
159 for (TString& subTrackName : subTrackNames) {
160 TClonesArray* arDigi = nullptr;
161 if (subTrackName.Length() > 0)
162 chain->SetBranchAddress(subTrackName.Data(), &arDigi);
163 subTrackArr.push_back(arDigi);
164 }
165 for (TString& hitName : hitNames) {
166 TClonesArray* arDigi = nullptr;
167 chain->SetBranchAddress(hitName.Data(), &arDigi);
168 hitArr.push_back(arDigi);
169 }
170 // for (Int_t i = 0; i < fNArs; i++)
171 // CreateClusterDistributions(chain, ars[i], clusterVecs[i]);
173 BmnGemStripLayer>(chain, globalTrackArr, subTrackArr[0], hitArr[0], fGemStationSet,
174 clusterVecs[0]);
176 BmnSiliconLayer>(chain, globalTrackArr, subTrackArr[1], hitArr[1], fSilStationSet,
177 clusterVecs[1]);
179 chain, globalTrackArr, nullptr, hitArr[2], fCscStationSet, clusterVecs[2]);
180 delete chain;
181 return kBMNSUCCESS;
182}
183
185{
186 if (fileNameMC == "" || fileNameEx == "") {
187 cout << "Files need to be specified!" << endl;
188 return kBMNERROR;
189 }
190 TString GlobalTrackName = "BmnGlobalTrack";
191 vector<TString> mcDigiNames = {"BmnGemStripDigit", "BmnSiliconDigit", "BmnCSCDigit"};
193 LoadDigitDistributionsFromFile(fileNameMC, mcDigiNames, mcVecs);
194
195 vector<TString> subTrackNames = {"BmnGemTrack", "BmnSiliconTrack", ""};
196 vector<TString> hitNames = {"BmnGemStripHit", "BmnSiliconHit", "BmnCSCHit"};
197 // vector<TString> expDigiNames = {"SILICON", "GEM", "CSC"};
198 // LoadDigitDistributionsFromFile(fileNameEx, expDigiNames, expVecs);
200 LoadClustersOfTrackDistributionsFromFile(fileNameEx, GlobalTrackName, subTrackNames, hitNames, expVecs);
201
208
209 return kBMNSUCCESS;
210}
211
213 TClonesArray* digits,
214 vector<vector<vector<BmnSigInfo*>>>& infoVec)
215{
216 printf("CreateDigitDistributions started for %s\n", digits->GetClass()->GetName());
217 // Find bounds
218 for (Long64_t i = 0; i < treeDig->GetEntries(); i++) {
219 treeDig->GetEntry(i);
220 for (Int_t iHit = 0; iHit < digits->GetEntriesFast(); iHit++) {
221 BmnStripDigit* dig = static_cast<BmnStripDigit*>(digits->UncheckedAt(iHit));
222 Int_t s = dig->GetStation();
223 Int_t m = dig->GetModule();
224 Int_t l = dig->GetStripLayer();
225 BmnSigInfo* info = infoVec[s][m][l];
226 Double_t val = dig->GetStripSignal();
227 if (val > fLowThr) {
228 if (info->maxVal < val)
229 info->maxVal = val;
230 if (info->minVal > val)
231 info->minVal = val;
232 }
233 }
234 }
235 // Create histograms
236 for (size_t iStation = 0; iStation < infoVec.size(); iStation++) {
237 printf("iStation %zu\n", iStation);
238 for (size_t iModule = 0; iModule < infoVec[iStation].size(); iModule++) {
239 printf("\tiModule %zu\n", iModule);
240 for (size_t iLayer = 0; iLayer < infoVec[iStation][iModule].size(); iLayer++) {
241 printf("\t\tiLayer %zu\n", iLayer);
242 BmnSigInfo* info = infoVec[iStation][iModule][iLayer];
243 Double_t minVal = info->minVal;
244 Double_t maxVal = info->maxVal;
245 if (minVal > maxVal)
246 continue;
247 printf("\t\t\tMin = %f max = %f\n", minVal, maxVal);
248 TString name = Form("Sig_mc_%s_%zu_%zu_%zu", digits->GetName(), iStation, iModule, iLayer);
249 info->hSig = new TH1D(name, name, fNBins, minVal - 0.5 * (maxVal - minVal) / (Double_t)fNBins,
250 maxVal + 0.5 * (maxVal - minVal) / (Double_t)fNBins);
251 name = Form("IntSignal_%s_%zu_%zu_%zu", digits->GetName(), iStation, iModule, iLayer);
252 info->hIntSig = new TH1D(name, name, fNBins, minVal - 0.5 * (maxVal - minVal) / (Double_t)fNBins,
253 maxVal + 0.5 * (maxVal - minVal) / (Double_t)fNBins);
254 }
255 }
256 }
257 // Fill signal hists
258 for (Long64_t i = 0; i < treeDig->GetEntries(); i++) {
259 treeDig->GetEntry(i);
260 for (Int_t iHit = 0; iHit < digits->GetEntriesFast(); iHit++) {
261 BmnStripDigit* dig = static_cast<BmnStripDigit*>(digits->UncheckedAt(iHit));
262 Int_t s = dig->GetStation();
263 Int_t m = dig->GetModule();
264 Int_t l = dig->GetStripLayer();
265 BmnSigInfo* info = infoVec[s][m][l];
266 if (!(info->hSig))
267 continue;
268 Double_t val = dig->GetStripSignal();
269 if (val > fLowThr) {
270 info->hSig->Fill(val);
271 }
272 }
273 }
274 // Fill integral hists
275 for (size_t iStation = 0; iStation < infoVec.size(); iStation++) {
276 for (size_t iModule = 0; iModule < infoVec[iStation].size(); iModule++) {
277 for (size_t iLayer = 0; iLayer < infoVec[iStation][iModule].size(); iLayer++) {
278 BmnSigInfo* info = infoVec[iStation][iModule][iLayer];
279 if (!(info->hSig))
280 continue;
281 Double_t bc = 0;
282 for (Int_t i = 0; i < fNBins; i++) {
283 bc += info->hSig->GetBinContent(i);
284 info->hIntSig->SetBinContent(i, bc);
285 }
286 if (bc == 0)
287 continue;
288 info->hIntSig->Scale(1 / bc);
289 info->hIntSig->SetLineColor(kRed);
290 info->func = new TF1(
291 Form("%s_%zu_%zu_%zu", digits->GetName(), iStation, iModule, iLayer),
292 [info, bc](Double_t* x, Double_t* p) {
293 // Double_t val = (bc - x[0])/bc;//log(x[0]);
294 if (x[0] >= info->maxVal)
295 return 1.0;
296 Int_t iBin = info->hIntSig->GetXaxis()->FindBin(x[0]);
297 Int_t jBin = iBin + ((x[0] > info->hIntSig->GetBinCenter(iBin)) ? 1 : -1);
298 Double_t v = info->hIntSig->GetBinContent(iBin)
299 + (info->hIntSig->GetBinContent(jBin) - info->hIntSig->GetBinContent(iBin)) * 2
300 * abs(x[0] - info->hIntSig->GetBinCenter(iBin))
301 / (info->hIntSig->GetBinWidth(iBin) + info->hIntSig->GetBinWidth(jBin));
302 return v;
303 },
304 info->minVal, info->maxVal, 0);
305 info->func->SetNpx(fNBins);
306 info->func->SetLineColor(kBlue);
307 }
308 }
309 }
310}
311
316
321
int i
Definition P4_F32vec4.h:22
__m128 m
Definition P4_F32vec4.h:27
int Int_t
double Double_t
long long Long64_t
kRed
kBlue
char * Form(const char *fmt,...)
BmnStatus
Define status code.
Definition BmnEnums.h:93
@ kBMNERROR
Error.
Definition BmnEnums.h:95
@ kBMNSUCCESS
Success.
Definition BmnEnums.h:94
@ kSRCSETUP
Definition BmnEnums.h:167
@ kBMNSETUP
Definition BmnEnums.h:166
BmnStatus CreateRescales(TString fileNameMC, TString fileNameEx)
void CreateStripVectors()
void FreeVector3D(vector< vector< vector< cl * > > > vvv)
Definition BmnRescale.h:183
vector< vector< vector< BmnSigInfo * > > > fStripGemInfoEx
Definition BmnRescale.h:141
TF1 * GetRescaleFunc(TString name, TF1 *mc, TF1 *ex)
void CreateClusterDistributions(TTree *treeDST, TClonesArray *globTracks, TClonesArray *subTracks, TClonesArray *gemHits, ClStationSet *ss, vector< vector< vector< BmnSigInfo * > > > &infoVec)
Template function aimed to create exp cluster signal distribution function (Hits from tracks variant)...
Definition BmnRescale.h:254
UInt_t fRunId
Definition BmnRescale.h:129
UInt_t fPeriodId
Definition BmnRescale.h:128
vector< vector< vector< TF1 * > > > fStripGemRescale
Definition BmnRescale.h:144
BmnStatus LoadDigitDistributionsFromFile(TString name, vector< TString > digiNames, vector< vector< vector< vector< BmnSigInfo * > > > > digiVecs)
BmnStatus LoadClusterDistributionsFromFile(TString name, vector< TString > clusterNames, vector< vector< vector< vector< BmnSigInfo * > > > > clusterVecs)
virtual ~BmnRescale()
vector< vector< vector< TF1 * > > > fStripCSCRescale
Definition BmnRescale.h:146
void CreateDigitDistributions(TTree *treeDig, TClonesArray *digits, vector< vector< vector< BmnSigInfo * > > > &infoVec)
BmnCSCStationSet * fCscStationSet
Definition BmnRescale.h:136
Int_t fNBins
Definition BmnRescale.h:132
void FillInfoVector(ClStationSet *ss, vector< vector< vector< BmnSigInfo * > > > &vvv)
Template function for generating 3D vector of BmnSigInfo objects.
Definition BmnRescale.h:197
TCanvas * GetCanvas(ClStationSet *ss)
Definition BmnRescale.h:149
TCanvas * GetCanvasGem()
vector< vector< vector< BmnSigInfo * > > > fStripCSCInfoEx
Definition BmnRescale.h:143
TCanvas * GetCanvasCSC()
void FillRescaleVector(ClStationSet *ss, vector< vector< vector< BmnSigInfo * > > > &vMC, vector< vector< vector< BmnSigInfo * > > > &vEx, vector< vector< vector< TF1 * > > > &vRescale)
Definition BmnRescale.h:216
Double_t fLowThr
Definition BmnRescale.h:130
vector< vector< vector< BmnSigInfo * > > > fStripSilInfoMC
Definition BmnRescale.h:139
BmnStatus LoadClustersOfTrackDistributionsFromFile(TString fileName, TString globalTrackNames, vector< TString > subTrackNames, vector< TString > hitNames, vector< vector< vector< vector< BmnSigInfo * > > > > clusterVecs)
vector< vector< vector< BmnSigInfo * > > > fStripGemInfoMC
Definition BmnRescale.h:138
TCanvas * GetCanvasSil()
BmnGemStripStationSet * fGemStationSet
Definition BmnRescale.h:134
BmnRescale(UInt_t periodId, UInt_t runId, Double_t lowThr=0, Double_t ClusterSizeThr=0, Int_t nBins=1e6)
Definition BmnRescale.cxx:3
vector< vector< vector< BmnSigInfo * > > > fStripCSCInfoMC
Definition BmnRescale.h:140
BmnSiliconStationSet * fSilStationSet
Definition BmnRescale.h:135
vector< vector< vector< TF1 * > > > fStripSilRescale
Definition BmnRescale.h:145
vector< vector< vector< BmnSigInfo * > > > fStripSilInfoEx
Definition BmnRescale.h:142
BmnSetup fSetup
Definition BmnRescale.h:127
Double_t fClusterSizeThr
Definition BmnRescale.h:131
Double_t maxVal
Definition BmnRescale.h:77
TF1 * func
Definition BmnRescale.h:80
TH1D * hIntSig
Definition BmnRescale.h:79
Double_t minVal
Definition BmnRescale.h:76
TH1D * hSig
Definition BmnRescale.h:78
Class BmnStripDigit Base class for strip detector digits.
Int_t GetStripLayer()
Int_t GetStation()
Double_t GetStripSignal()
Int_t GetModule()
virtual void SetLineColor(Color_t lcolor)
Int_t SetBranchAddress(const char *bname, T **add, TBranch **ptr=nullptr)
virtual Int_t Add(const char *name, Long64_t nentries=TTree::kMaxEntries)
Long64_t GetEntries() const override
TClass * GetClass() const
const char * GetName() const override
virtual Double_t GetXmax() const
virtual void SetNpx(Int_t npx=100)
virtual Double_t GetX(Double_t y, Double_t xmin=0, Double_t xmax=0, Double_t epsilon=1.E-10, Int_t maxiter=100, Bool_t logx=false) const
virtual Double_t Eval(Double_t x, Double_t y=0, Double_t z=0, Double_t t=0) const
virtual Double_t GetXmin() const
virtual Int_t Fill(const char *name, Double_t w)
virtual void SetBinContent(Int_t bin, Double_t content)
virtual Double_t GetBinContent(Int_t bin) const
virtual void Scale(Double_t c1=1, Option_t *option="")
const char * GetName() const override
Int_t GetEntriesFast() const
TObject * UncheckedAt(Int_t i) const
Ssiz_t Length() const
const char * Data() const
virtual Int_t GetEntry(Long64_t entry, Int_t getall=0)
virtual Long64_t GetEntries() const