BmnRoot 26.10.0-18-g4e3414f9
Software framework of the BM@N experiment
Loading...
Searching...
No Matches
BmnLambdaEmbedding.h
Go to the documentation of this file.
1// @(#)bmnroot/embedding:$Id$
2// Author: Pavel Batyuk <pavel.batyuk@jinr.ru> 2019-11-26
3
4////////////////////////////////////////////////////////////////////////////////
5// //
6// BmnLambdaEmbedding //
7// //
8// Instruments to be used for embedding //
9// //
10// //
11////////////////////////////////////////////////////////////////////////////////
12
13#ifndef BMNLAMBDAEMBEDDING_H
14#define BMNLAMBDAEMBEDDING_H 1
15
18#include "BmnLambdaMisc.h"
19#include "BmnParticleStore.h"
20
21#include <BmnADCDigit.h>
22#include <BmnCSCPoint.h>
23#include <BmnGemStripDigit.h>
24#include <BmnMatch.h>
25#include <BmnParticlePair.h>
26#include <BmnRawDataDecoder.h>
27#include <BmnRecoTools.h>
28#include <BmnSiliconDigit.h>
29#include <CbmMCTrack.h>
30#include <CbmVertex.h>
31#include <DstEventHeader.h>
32#include <FairMCPoint.h>
33#include <TChain.h>
34#include <TClonesArray.h>
35#include <TFile.h>
36#include <TNamed.h>
37#include <TSystem.h>
38#include <fstream>
39#include <iostream>
40#include <map>
41#include <stdlib.h>
42#include <unordered_map>
43#include <utility>
44#include <vector>
45
46#if defined(_OPENMP)
47#include "omp.h"
48#endif
49
50using namespace std;
51
53{
54 public:
56
58
59 SignalNormalizationUtils(TString digiFile, TString recoFile, Int_t clustSize = 0, Int_t lowThresh = 10)
60 : expGem(nullptr)
61 , mcGem(nullptr)
62 , expSil(nullptr)
63 , mcSil(nullptr)
64 , fClustSizeThresh(clustSize)
65 , fLowThresh(lowThresh)
66 {
67
68 TChain* chainEx = new TChain("bmndata");
69 chainEx->Add(digiFile.Data());
70
71 TClonesArray* gemEx = nullptr;
72 chainEx->SetBranchAddress("GEM", &gemEx);
73
74 TClonesArray* silEx = nullptr;
75 chainEx->SetBranchAddress("SILICON", &silEx);
76
77 TChain* chainDST = new TChain("bmndata");
78 chainDST->Add(recoFile.Data());
79
80 TClonesArray* gemHits = nullptr;
81 chainDST->SetBranchAddress("BmnGemStripHit", &gemHits);
82
83 TClonesArray* silHits = nullptr;
84 chainDST->SetBranchAddress("BmnSiliconHit", &silHits);
85
86 chainEx->GetEntry();
87 chainDST->GetEntry();
88
89 // Getting experimental TF1 from current dst to be used further for rescaling ...
90 expGem = BmnRecoTools::GetSignalDistribution(chainEx, gemEx, chainDST, gemHits, nullptr, nullptr, 0,
92 expSil = BmnRecoTools::GetSignalDistribution(chainEx, silEx, chainDST, silHits, nullptr, nullptr, 0,
94
95 delete chainEx;
96 delete chainDST;
97 }
98
99 void SetMcDataSet(TChain* chainMC)
100 {
101 TClonesArray* gemMC = nullptr;
102 chainMC->SetBranchAddress("BmnGemStripDigit", &gemMC);
103
104 TClonesArray* silMC = nullptr;
105 chainMC->SetBranchAddress("BmnSiliconDigit", &silMC);
106
107 chainMC->GetEntry();
108
109 mcGem =
110 BmnRecoTools::GetSignalDistribution(chainMC, gemMC, nullptr, nullptr, nullptr, nullptr, fLowThresh, 0, 1e6);
111
112 mcSil =
113 BmnRecoTools::GetSignalDistribution(chainMC, silMC, nullptr, nullptr, nullptr, nullptr, fLowThresh, 0, 1e6);
114 }
115
117 {
118 if (det.Contains("GEM") && mcGem && expGem)
119 return BmnRecoTools::GetRescaleFunc(TString("RescaleFuncGem"), mcGem, expGem);
120 else if (det.Contains("SILICON") && mcSil && expSil)
121 return BmnRecoTools::GetRescaleFunc(TString("RescaleFuncSil"), mcSil, expSil);
122 else
123 return nullptr;
124 }
125
126 private:
129
132
135};
136
138{
139 public:
141 BmnLambdaEmbedding(TString, TString, TString, TString, Int_t nEvs = 250, TString lambdaStore = "");
142 virtual ~BmnLambdaEmbedding();
143
144 public:
145 void Embedding();
146
148
149 void SetStorePath(TString store_path) { fStorePath = store_path; }
150
151 void SetNLambdaStore(Int_t nStores) { fNstores = nStores; }
152
154
156 {
157 fEtaMin = min;
158 fEtaMax = max;
159 }
160
162
164 {
165 fPhiMin = min;
166 fPhiMax = max;
167 }
168
169 void SetDetsToBeEmbedded(Bool_t gem, Bool_t silicon, Bool_t csc)
170 {
171 isGemEmbedded = gem;
172 isSilEmbedded = silicon;
173 isCscEmbedded = csc;
174 }
175
176 void DoLambdaStore(Bool_t flag) { doLambdaStore = flag; }
177
179
181
183
184 void DoEmbedding(Bool_t flag) { doEmbedding = flag; }
185
186 void DoDecode(Bool_t flag) { doDecode = flag; }
187
189
191
192 // Set cut values ...
193
194 void SetNHitsProton(Int_t nhits) { fNHitsProton = nhits; }
195
196 void SetNHitsPion(Int_t nhits) { fNHitsPion = nhits; }
197
199
200 void SetSignal(Short_t sigGem, Short_t sigSilicon, Short_t sigCsc)
201 {
202 fSignal.push_back(sigGem);
203 fSignal.push_back(sigSilicon);
204 fSignal.push_back(sigCsc);
205 }
206
207 // Set a store to be passed to simulations if necessary
208 void SetStoreToProcess(Int_t storeNumber) { fStoreToProcess = storeNumber; }
209
210 // Setting a pdg hypo to be checked ...
211
213
214 void SetParticles(Int_t pPdg, Int_t nPdg)
215 {
216 fPdgPostive = pPdg;
217 fPdgNegative = nPdg;
218 }
219
220 private:
223
227
230
234
238
242
246
249
251
255
260
261 // Some bool flags to be used for steering of the whole stages of the code ...
270
271 // Cuts to be used if necessary ...
279 vector<Short_t> fSignal;
280
281 // Dets. to be embedded ...
285
286 // Embedding monitor ...
288
289 // Normalization utils ...
291
292 // Cuts to be used when doing stores with lambda
298
299 // Pdg codes to define a decay we are searching for ...
303
305
306 private:
307 vector<BmnStripDigit> GetDigitsFromLambda(TString, Int_t, TString);
308 void PrintStoreInfo();
309 TString AddInfoToRawFile(map<UInt_t, vector<BmnStripDigit>>,
310 map<UInt_t, map<pair<Int_t, Int_t>, Long_t>>,
311 map<UInt_t, vector<BmnStripDigit>>,
312 map<UInt_t, map<vector<Int_t>, Long_t>>,
313 map<UInt_t, vector<BmnStripDigit>>,
314 map<UInt_t, map<pair<Int_t, Int_t>, Long_t>>);
315
318
321
322 map<UInt_t, TVector3> ListOfEventsWithReconstructedVp();
323 map<pair<Int_t, Int_t>, Long_t> GetGemChannelSerialFromDigi(vector<BmnStripDigit>);
324 map<pair<Int_t, Int_t>, Long_t> GetCscChannelSerialFromDigi(vector<BmnStripDigit>);
325 map<vector<Int_t>, Long_t> GetSiliconChannelSerialFromDigi(vector<BmnStripDigit>);
326
328
330};
331
332#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
long Long_t
short Short_t
double Double_t
#define ClassDef(name, id)
DstEventHeader * fHeader
void SimulateLambdaPassing(Int_t, Double_t, TVector2, TVector3, Int_t, Int_t)
void SetUseRealSignals(Bool_t flag)
SignalNormalizationUtils * normUtils
TClonesArray * fSiliconMatch
void SetSignal(Short_t sigGem, Short_t sigSilicon, Short_t sigCsc)
void SetLambdaMinMomentum(Double_t min)
void DoRawRootConvertion(Bool_t flag)
map< vector< Int_t >, Long_t > GetSiliconChannelSerialFromDigi(vector< BmnStripDigit >)
TClonesArray * fSiliconDigits
map< pair< Int_t, Int_t >, Long_t > GetCscChannelSerialFromDigi(vector< BmnStripDigit >)
BmnLambdaEmbeddingMonitor * fMon
void DoSimulateLambdaThroughSetup(Bool_t flag)
map< pair< Int_t, Int_t >, Long_t > GetGemChannelSerialFromDigi(vector< BmnStripDigit >)
void SetNeventsToBeSimulated(Int_t nEvs)
void SetLambdaEtaRange(Double_t min, Double_t max)
TClonesArray * fCscPoints
map< UInt_t, TVector3 > ListOfEventsWithReconstructedVp()
vector< Short_t > fSignal
void DoDecode(Bool_t flag)
void DoLambdaStore(Bool_t flag)
void SetNLambdaStore(Int_t nStores)
TString AddInfoToRawFile(map< UInt_t, vector< BmnStripDigit > >, map< UInt_t, map< pair< Int_t, Int_t >, Long_t > >, map< UInt_t, vector< BmnStripDigit > >, map< UInt_t, map< vector< Int_t >, Long_t > >, map< UInt_t, vector< BmnStripDigit > >, map< UInt_t, map< pair< Int_t, Int_t >, Long_t > >)
void SetNHitsProton(Int_t nhits)
void StartDecodingWithEmbeddedLambdas(TString)
TClonesArray * fCscDigits
vector< BmnStripDigit > GetDigitsFromLambda(TString, Int_t, TString)
void SetNHitsPion(Int_t nhits)
void DoEmbeddingMonitor(Bool_t flag)
void SetStoreToProcess(Int_t storeNumber)
TClonesArray ** fWrittenStores
void DoRawRootFromBinaryData(TString)
void SetLambdaPhiRange(Double_t min, Double_t max)
TClonesArray * fSiliconPoints
TClonesArray * fGemPoints
TClonesArray * CreateLambdaStore()
Int_t DefineSiliconStatByZpoint(Double_t)
void DoListOfEventsWithReconstructedVertex(Bool_t flag)
void SetDetsToBeEmbedded(Bool_t gem, Bool_t silicon, Bool_t csc)
Bool_t doListOfEventsWithReconstructedVertex
void SetStorePath(TString store_path)
Int_t FindReconstructableLambdaFromStore(Int_t, Int_t, BmnParticlePair &)
void DoPrintStoreInfo(Bool_t flag)
void DoEmbedding(Bool_t flag)
TClonesArray * fGemDigits
TClonesArray * fLambdaStore
void SetDecayingParticle(Int_t pdg)
void SetParticles(Int_t pPdg, Int_t nPdg)
static TF1 * GetSignalDistribution(TTree *tree, TClonesArray *ar, TTree *treeDST=nullptr, TClonesArray *gemHits=nullptr, TClonesArray *gemTracks=nullptr, TClonesArray *tracks=nullptr, Double_t lowThr=0, Int_t ClusterSizeThr=0, Int_t nBins=100000)
static TF1 * GetRescaleFunc(TString name, TF1 *mc, TF1 *ex)
void SetMcDataSet(TChain *chainMC)
SignalNormalizationUtils(TString digiFile, TString recoFile, Int_t clustSize=0, Int_t lowThresh=10)
TF1 * GetRescaleFunction(TString det)
Int_t SetBranchAddress(const char *bname, T **add, TBranch **ptr=nullptr)
virtual Int_t Add(const char *name, Long64_t nentries=TTree::kMaxEntries)
Int_t GetEntry(Long64_t entry=0, Int_t getall=0) override
friend friend class TClonesArray
const char * Data() const
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
Definition json.hpp:4446