BmnRoot
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
5// //
6// BmnLambdaEmbedding //
7// //
8// Instruments to be used for embedding //
9// //
10// //
12
13#ifndef BMNLAMBDAEMBEDDING_H
14#define BMNLAMBDAEMBEDDING_H 1
15
16#include <iostream>
17#include <stdlib.h>
18#include <vector>
19#include <fstream>
20#include <map>
21#include <unordered_map>
22#include <utility>
23
24#include <TNamed.h>
25#include <TSystem.h>
26#include <TFile.h>
27#include <TClonesArray.h>
28#include <TChain.h>
29
30#include <CbmMCTrack.h>
31#include <CbmVertex.h>
32#include <FairMCPoint.h>
33
34#include "BmnParticleStore.h"
35#include <DstEventHeader.h>
36#include <BmnADCDigit.h>
37#include <BmnGemStripDigit.h>
38#include <BmnSiliconDigit.h>
39#include <BmnRawDataDecoder.h>
40#include <BmnMatch.h>
41#include <BmnCSCPoint.h>
42#include <BmnParticlePair.h>
43#include <BmnRecoTools.h>
44
45#include "BmnLambdaMisc.h"
48
49#if defined(_OPENMP)
50#include "omp.h"
51#endif
52
53using namespace std;
54
55class SignalNormalizationUtils : public TNamed {
56public:
57
61
63 ;
64 }
65
66 SignalNormalizationUtils(TString digiFile, TString recoFile, Int_t clustSize = 0, Int_t lowThresh = 10) :
67 expGem(nullptr),
68 mcGem(nullptr),
69 expSil(nullptr),
70 mcSil(nullptr),
71 fClustSizeThresh(clustSize),
72 fLowThresh(lowThresh) {
73
74 TChain* chainEx = new TChain("bmndata");
75 chainEx->Add(digiFile.Data());
76
77 TClonesArray* gemEx = nullptr;
78 chainEx->SetBranchAddress("GEM", &gemEx);
79
80 TClonesArray* silEx = nullptr;
81 chainEx->SetBranchAddress("SILICON", &silEx);
82
83 TChain* chainDST = new TChain("bmndata");
84 chainDST->Add(recoFile.Data());
85
86 TClonesArray* gemHits = nullptr;
87 chainDST->SetBranchAddress("BmnGemStripHit", &gemHits);
88
89 TClonesArray* silHits = nullptr;
90 chainDST->SetBranchAddress("BmnSiliconHit", &silHits);
91
92 chainEx->GetEntry();
93 chainDST->GetEntry();
94
95 // Getting experimental TF1 from current dst to be used further for rescaling ...
96 expGem = BmnRecoTools::GetSignalDistribution(chainEx, gemEx, chainDST, gemHits, nullptr, nullptr, 0, fClustSizeThresh);
97 expSil = BmnRecoTools::GetSignalDistribution(chainEx, silEx, chainDST, silHits, nullptr, nullptr, 0, fClustSizeThresh);
98
99 delete chainEx;
100 delete chainDST;
101 }
102
103 void SetMcDataSet(TChain* chainMC) {
104 TClonesArray* gemMC = nullptr;
105 chainMC->SetBranchAddress("BmnGemStripDigit", &gemMC);
106
107 TClonesArray* silMC = nullptr;
108 chainMC->SetBranchAddress("BmnSiliconDigit", &silMC);
109
110 chainMC->GetEntry();
111
112 mcGem = BmnRecoTools::GetSignalDistribution(chainMC, gemMC,
113 nullptr, nullptr, nullptr, nullptr, fLowThresh, 0, 1e6);
114
115 mcSil = BmnRecoTools::GetSignalDistribution(chainMC, silMC,
116 nullptr, nullptr, nullptr, nullptr, fLowThresh, 0, 1e6);
117 }
118
119 TF1* GetRescaleFunction(TString det) {
120 if (det.Contains("GEM") && mcGem && expGem)
121 return BmnRecoTools::GetRescaleFunc(TString("RescaleFuncGem"), mcGem, expGem);
122 else if (det.Contains("SILICON") && mcSil && expSil)
123 return BmnRecoTools::GetRescaleFunc(TString("RescaleFuncSil"), mcSil, expSil);
124 else
125 return nullptr;
126 }
127
128private:
129 TF1* expGem;
130 TF1* mcGem;
131
132 TF1* expSil;
133 TF1* mcSil;
134
135 Int_t fClustSizeThresh;
136 Int_t fLowThresh;
137};
138
139class BmnLambdaEmbedding : public TNamed {
140public:
142 BmnLambdaEmbedding(TString, TString, TString, TString, Int_t nEvs = 250, TString lambdaStore = "");
143 virtual ~BmnLambdaEmbedding();
144
145public:
146 void Embedding();
147
148 TClonesArray* CreateLambdaStore();
149
150 void SetStorePath(TString store_path) {
151 fStorePath = store_path;
152 }
153
154 void SetNLambdaStore(Int_t nStores) {
155 fNstores = nStores;
156 }
157
158 void SetNeventsToBeSimulated(Int_t nEvs) {
159 fNeventsToBeSimulated = nEvs;
160 }
161
162 void SetLambdaEtaRange(Double_t min, Double_t max) {
163 fEtaMin = min;
164 fEtaMax = max;
165 }
166
167 void SetLambdaMinMomentum(Double_t min) {
168 fMomMin = min;
169 }
170
171 void SetLambdaPhiRange(Double_t min, Double_t max) {
172 fPhiMin = min;
173 fPhiMax = max;
174 }
175
176 void SetDetsToBeEmbedded(Bool_t gem, Bool_t silicon, Bool_t csc) {
177 isGemEmbedded = gem;
178 isSilEmbedded = silicon;
179 isCscEmbedded = csc;
180 }
181
182 void DoLambdaStore(Bool_t flag) {
183 doLambdaStore = flag;
184 }
185
187 doListOfEventsWithReconstructedVertex = flag;
188 }
189
191 doSimulateLambdaThroughSetup = flag;
192 }
193
194 void DoRawRootConvertion(Bool_t flag) {
195 doRawRootConvertion = flag;
196 }
197
198 void DoEmbedding(Bool_t flag) {
199 doEmbedding = flag;
200 }
201
202 void DoDecode(Bool_t flag) {
203 doDecode = flag;
204 }
205
206 void DoPrintStoreInfo(Bool_t flag) {
207 doPrintStoreInfo = flag;
208 }
209
210 void DoEmbeddingMonitor(Bool_t flag) {
211 doEmbeddingMonitor = flag;
212 }
213
214 // Set cut values ...
215
216 void SetNHitsProton(Int_t nhits) {
217 fNHitsProton = nhits;
218 }
219
220 void SetNHitsPion(Int_t nhits) {
221 fNHitsPion = nhits;
222 }
223
224 void SetUseRealSignals(Bool_t flag) {
225 isUseRealSignal = flag;
226 }
227
228 void SetSignal(Short_t sigGem, Short_t sigSilicon, Short_t sigCsc) {
229 fSignal.push_back(sigGem);
230 fSignal.push_back(sigSilicon);
231 fSignal.push_back(sigCsc);
232 }
233
234 // Set a store to be passed to simulations if necessary
235 void SetStoreToProcess(Int_t storeNumber) {
236 fStoreToProcess = storeNumber;
237 }
238
239 // Setting a pdg hypo to be checked ...
240
241 void SetDecayingParticle(Int_t pdg) {
242 fPdgDecParticle = pdg;
243 }
244
245 void SetParticles(Int_t pPdg, Int_t nPdg) {
246 fPdgPostive = pPdg;
247 fPdgNegative = nPdg;
248 }
249
250private:
251 Int_t fEvents;
252 BmnLambdaMisc* fInfo;
253
254 TChain* fSim;
255 TChain* fReco;
256 TChain* fLambdaSim;
257
258 TClonesArray* fMCTracks;
259 TClonesArray* fVertices;
260
261 TClonesArray* fGemPoints;
262 TClonesArray* fGemDigits;
263 TClonesArray* fGemMatch;
264
265 TClonesArray* fCscPoints;
266 TClonesArray* fCscDigits;
267 TClonesArray* fCscMatch;
268
269 TClonesArray* fSiliconPoints;
270 TClonesArray* fSiliconDigits;
271 TClonesArray* fSiliconMatch;
272
273 TClonesArray* fADC32; // GEM
274 TClonesArray* fADC128; // SILICON
275 TClonesArray* fSync; // SYNC
276
277 TClonesArray* fLambdaStore;
278 TClonesArray** fWrittenStores;
279
280 DstEventHeader* fHeader;
281
282 Int_t fStoreToProcess;
283 Int_t fRunId;
284 Double_t fFieldScale;
285
286 TString fRawRootFileName;
287 TString fDataFileName;
288 TString fDigiFileName;
289 TString fStorePath;
290
291 // Some bool flags to be used for steering of the whole stages of the code ...
292 Bool_t doLambdaStore;
293 Bool_t doListOfEventsWithReconstructedVertex;
294 Bool_t doSimulateLambdaThroughSetup;
295 Bool_t doRawRootConvertion;
296 Bool_t doEmbedding;
297 Bool_t doDecode;
298 Bool_t doPrintStoreInfo;
299 Bool_t doEmbeddingMonitor;
300
301 // Cuts to be used if necessary ...
302 Double_t fZmin;
303 Double_t fZmax;
304 Int_t fNstores;
305 Int_t fNeventsToBeSimulated;
306 Int_t fNHitsProton;
307 Int_t fNHitsPion;
308 Bool_t isUseRealSignal;
309 vector <Short_t> fSignal;
310
311 // Dets. to be embedded ...
312 Bool_t isGemEmbedded;
313 Bool_t isSilEmbedded;
314 Bool_t isCscEmbedded;
315
316 // Embedding monitor ...
318
319 // Normalization utils ...
320 SignalNormalizationUtils* normUtils;
321
322 // Cuts to be used when doing stores with lambda
323 Double_t fEtaMin;
324 Double_t fEtaMax;
325 Double_t fMomMin;
326 Double_t fPhiMin;
327 Double_t fPhiMax;
328
329 // Pdg codes to define a decay we are searching for ...
330 Int_t fPdgDecParticle;
331 Int_t fPdgPostive;
332 Int_t fPdgNegative;
333
334 TString fFileNamePart;
335
336private:
337 vector <BmnStripDigit> GetDigitsFromLambda(TString, Int_t, TString);
338 void PrintStoreInfo();
339 TString AddInfoToRawFile(map <UInt_t, vector < BmnStripDigit>>, map <UInt_t, map <pair <Int_t, Int_t>, Long_t>>,
340 map <UInt_t, vector < BmnStripDigit>>, map <UInt_t, map < vector <Int_t>, Long_t>>,
341 map <UInt_t, vector < BmnStripDigit>>, map <UInt_t, map <pair <Int_t, Int_t>, Long_t>>);
342
343 void DoRawRootFromBinaryData(TString);
344 void StartDecodingWithEmbeddedLambdas(TString);
345
346 void SimulateLambdaPassing(Int_t, Double_t, TVector2, TVector3, Int_t, Int_t);
347 Int_t FindReconstructableLambdaFromStore(Int_t, Int_t, BmnParticlePair&);
348
349 map <UInt_t, TVector3> ListOfEventsWithReconstructedVp();
350 map <pair <Int_t, Int_t>, Long_t> GetGemChannelSerialFromDigi(vector <BmnStripDigit>);
351 map <pair <Int_t, Int_t>, Long_t> GetCscChannelSerialFromDigi(vector <BmnStripDigit>);
352 map <vector <Int_t>, Long_t> GetSiliconChannelSerialFromDigi(vector <BmnStripDigit>);
353
354 Int_t DefineSiliconStatByZpoint(Double_t);
355
356 ClassDef(BmnLambdaEmbedding, 1)
357};
358
359#endif
360
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
void SetUseRealSignals(Bool_t flag)
void SetSignal(Short_t sigGem, Short_t sigSilicon, Short_t sigCsc)
void SetLambdaMinMomentum(Double_t min)
void DoRawRootConvertion(Bool_t flag)
void DoSimulateLambdaThroughSetup(Bool_t flag)
void SetNeventsToBeSimulated(Int_t nEvs)
void SetLambdaEtaRange(Double_t min, Double_t max)
void DoDecode(Bool_t flag)
void DoLambdaStore(Bool_t flag)
void SetNLambdaStore(Int_t nStores)
void SetNHitsProton(Int_t nhits)
void SetNHitsPion(Int_t nhits)
void DoEmbeddingMonitor(Bool_t flag)
void SetStoreToProcess(Int_t storeNumber)
void SetLambdaPhiRange(Double_t min, Double_t max)
TClonesArray * CreateLambdaStore()
void DoListOfEventsWithReconstructedVertex(Bool_t flag)
void SetDetsToBeEmbedded(Bool_t gem, Bool_t silicon, Bool_t csc)
void SetStorePath(TString store_path)
void DoPrintStoreInfo(Bool_t flag)
void DoEmbedding(Bool_t flag)
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)
STL namespace.