BmnRoot 26.10.0-18-g4e3414f9
Software framework of the BM@N experiment
Loading...
Searching...
No Matches
BmnMassSpectrumAnal.h
Go to the documentation of this file.
1#include <BmnParticlePair.h>
3#include <TCanvas.h>
4#include <TChain.h>
5#include <TClonesArray.h>
6#include <TCollection.h>
7#include <TF1.h>
8#include <TFile.h>
9#include <TFitResult.h>
10#include <TH1F.h>
11#include <TLatex.h>
12#include <TLegend.h>
13#include <TNamed.h>
14#include <TStyle.h>
15#include <TSystemDirectory.h>
16#include <UniDetectorParameter.h>
17#include <UniRun.h>
18#include <iostream>
19#include <vector>
20
21using namespace std;
22
23#ifndef BMNMASSSPECTRUMANAL_H
24#define BMNMASSSPECTRUMANAL_H 1
25
27{
28 public:
30
32
33 vector<TString> createFilelist();
34
35 void SetTarget(TString t) { fTarget.push_back(t); }
36
38 {
39 xLow = min;
40 xUp = max;
41 }
42
43 void SetSignalCut(Double_t s) { fSignal = s; }
44
46
47 // Cuts to check optimal ones ...
48
49 void SetCuts(vector<Double_t> DCA0,
50 vector<Double_t> DCA1,
51 vector<Double_t> DCA2,
52 vector<Double_t> DCA12,
53 vector<Double_t> PATH,
54 vector<Int_t> nHitsPos,
55 vector<Int_t> nHitsNeg)
56 {
57
58 // Looping over cut vectors ...
59 for (auto dca0 : DCA0)
60 for (auto dca1 : DCA1)
61 for (auto dca2 : DCA2)
62 for (auto dca12 : DCA12)
63 for (auto path : PATH)
64 for (auto nPos : nHitsPos)
65 for (auto nNeg : nHitsNeg) {
66 BmnParticlePairCut* pCut =
67 new ((*fParticlePairCuts)[fParticlePairCuts->GetEntriesFast()])
69 pCut->SetDca0(dca0);
70 pCut->SetDca1(dca1);
71 pCut->SetDca2(dca2);
72 pCut->SetDca12(dca12);
73 pCut->SetPath(path);
74 pCut->SetNHitsGemPos(nPos);
75 pCut->SetNHitsGemNeg(nNeg);
76 }
77
78 if (fParticlePairCuts->GetEntriesFast())
80 }
81
82 void SetNFiles(Int_t n) { fNFiles = n; }
83
85
86 void SetStartRun(Int_t start) { fStartRun = start; }
87
88 void SetFinishRun(Int_t finish) { fFinishRun = finish; }
89
90 vector<TString> GetFileList() { return fInFiles; }
91
92 private:
93 void DoOptimization();
95
96 Int_t FinBin(map<Int_t, pair<Double_t, Double_t>> binMap, Double_t value)
97 {
98 for (auto it : binMap) {
99 Int_t bin = it.first;
100 Double_t min = it.second.first;
101 Double_t max = it.second.second;
102
103 if (value > min && value < max)
104 return bin;
105 }
106 // If multBin not found ...
107 return -1;
108 }
109
110 Bool_t isVectorOk(vector<Double_t> vector)
111 {
112
113 for (auto value : vector)
114 if (TMath::Abs(value) > 100. || TMath::IsNaN(value))
115 return kFALSE;
116
117 return kTRUE;
118 }
119
120 protected:
121 void ReadFile(TString,
122 BmnParticlePairCut* cut0 = nullptr,
123 TClonesArray* triggEffInfo = nullptr,
124 Double_t pathMin = 0.,
125 Double_t pathMax = 0.);
126
128 void fitSpectrum(TH1F*, Double_t&, Double_t&, pair<Double_t, Double_t>&, pair<Double_t, Double_t>&);
131 static Double_t signal(Double_t*, Double_t*);
133
134 void GetPtY(vector<Double_t>, vector<Double_t>, Double_t&, Double_t&);
135
137 {
138 TH1F* h = new TH1F("h", "h", 75., xLow, xUp);
139
142
143 if (fitRes.Get()) {
144 Double_t err = f->IntegralError(min - .5 * h->GetBinWidth(1), max + .5 * h->GetBinWidth(1),
145 fitRes->GetParams(), fitRes->GetCovarianceMatrix().GetMatrixArray())
146 / h->GetBinWidth(1);
147 delete h;
148 return err;
149 } else {
150 delete h;
151 return 0.;
152 }
153 }
154
155 protected:
156 // Run info ...
160
161 vector<TString> fInFiles;
162
163 // Beam, target info ...
165
166 private:
168
169 // Spectrum histos ...
171
172 // S and B cuts if needed ...
175
176 protected:
179
182
183 vector<TString> fTarget;
185
186 // Spectrum for improved cut values ...
188
189 // Spectra in Pt-Y space ...
193
195 map<Int_t, pair<Double_t, Double_t>> fPtBinMap;
196
198 map<Int_t, pair<Double_t, Double_t>> fYBinMap;
199
201 map<Int_t, pair<Double_t, Double_t>> fPathBins;
202
204
206};
207
208#endif
friend F32vec4 min(const F32vec4 &a, const F32vec4 &b)
Definition P4_F32vec4.h:30
friend F32vec4 max(const F32vec4 &a, const F32vec4 &b)
Definition P4_F32vec4.h:31
bool Bool_t
int Int_t
constexpr Bool_t kFALSE
double Double_t
constexpr Bool_t kTRUE
#define ClassDef(name, id)
Int_t FinBin(map< Int_t, pair< Double_t, Double_t > > binMap, Double_t value)
void SetCuts(vector< Double_t > DCA0, vector< Double_t > DCA1, vector< Double_t > DCA2, vector< Double_t > DCA12, vector< Double_t > PATH, vector< Int_t > nHitsPos, vector< Int_t > nHitsNeg)
void SetBackgroungCut(Double_t b)
vector< TString > createFilelist()
TClonesArray * fParticlePairCuts
static Double_t fitFunction(Double_t *, Double_t *)
Bool_t isVectorOk(vector< Double_t > vector)
Double_t deltaB(TF1 *f, TFitResultPtr fitRes)
Double_t ImproveCutValue(vector< TString >, BmnParticlePairCut *, TString)
map< Int_t, pair< Double_t, Double_t > > fPathBins
void SetStartRun(Int_t start)
void SetSignalCut(Double_t s)
vector< TString > fInFiles
void ReadFile(TString, BmnParticlePairCut *cut0=nullptr, TClonesArray *triggEffInfo=nullptr, Double_t pathMin=0., Double_t pathMax=0.)
Bool_t checkFit(BmnParticlePairCut *)
void SetFinishRun(Int_t finish)
TFitResultPtr fitSpectrum(TH1F *)
static Double_t signal(Double_t *, Double_t *)
void SetTarget(TString t)
vector< TString > fTarget
map< Int_t, pair< Double_t, Double_t > > fYBinMap
map< Int_t, pair< Double_t, Double_t > > fPtBinMap
static Double_t background(Double_t *, Double_t *)
void GetPtY(vector< Double_t >, vector< Double_t >, Double_t &, Double_t &)
vector< TString > GetFileList()
void SetSpectrumRange(Double_t min, Double_t max)
void SetNHitsGemNeg(Int_t nHits)
void SetNHitsGemPos(Int_t nHits)
void SetDca1(Double_t v)
void SetDca0(Double_t v)
void SetPath(Double_t v)
void SetDca12(Double_t v)
void SetDca2(Double_t v)
const double * GetParams() const
TFitResult * Get() const
TMatrixDSym GetCovarianceMatrix() const
virtual Double_t GetBinCenter(Int_t bin) const
virtual Double_t GetBinWidth(Int_t bin) const
const Element * GetMatrixArray() const override
friend friend class TClonesArray
*brief user defined string literal for JSON values *sa std::size_t n
Definition json.hpp:20362
Bool_t IsNaN(Double_t x)
Double_t Abs(Double_t d)
Definition json.hpp:4446