BmnRoot 26.10.0-18-g4e3414f9
Software framework of the BM@N experiment
Loading...
Searching...
No Matches
BmnVSPHitMaker.cxx
Go to the documentation of this file.
1#include "BmnVSPHitMaker.h"
2
3#include "BmnVSPModule.h"
4#include "FairRootManager.h"
5#include "TClonesArray.h"
6#include "TSystem.h"
7#include "UniDetectorParameter.h"
8
9#include <TStopwatch.h>
10
11static Double_t workTime = 0.0;
12
15{
16
17 fInputPointsBranchName = "VSPPoint";
18 fInputDigitsBranchName = "BmnVSPDigit";
19 fInputDigitMatchesBranchName = "BmnVSPDigitMatch";
20
21 fOutputHitsBranchName = "BmnVSPHit";
22
24 StationSet = nullptr;
25 GlobalModTransfSet = nullptr;
26}
27
28BmnVSPHitMaker::BmnVSPHitMaker(Int_t run_period, Int_t run_number, Bool_t isExp)
30{
31 fIsExp = isExp;
32
33 fRunPeriod = run_period;
34 fRunNumber = run_number;
35
36 fInputPointsBranchName = "VSPPoint";
37 fInputDigitsBranchName = (!isExp) ? "BmnVSPDigit" : "VSP";
38 fInputDigitMatchesBranchName = "BmnVSPDigitMatch";
39
40 fOutputHitsBranchName = "BmnVSPHit";
41
43 StationSet = nullptr;
44 GlobalModTransfSet = nullptr;
45
46 fSignalLow = 0.;
47 fSignalUp = DBL_MAX;
48
49 switch (fRunPeriod) {
50 case 9: // BM@N RUN-9
52 break;
53
54 default:
56 }
57}
58
60{
61 TString gPathVSPConfig = gSystem->Getenv("VMCWORKDIR");
62 gPathVSPConfig += "/parameters/vsp/XMLConfigs/";
63
64 // Create VSP detector --------------------------------------------------
65 switch (fCurrentConfig) {
67 XMLConfigFile = gPathVSPConfig + "VSP_Run9.xml";
68 if (fVerbose)
69 cout << " Current VSP Configuration : Run9"
70 << "\n";
71 break;
72
73 default:;
74 }
75
76 if (!gSystem->AccessPathName(XMLConfigFile)) { // returns FALSE if the file exists
77 if (fVerbose)
78 cout << " XMLConfigFile : " << XMLConfigFile << "\n";
81 GlobalModTransfSet->LoadFromXMLFile(XMLConfigFile);
82 } else {
83 Fatal("BmnVSPHitMaker::createVSPDetector()", " !!! Current configuration is not set !!! ");
84 }
85
86 if (fIsExp) {
87 const Int_t nStat = StationSet->GetNStations();
88 UniDetectorParameter* coeffAlignCorrs =
90 vector<UniValue*> algnShifts;
91 if (coeffAlignCorrs)
92 coeffAlignCorrs->GetValue(algnShifts);
93 fAlignCor = new Double_t**[nStat];
94 for (Int_t iStat = 0; iStat < nStat; iStat++) {
95 const Int_t nParams = 3;
96 Int_t nModul = StationSet->GetVSPStation(iStat)->GetNModules();
97 fAlignCor[iStat] = new Double_t*[nModul];
98 for (Int_t iMod = 0; iMod < nModul; iMod++) {
99 fAlignCor[iStat][iMod] = new Double_t[nParams];
100 for (Int_t iPar = 0; iPar < nParams; iPar++) {
101 fAlignCor[iStat][iMod][iPar] = 0.0;
102 }
103 }
104 }
105
106 for (size_t i = 0; i < algnShifts.size(); ++i) {
107 // cout << ((AlignmentValue*)algnShifts[i])->value[0] << endl;
108 // cout << ((AlignmentValue*)algnShifts[i])->value[1] << endl;
109 // cout << ((AlignmentValue*)algnShifts[i])->value[2] << endl;
110 Int_t st = ((AlignmentValue*)algnShifts[i])->station;
111 Int_t mod = ((AlignmentValue*)algnShifts[i])->module;
112 fAlignCor[st][mod][0] = ((AlignmentValue*)algnShifts[i])->value[0];
113 fAlignCor[st][mod][1] = ((AlignmentValue*)algnShifts[i])->value[1];
114 fAlignCor[st][mod][2] = ((AlignmentValue*)algnShifts[i])->value[2];
115 }
116 }
117}
118
120{
121
122 if (fIsExp && fRunPeriod >= 9) {
123 for (Int_t iStat = 0; iStat < StationSet->GetNStations(); iStat++) {
124 for (Int_t iMod = 0; iMod < StationSet->GetVSPStation(iStat)->GetNModules(); iMod++)
125 delete[] fAlignCor[iStat][iMod];
126 delete[] fAlignCor[iStat];
127 }
128 delete[] fAlignCor;
129 }
130
131 if (StationSet) {
132 delete StationSet;
133 }
134
135 if (GlobalModTransfSet) {
136 delete GlobalModTransfSet;
137 }
138}
139
141{
142
143 if (fVerbose > 1)
144 cout << "=================== BmnVSPHitMaker::Init() started ================" << endl;
145
146 if (fRunPeriod < 9) {
147 SetActive(kFALSE);
148 return kERROR;
149 }
150
152
153 FairRootManager* ioman = FairRootManager::Instance();
154
156 if (!fBmnVSPDigitsArray) {
157 cout << "BmnVSPHitMaker::Init(): branch " << fInputDigitsBranchName << " not found! Task will be deactivated"
158 << endl;
159 SetActive(kFALSE);
160 return kERROR;
161 }
163
164 if (fVerbose > 1) {
166 cout << " Strip matching information exists!\n";
167 else
168 cout << " Strip matching information doesn`t exist!\n";
169 }
170
171 // AZ-240726
173 //
175 ioman->Register(fOutputHitsBranchName, "VSP", fBmnVSPHitsArray, kTRUE);
176 fBmnVSPUpperClustersArray = new TClonesArray("StripCluster");
177 ioman->Register("BmnVSPUpperCluster", "VSP", fBmnVSPUpperClustersArray, kTRUE);
178 fBmnVSPLowerClustersArray = new TClonesArray("StripCluster");
179 ioman->Register("BmnVSPLowerCluster", "VSP", fBmnVSPLowerClustersArray, kTRUE);
180
181 if (fVerbose > 1)
182 cout << "=================== BmnVSPHitMaker::Init() finished ===============" << endl;
183
184 return kSUCCESS;
185}
186
188{
189
190 TStopwatch sw;
191 sw.Start();
192
193 if (!IsActive())
194 return;
195
196 fBmnVSPHitsArray->Delete();
199
202
203 if (fVerbose > 1)
204 cout << "=================== BmnVSPHitMaker::Exec() started ================" << endl;
205 if (fVerbose > 1)
206 cout << " BmnVSPHitMaker::Exec(), Number of BmnVSPDigits = " << fBmnVSPDigitsArray->GetEntriesFast() << "\n";
207
209
210 if (fVerbose > 1)
211 cout << "=================== BmnVSPHitMaker::Exec() finished ===============" << endl;
212
213 sw.Stop();
214 workTime += sw.RealTime();
215}
216
218{
219
220 // FairMCPoint* MCPoint;
221 BmnVSPDigit* digit;
222 BmnMatch* strip_match; // MC-information for a strip
223
224 BmnVSPStation* station;
225 BmnVSPModule* module;
226
227 // Loading digits ---------------------------------------------------------------
228 Int_t AddedDigits = 0;
229 Int_t AddedStripDigitMatches = 0;
230
231 for (Int_t idigit = 0; idigit < fBmnVSPDigitsArray->GetEntriesFast(); idigit++) {
232 digit = (BmnVSPDigit*)fBmnVSPDigitsArray->At(idigit);
233 if (!digit->IsGoodDigit())
234 continue;
235
236 if (digit->GetStripSignal() < fSignalLow || digit->GetStripSignal() > fSignalUp)
237 continue;
238
239 station = StationSet->GetVSPStation(digit->GetStation());
240 module = station->GetModule(digit->GetModule());
241 if (!module)
242 return;
243
244 if (module->SetStripSignalInLayerByZoneId(digit->GetStripLayer(), digit->GetStripNumber(),
245 digit->GetStripSignal()))
246 AddedDigits++;
247
248 // Add a MC-match to the current strip if this MC-match array exists
250 strip_match = (BmnMatch*)fBmnVSPDigitMatchesArray->At(idigit);
251 if (module->SetStripMatchInLayerByZoneId(digit->GetStripLayer(), digit->GetStripNumber(), *strip_match))
252 AddedStripDigitMatches++;
253 }
254
255 // Add a digit number match to the current strip
256 BmnMatch stripDigitNumberMatch; // digit number information for the current strip
257 stripDigitNumberMatch.AddLink(1.0, idigit);
258 module->SetStripDigitNumberMatchInLayerByZoneId(digit->GetStripLayer(), digit->GetStripNumber(),
259 stripDigitNumberMatch);
260 }
261
262 if (fVerbose > 1)
263 cout << " Processed strip digits : " << AddedDigits << "\n";
264 if (fVerbose > 1 && fBmnVSPDigitMatchesArray)
265 cout << " Added strip digit MC-matches : " << AddedStripDigitMatches << "\n";
266 //------------------------------------------------------------------------------
267
268 // Processing digits
269 StationSet->ProcessPointsInDetector();
270
271 Int_t NCalculatedPoints = StationSet->CountNProcessedPointsInDetector();
272 if (fVerbose > 1)
273 cout << " Calculated points : " << NCalculatedPoints << "\n";
274 if (fVerbose == 1)
275 cout << "BmnVSPHitMaker: " << NCalculatedPoints << " hits\n";
276
277 Int_t clear_matched_points_cnt = 0; // points with the only one match-indexes
278
279 map<Int_t, StripCluster> UniqueUpperClusters;
280 map<Int_t, StripCluster> UniqueLowerClusters;
281
282 for (Int_t iStation = 0; iStation < StationSet->GetNStations(); ++iStation) {
283 station = StationSet->GetVSPStation(iStation);
284
285 for (Int_t iModule = 0; iModule < station->GetNModules(); ++iModule) {
286 module = station->GetModule(iModule);
287
288 for (Int_t iLayer = 0; iLayer < module->GetNStripLayers(); ++iLayer) {
289 BmnVSPLayer layer = module->GetStripLayer(iLayer);
290
291 for (size_t iCluster = 0; iCluster < layer.GetStripClusters().size(); ++iCluster) {
292 StripCluster cluster = layer.GetStripClusters()[iCluster];
293 cluster.SetModule(iModule);
294 cluster.SetStation(iStation);
295
296 // Saving all strip clusters into branches (each cluster have its own unique id in the current
297 // event)
298 if (cluster.GetType() == UpperStripLayer) {
299 new ((*fBmnVSPUpperClustersArray)[fBmnVSPUpperClustersArray->GetEntriesFast()])
300 StripCluster(cluster);
301 } else {
302 new ((*fBmnVSPLowerClustersArray)[fBmnVSPLowerClustersArray->GetEntriesFast()])
303 StripCluster(cluster);
304 }
305 }
306 }
307
308 Int_t NIntersectionPointsInModule = module->GetNIntersectionPoints();
309
310 // Int_t NPseudoIntersectionsInModule = module->GetNPseudoIntersections();
311 Int_t NPseudoIntersectionsInModule = 0; // !!! IGNORE PSEUDO INTERSECTIONS !!!
312
313 for (Int_t iPoint = 0; iPoint < NIntersectionPointsInModule + NPseudoIntersectionsInModule; ++iPoint) {
314
315 // Double_t threshold = 2000000;// ADC
316
317 // Double_t sigL;
318 // Double_t sigU;
319 Double_t x, y, z;
320 Double_t x_err, y_err, z_err;
321
322 if (iPoint < NIntersectionPointsInModule) {
323 // sigL = module->GetIntersectionPoint_LowerLayerSripTotalSignal(iPoint);
324 // sigU = module->GetIntersectionPoint_UpperLayerSripTotalSignal(iPoint);
325 x = module->GetIntersectionPointX(iPoint);
326 y = module->GetIntersectionPointY(iPoint);
327 z = module->GetZPositionRegistered();
328 x_err = module->GetIntersectionPointXError(iPoint);
329 y_err = module->GetIntersectionPointYError(iPoint);
330 z_err = 0.0;
331 } else {
332 // sigL =
333 // module->GetPseudoIntersection_LowerLayerSripTotalSignal(iPoint-NIntersectionPointsInModule); sigU
334 // = module->GetPseudoIntersection_UpperLayerSripTotalSignal(iPoint-NIntersectionPointsInModule);
335 x = module->GetPseudoIntersectionX(iPoint - NIntersectionPointsInModule);
336 y = module->GetPseudoIntersectionY(iPoint - NIntersectionPointsInModule);
337 z = module->GetZPositionRegistered();
338 x_err = module->GetPseudoIntersectionXError(iPoint - NIntersectionPointsInModule);
339 y_err = module->GetPseudoIntersectionYError(iPoint - NIntersectionPointsInModule);
340 z_err = 0.0;
341 }
342
343 z += fIsExp ? fAlignCor[iStation][iModule][2] : 0.; // alignment shift
344
345 // Apply global module transforms to detector hit (in right-handed system)
346 if (GlobalModTransfSet) {
347 Plane3D::Point point_transformed =
348 GlobalModTransfSet->ApplyTransforms(Plane3D::Point(-x, y, z), iStation, iModule);
349 x = -point_transformed.X(); // convert to detector system (x-inverted)
350 y = point_transformed.Y();
351 z = point_transformed.Z();
352 }
353
354 Int_t RefMCIndex = -1;
355
356 // MC-matching for the current hit (define RefMCIndex)) ---------
357 BmnMatch mc_match_hit;
358 if (iPoint < NIntersectionPointsInModule) {
359 mc_match_hit = module->GetIntersectionPointMatch(iPoint);
360 } else {
361 mc_match_hit = module->GetPseudoIntersectionMatch(iPoint - NIntersectionPointsInModule);
362 }
363
364 Int_t most_probably_index = -1;
365 Double_t max_weight = 0;
366
367 Int_t n_links = mc_match_hit.GetNofLinks();
368 if (n_links == 1)
369 clear_matched_points_cnt++;
370 for (Int_t ilink = 0; ilink < n_links; ilink++) {
371 Int_t index = mc_match_hit.GetLink(ilink).GetIndex();
372 Double_t weight = mc_match_hit.GetLink(ilink).GetWeight();
373 if (weight > max_weight) {
374 max_weight = weight;
375 most_probably_index = index;
376 }
377 }
378
379 RefMCIndex = most_probably_index;
380 //--------------------------------------------------------------
381
382 // Add hit ------------------------------------------------------
383 x *= -1; // invert to global X
384 Double_t deltaX = fIsExp ? fAlignCor[iStation][iModule][0] : 0.;
385 Double_t deltaY = fIsExp ? fAlignCor[iStation][iModule][1] : 0.;
386
387 x += deltaX;
388 y += deltaY;
389
390 new ((*fBmnVSPHitsArray)[fBmnVSPHitsArray->GetEntriesFast()])
391 BmnVSPHit(0, TVector3(x, y, z), TVector3(x_err, y_err, z_err), RefMCIndex);
392
393 BmnVSPHit* hit = (BmnVSPHit*)fBmnVSPHitsArray->At(fBmnVSPHitsArray->GetEntriesFast() - 1);
394 hit->SetStation(iStation);
395 hit->SetModule(iModule);
396 hit->SetIndex(fBmnVSPHitsArray->GetEntriesFast() - 1);
397
398 if (iPoint < NIntersectionPointsInModule) {
400 module->GetIntersectionPointDigitNumberMatch(iPoint)); // digit number match for the hit
401 hit->SetUpperClusterIndex(module->GetUpperCluster(iPoint).GetUniqueID());
402 hit->SetLowerClusterIndex(module->GetLowerCluster(iPoint).GetUniqueID());
403 hit->SetPseudo(false);
404 } else {
406 iPoint - NIntersectionPointsInModule)); // digit number match for the hit
408 module->GetUpperCluster_PseudoIntersections(iPoint - NIntersectionPointsInModule)
409 .GetUniqueID());
411 module->GetLowerCluster_PseudoIntersections(iPoint - NIntersectionPointsInModule)
412 .GetUniqueID());
413 hit->SetPseudo(true);
414 }
415 //--------------------------------------------------------------
416 /*
417 StripCluster ucls = module->GetUpperCluster(iPoint);
418 StripCluster lcls = module->GetLowerCluster(iPoint);
419 ucls.SetModule(iModule);
420 lcls.SetModule(iModule);
421 ucls.SetStation(iStation);
422 lcls.SetStation(iStation);
423
424 Int_t upperClusterIndex = ucls.GetUniqueID();
425 Int_t lowerClusterIndex = lcls.GetUniqueID();
426
427 //Filtration of duplicate clusters in the current module for the same type of strips
428 Bool_t duplicateUpperCluster = false;
429 for(auto it : UniqueUpperClusters) {
430 StripCluster cluster = it.second;
431
432 if(cluster.GetClusterSize() != ucls.GetClusterSize()) continue;
433
434 Int_t identic_cnt = 0;
435 for(Int_t istrip = 0; istrip < cluster.GetClusterSize(); ++istrip) {
436 Int_t strip_num = cluster.Strips.at(istrip);
437 Double_t strip_signal = cluster.Signals.at(istrip);
438
439 if( (strip_num == ucls.Strips.at(istrip)) && (strip_signal ==
440 ucls.Signals.at(istrip)) ) identic_cnt++; else break;
441 }
442 if(identic_cnt == ucls.GetClusterSize()) {
443 upperClusterIndex = cluster.GetUniqueID();
444 duplicateUpperCluster = true;
445 break;
446 }
447 }
448
449 Bool_t duplicateLowerCluster = false;
450 for(auto it : UniqueLowerClusters) {
451 StripCluster cluster = it.second;
452
453 if(cluster.GetClusterSize() != lcls.GetClusterSize()) continue;
454
455 Int_t identic_cnt = 0;
456 for(Int_t istrip = 0; istrip < cluster.GetClusterSize(); ++istrip) {
457 Int_t strip_num = cluster.Strips.at(istrip);
458 Double_t strip_signal = cluster.Signals.at(istrip);
459
460 if( (strip_num == lcls.Strips.at(istrip)) && (strip_signal ==
461 lcls.Signals.at(istrip)) ) identic_cnt++; else break;
462 }
463 if(identic_cnt == lcls.GetClusterSize()) {
464 lowerClusterIndex = cluster.GetUniqueID();
465 duplicateLowerCluster = true;
466 break;
467 }
468 }
469 //--------------------------------------------------------------
470
471 if(!duplicateUpperCluster) UniqueUpperClusters[upperClusterIndex] = ucls;
472 if(!duplicateLowerCluster) UniqueLowerClusters[lowerClusterIndex] = lcls;
473 hit->SetUpperClusterIndex(upperClusterIndex);
474 hit->SetLowerClusterIndex(lowerClusterIndex);
475 */
476 if (fHitMatching) {
477 BmnMatch digiMatch;
478 Int_t idx0, idx1;
479 if (iPoint < NIntersectionPointsInModule) {
480 digiMatch = module->GetIntersectionPointDigitNumberMatch(iPoint);
481 idx0 = digiMatch.GetLink(0).GetIndex();
482 idx1 = digiMatch.GetLink(1).GetIndex();
483 } else {
484 digiMatch = module->GetPseudoIntersectionDigitNumberMatch(iPoint - NIntersectionPointsInModule);
485 idx0 = digiMatch.GetLink(0).GetIndex();
486 idx1 = digiMatch.GetLink(0).GetIndex();
487 }
488 BmnMatch* digiMatch0 = (BmnMatch*)fBmnVSPDigitMatchesArray->At(idx0);
489 BmnMatch* digiMatch1 = (BmnMatch*)fBmnVSPDigitMatchesArray->At(idx1);
490
491 Bool_t hitOk = kFALSE;
492 for (Int_t ilink = 0; ilink < digiMatch0->GetNofLinks(); ilink++) {
493 Int_t iindex = digiMatch0->GetLink(ilink).GetIndex();
494 for (Int_t jlink = 0; jlink < digiMatch1->GetNofLinks(); jlink++) {
495 Int_t jindex = digiMatch1->GetLink(jlink).GetIndex();
496 if (iindex == jindex) {
497 hitOk = kTRUE;
498 break;
499 }
500 }
501 if (hitOk)
502 break;
503 }
504
505 hit->SetType(hitOk);
506 if (!hitOk)
507 hit->SetRefIndex(-1);
508
509 // hit MC-matching ----------------------------------------------
510 FairRootManager::Instance()->SetUseFairLinks(kTRUE);
511 BmnMatch hitMatch;
512 if (iPoint < NIntersectionPointsInModule) {
513 hitMatch = module->GetIntersectionPointMatch(iPoint);
514 } else {
515 hitMatch = module->GetPseudoIntersectionMatch(iPoint - NIntersectionPointsInModule);
516 }
517
518 /* AZ-240726 for (BmnLink lnk : hitMatch.GetLinks())
519 hit->AddLink(FairLink(-1, lnk.GetIndex(), lnk.GetWeight())); */
520 // AZ-240726 - save MC track ID in all links in the field "Entry"
521 int trID = -1;
522 if (hit->GetRefIndex() >= 0) {
523 FairMCPoint* mcp = (FairMCPoint*)fBmnVSPPointsArray->UncheckedAt(hit->GetRefIndex());
524 trID = mcp->GetTrackID();
525 }
526 auto links = hitMatch.GetLinks();
527
528 for (int jl = 0; jl < int(links.size()); ++jl) {
529 BmnLink lnk = links[jl];
530 FairLink flink(-1, lnk.GetIndex(), lnk.GetWeight());
531 flink.SetEntry(trID);
532 hit->AddLink(flink);
533 }
534 //
535 FairRootManager::Instance()->SetUseFairLinks(kFALSE);
536 }
537 //--------------------------------------------------------------
538 }
539 }
540 }
541
542 /*
543 for (auto it : UniqueUpperClusters) {
544 for (Int_t i = 0; i < fBmnVSPHitsArray->GetEntriesFast(); i++) {
545 BmnVSPHit* hit = (BmnVSPHit*)fBmnVSPHitsArray->At(i);
546 if (hit->GetUpperClusterIndex() != it.first) continue;
547 hit->SetUpperClusterIndex(fBmnVSPUpperClustersArray->GetEntriesFast());
548 }
549 it.second.SetUniqueID(fBmnVSPUpperClustersArray->GetEntriesFast());
550 new ((*fBmnVSPUpperClustersArray)[fBmnVSPUpperClustersArray->GetEntriesFast()]) StripCluster(it.second);
551 }
552 for (auto it : UniqueLowerClusters) {
553 for (Int_t i = 0; i < fBmnVSPHitsArray->GetEntriesFast(); i++) {
554 BmnVSPHit* hit = (BmnVSPHit*)fBmnVSPHitsArray->At(i);
555 if (hit->GetLowerClusterIndex() != it.first) continue;
556 hit->SetLowerClusterIndex(fBmnVSPLowerClustersArray->GetEntriesFast());
557 }
558 it.second.SetUniqueID(fBmnVSPLowerClustersArray->GetEntriesFast());
559 new ((*fBmnVSPLowerClustersArray)[fBmnVSPLowerClustersArray->GetEntriesFast()]) StripCluster(it.second);
560 }
561 */
562
563 if (fVerbose > 1)
564 cout << " N clear matches with MC-points = " << clear_matched_points_cnt << "\n";
565 //------------------------------------------------------------------------------
566 StationSet->Reset();
567}
568
569void BmnVSPHitMaker::OnlineWrite(const std::unique_ptr<TTree>& resultTree)
570{
571 if (!IsActive())
572 return;
573
574 resultTree->Branch(fOutputHitsBranchName, &fBmnVSPHitsArray);
575 resultTree->Branch("BmnVSPUpperCluster", &fBmnVSPUpperClustersArray);
576 resultTree->Branch("BmnVSPLowerCluster", &fBmnVSPLowerClustersArray);
577 resultTree->Fill();
578}
579
581{
582 printf("Work time of BmnVSPHitMaker: %4.2f sec.\n", workTime);
583}
static Double_t workTime
int i
Definition P4_F32vec4.h:22
bool Bool_t
int Int_t
constexpr Bool_t kFALSE
double Double_t
constexpr Bool_t kTRUE
const char Option_t
void Fatal(const char *location, const char *msgfmt,...)
R__EXTERN TSystem * gSystem
@ UpperStripLayer
void SetModule(Int_t mod)
Definition BmnHit.h:53
void SetType(Int_t type)
Definition BmnHit.h:54
void SetUpperClusterIndex(Int_t idx)
Definition BmnHit.h:64
void SetDigitNumberMatch(BmnMatch match)
Definition BmnHit.h:63
void SetIndex(Int_t id)
Definition BmnHit.h:49
void SetPseudo(Bool_t pseudo)
Definition BmnHit.h:56
void SetStation(Short_t st)
Definition BmnHit.h:52
void SetLowerClusterIndex(Int_t idx)
Definition BmnHit.h:65
const BmnLink & GetLink(Int_t i) const
Definition BmnMatch.h:38
void AddLink(const BmnMatch &match)
Definition BmnMatch.cxx:40
const vector< BmnLink > & GetLinks() const
Definition BmnMatch.h:39
Int_t GetNofLinks() const
Definition BmnMatch.h:41
Bool_t IsGoodDigit()
Int_t GetStripNumber()
Int_t GetStripLayer()
Int_t GetStation()
Double_t GetStripSignal()
TString XMLConfigFile
virtual void OnlineWrite(const std::unique_ptr< TTree > &resultTree)
Write task resul to tree.
BmnVSPTransform * GlobalModTransfSet
Double_t *** fAlignCor
TClonesArray * fBmnVSPHitsArray
Output array of VSP Hits.
TString fOutputHitsBranchName
TString fInputPointsBranchName
TString fInputDigitsBranchName
BmnVSPStationSet * StationSet
TString fInputDigitMatchesBranchName
virtual void Finish()
Double_t fSignalLow
TClonesArray * fBmnVSPDigitMatchesArray
TClonesArray * fBmnVSPDigitsArray
virtual InitStatus Init()
TClonesArray * fBmnVSPPointsArray
Input array of VSP Points.
TClonesArray * fBmnVSPUpperClustersArray
Output array of VSP Upper Clusters.
BmnVSPConfiguration::VSP_CONFIG fCurrentConfig
virtual void Exec(Option_t *opt)
TClonesArray * fBmnVSPLowerClustersArray
Output array of VSP Lower Clusters.
virtual ~BmnVSPHitMaker()
static void SetLowerUniqueID(Int_t id)
static void SetUpperUniqueID(Int_t id)
vector< StripCluster > GetStripClusters()
BmnMatch GetIntersectionPointDigitNumberMatch(Int_t indx)
Bool_t SetStripSignalInLayerByZoneId(Int_t zone_id, Int_t strip_num, Double_t signal)
Bool_t SetStripMatchInLayerByZoneId(Int_t zone_id, Int_t strip_num, BmnMatch mc_match)
BmnMatch GetPseudoIntersectionDigitNumberMatch(Int_t indx)
StripCluster GetUpperCluster(Int_t indx)
StripCluster GetLowerCluster_PseudoIntersections(Int_t indx)
StripCluster GetUpperCluster_PseudoIntersections(Int_t indx)
StripCluster GetLowerCluster(Int_t indx)
Int_t GetNStripLayers()
Int_t GetNModules()
PositionVector3D< Cartesian3D< T >, DefaultCoordinateSystemTag > Point
void SetStation(Int_t st)
Int_t GetType()
void SetModule(Int_t m)
virtual UInt_t GetUniqueID() const
Double_t RealTime()
void Start(Bool_t reset=kTRUE)
void Stop()
int GetValue(vector< UniValue * > &parameter_value)
get value of detector parameter presented by an array
static UniDetectorParameter * GetDetectorParameter(int value_id)
get detector parameter from the database