BmnRoot 26.10.0-18-g4e3414f9
Software framework of the BM@N experiment
Loading...
Searching...
No Matches
BmnTrackConv.cxx
Go to the documentation of this file.
1#include "BmnTrackConv.h"
2
4 Int_t run_number,
5 BmnSetup setup,
6 TString inFileAdd,
7 vector<TString> branchesToClone)
8{
9 fSetup = setup;
10 fPeriodId = run_period;
11 fRunId = run_number;
12 fDstTreeName = "BMN_DIGIT";
13 fDstTreeNameNew = "bmndata";
14 fDstFileName = inFileAdd;
15 fBrNames = branchesToClone;
16 fCBMMCEvHeaderName = "MCEventHeader.";
17 fCBMEvHeaderName = "EventHeader.";
18 fCBMoldBMNEvHeaderName = "EventHeaderBmn";
19 fCBMGlobalTracksName = "StsTrack";
20 fCBMGlobalTracksCSCName = "StsTrackCSC";
21 fCBMHitsName = "StsHit";
22 fCBMToF400HitsName = "BmnTof400Hit";
23 fCBMClustersName = "StsCluster";
24 // fCBMDigisName = "StsDigi";
25 fCBMVertexName = "PrimaryVertex.";
26 fCBMPointsName = "StsPoint";
27 fCBMCSCPointsName = "CSCPoint";
28 fCBMBDPointsName = "BdPoint";
29 fTof400PointsName = "TOF1Point";
30
31 fBMNMCEvHeaderName = "MCEventHeader.";
32 fBMNEvHeaderName = "DstEventHeader.";
33 fBMNZDCName = "ZDCEventData.";
34 fBMNMCGlobalTracksName = "MCTrack";
35 fBMNGlobalTracksName = "BmnGlobalTrack";
36 fBMNGemTracksName = "BmnGemTrack";
37 fBMNSilTracksName = "BmnSiliconTrack";
38 fBMNCscTracksName = "BmnCscTrack";
39 fBMNInnerHitsName = "BmnInnerHits";
40 fBMNGemHitsName = "BmnGemStripHit";
41 fBMNSilHitsName = "BmnSiliconHit";
42 fBMNCscHitsName = "BmnCSCHit";
43 fBMNVertexName = "BmnVertex";
44 fBMNTof400HitsName = "BmnTof400Hit";
45 fBMNTof700HitsName = "BmnTof700Hit";
46 fBMNDchTracksName = "BmnDchTrack";
48 fBMNGemPointsName = "StsPoint";
49 fBMNSilPointsName = "SiliconPoint";
50 fBMNCSCPointsName = "CSCPoint";
51 fBMNBDPointsName = "BdPoint";
52 fBMNTof400PointsName = "TOF400Point";
53
54 iEv = -1;
55 iEvFile = -1;
56 fVerbose = 1;
57
58 TString xmlConfFileNameGEM;
59 TString xmlConfFileNameSil;
60 TString xmlConfFileNameCSC;
61 // Select xml configs
62 switch (fPeriodId) {
63 case 7:
64 if (fSetup == kBMNSETUP) {
65 xmlConfFileNameGEM = "GemRunSpring2018.xml";
66 xmlConfFileNameSil = "SiliconRunSpring2018.xml";
67 xmlConfFileNameCSC = "CSCRunSpring2018.xml";
68 } else {
69 xmlConfFileNameGEM = "GemRunSRCSpring2018.xml";
70 xmlConfFileNameSil = "SiliconRunSRCSpring2018.xml";
71 xmlConfFileNameCSC = "CSCRunSRCSpring2018.xml";
72 }
73 break;
74 case 6:
75 xmlConfFileNameGEM = "GemRunSpring2017.xml";
76 xmlConfFileNameSil = "SiliconRunSpring2017.xml";
77 break;
78 default:
79 printf("Error! Unknown config!\n");
80 return;
81 break;
82 }
83 // load detector configs from xml
84 if (xmlConfFileNameGEM.Length() > 0) {
85 xmlConfFileNameGEM = TString(getenv("VMCWORKDIR")) + "/parameters/gem/XMLConfigs/" + xmlConfFileNameGEM;
86 printf("xmlConfFileName %s\n", xmlConfFileNameGEM.Data());
87 fGemStationSet = new BmnGemStripStationSet(xmlConfFileNameGEM);
88 }
89 if (xmlConfFileNameSil.Length() > 0) {
90 xmlConfFileNameSil = TString(getenv("VMCWORKDIR")) + "/parameters/silicon/XMLConfigs/" + xmlConfFileNameSil;
91 printf("xmlConfFileName %s\n", xmlConfFileNameSil.Data());
92 fSilStationSet = new BmnSiliconStationSet(xmlConfFileNameSil);
93 }
94 if (xmlConfFileNameCSC.Length() > 0) {
95 xmlConfFileNameCSC = TString(getenv("VMCWORKDIR")) + "/parameters/csc/XMLConfigs/" + xmlConfFileNameCSC;
96 printf("xmlConfFileName %s\n", xmlConfFileNameCSC.Data());
97 fCscStationSet = new BmnCSCStationSet(xmlConfFileNameCSC);
98 }
99}
100
102{
103 if (fGemStationSet)
104 delete fGemStationSet;
105 if (fSilStationSet)
106 delete fSilStationSet;
107 if (fCscStationSet)
108 delete fCscStationSet;
109}
110
112{
113 if (fVerbose > 0)
114 printf("CBM-->BM@N DST converter init\n");
115
116 FairRootManager* ioman = FairRootManager::Instance();
117 if (!ioman) {
118 fprintf(stderr, "FairRootManager is not instantiated!");
119 return kFATAL;
120 }
121 fCBMMCEvHeader = static_cast<FairMCEventHeader*>(ioman->GetObject(fCBMMCEvHeaderName));
122 if (fCBMMCEvHeader) {
123 isMCEVE = kTRUE;
124 printf("This is MC generated file\n");
125 } else {
126 fCBMEvHeader = static_cast<FairEventHeader*>(ioman->GetObject(fCBMEvHeaderName));
127 if (!fCBMEvHeader) {
128 fprintf(stderr, "No valid event header found!");
129 return kFATAL;
130 }
131 }
132 if (isMCEVE) {
133 fCBMGlobalTracks = static_cast<TClonesArray*>(ioman->GetObject(fBMNMCGlobalTracksName));
134 fCBMPoints = static_cast<TClonesArray*>(ioman->GetObject(fCBMPointsName));
135 fCBMCSCPoints = static_cast<TClonesArray*>(ioman->GetObject(fCBMCSCPointsName));
136 fCBMBDPoints = static_cast<TClonesArray*>(ioman->GetObject(fCBMBDPointsName));
137 fCBMTof400Points = static_cast<TClonesArray*>(ioman->GetObject(fTof400PointsName));
138
139 fBMNMCEvHeader = new FairMCEventHeader(); // out
140 ioman->Register(fBMNMCEvHeaderName, "", fBMNMCEvHeader, kTRUE); // last arg: save to file
142 ioman->Register(fBMNMCGlobalTracksName, "", fBMNGlobalTracks, kTRUE);
143 fBMNGemPoints = new TClonesArray(CbmStsPoint::Class());
144 ioman->Register(fBMNGemPointsName, "", fBMNGemPoints, kTRUE);
145 fBMNSilPoints = new TClonesArray(BmnSiliconPoint::Class());
146 ioman->Register(fBMNSilPointsName, "", fBMNSilPoints, kTRUE);
147 fBMNCSCPoints = new TClonesArray(BmnCSCPoint::Class());
148 ioman->Register(fBMNCSCPointsName, "", fBMNCSCPoints, kTRUE);
149 fBMNBDPoints = new TClonesArray(BmnBdPoint::Class());
150 ioman->Register(fBMNBDPointsName, "", fBMNBDPoints, kTRUE);
151 fBMNTof400Points = new TClonesArray(BmnTOF1Point::Class());
152 ioman->Register(fBMNTof400PointsName, "", fBMNTof400Points, kTRUE);
153 } else {
154 fCBMVertex = static_cast<CbmVertex*>(ioman->GetObject(fCBMVertexName));
155 fCBMoldBMNEvHeader = static_cast<TClonesArray*>(ioman->GetObject(fCBMoldBMNEvHeaderName));
157 isMCDST = kTRUE;
158 printf("This is %s DST\n", (isMCDST ? "MC" : "exp"));
159 fCBMGlobalTracks = static_cast<TClonesArray*>(ioman->GetObject(fCBMGlobalTracksName));
160 if (!fCBMGlobalTracks) {
161 printf("%s tracks not found, we will use common branch %s\n", fCBMGlobalTracksCSCName.Data(),
162 fCBMGlobalTracksName.Data());
163 fCBMGlobalTracks = static_cast<TClonesArray*>(ioman->GetObject(fCBMGlobalTracksCSCName));
164 }
165 fCBMHits = static_cast<TClonesArray*>(ioman->GetObject(fCBMHitsName));
166 fCBMClusters = static_cast<TClonesArray*>(ioman->GetObject(fCBMClustersName));
167
168 fBMNEvHeader = new DstEventHeader(); // out
169 ioman->Register(fBMNEvHeaderName, "", fBMNEvHeader, kTRUE); // last arg: save to file
171 ioman->Register(fBMNVertexName, "", fBMNVertex, kTRUE);
173 ioman->Register(fBMNGlobalTracksName, "", fBMNGlobalTracks, kTRUE);
175 ioman->Register(fBMNGemTracksName, "", fBMNGemTracks, kTRUE);
177 ioman->Register(fBMNSilTracksName, "", fBMNSilTracks, kTRUE);
178 // fBMNCscTracks = new TClonesArray(BmnTrack::Class());
179 // ioman->Register(fBMNCscTracksName, "", fBMNCscTracks, kTRUE);
180
181 // fBMNMwpcTracks = new TClonesArray(BmnMwpcTrack::Class());
182 // ioman->Register(fBMNMwpcTracksName, "", fBMNMwpcTracks, kTRUE);
183
184 fBMNInnerHits = new TClonesArray(BmnHit::Class());
185 ioman->Register(fBMNInnerHitsName, "", fBMNInnerHits, kTRUE);
186 fBMNGemHits = new TClonesArray(BmnGemStripHit::Class());
187 ioman->Register(fBMNGemHitsName, "", fBMNGemHits, kTRUE);
188 fBMNSilHits = new TClonesArray(BmnSiliconHit::Class());
189 ioman->Register(fBMNSilHitsName, "", fBMNSilHits, kTRUE);
190 fBMNCscHits = new TClonesArray(BmnCSCHit::Class());
191 ioman->Register(fBMNCscHitsName, "", fBMNCscHits, kTRUE);
192 // if (fCBMToF400Hits) {
193 // fBMNTof400Hits = new TClonesArray(BmnTofHit::Class());
194 // ioman->Register(fBMNTof400HitsName, "", fBMNTof400Hits, kTRUE);
195 // }
196
197 if (fDstFileName.Length() && (!isMCDST)) {
198 fDstFile = new TFile(fDstFileName, "READ");
199 if (fDstFile->IsOpen() == kFALSE) {
200 printf("\n!!!!\ncannot open file %s !\n", fDstFileName.Data());
201 return kFATAL;
202 }
203 fDstTree = (TTree*)fDstFile->Get(fDstTreeNameNew.Data());
204 if (fDstTree->SetBranchAddress(fBMNEvHeaderName.Data(), &fBMNEvHeaderIn) < 0)
205 return kFATAL;
206
207 fDstTree->SetBranchAddress(fBMNZDCName.Data(), &fBMNZDCIn);
208 if (fBMNZDCIn) {
209 fBMNZDC = new BmnZDCEventDataExt(); // out
210 ioman->Register(fBMNZDCName, "", fBMNZDC, kTRUE);
211 }
212
213 for (TString& brName : fBrNames) {
214 TClonesArray* arIn = nullptr;
215 fDstTree->SetBranchAddress(brName.Data(), &arIn);
216 if (!arIn)
217 continue;
218 TClass* cl = arIn->GetClass();
219 fInArrays.push_back(arIn);
220 TClonesArray* arOut = new TClonesArray(cl);
221 ioman->Register(brName, "", arOut, kTRUE); // last arg: save to file
222 fOutArrays.push_back(arOut);
223 }
224
225 // fDstTree->SetBranchAddress(fBMNTof400HitsName.Data(), &fBMNTof400HitsIn);
226 // fDstTree->SetBranchAddress(fBMNTof700HitsName.Data(), &fBMNTof700HitsIn);
227 // fDstTree->SetBranchAddress(fBMNDchTracksName.Data(), &fBMNDchTracksIn);
228 // fBMNTof400Hits = new TClonesArray(BmnTofHit::Class());
229 // ioman->Register(fBMNTof400HitsName, "", fBMNTof400Hits, kTRUE);
230 // fBMNTof700Hits = new TClonesArray(BmnTofHit::Class());
231 // ioman->Register(fBMNTof700HitsName, "", fBMNTof700Hits, kTRUE);
232 // fBMNDchTracks = new TClonesArray(BmnDchTrack::Class());
233 // ioman->Register(fBMNDchTracksName, "", fBMNDchTracks, kTRUE);
234 }
235 }
236 // fEvHeaderShow = new DstEventHeader(); //out
237 // ioman->Register(fEvHeaderName, "", fEvHeaderShow, kTRUE); // last arg: save to file
238 return kSUCCESS;
239}
240
242{
243 if (isMCEVE)
244 ProcessEVE();
245 else
246 ProcessDST();
247}
248
250{
251 fBMNGlobalTracks->Delete();
252 fBMNGemPoints->Delete();
253 fBMNSilPoints->Delete();
254 fBMNCSCPoints->Delete();
255 fBMNBDPoints->Delete();
256 fBMNTof400Points->Delete();
257 // copy event header content
258 fBMNMCEvHeader->SetEventID(fCBMMCEvHeader->GetEventID());
259 fBMNMCEvHeader->SetRunID(fCBMMCEvHeader->GetRunID());
260 TVector3 vertex;
261 fCBMMCEvHeader->GetVertex(vertex);
262 fBMNMCEvHeader->SetVertex(vertex);
263 fBMNMCEvHeader->SetTime(fCBMMCEvHeader->GetT());
264 fBMNMCEvHeader->SetB(fCBMMCEvHeader->GetB());
265 fBMNMCEvHeader->SetNPrim(fCBMMCEvHeader->GetNPrim());
266 fBMNMCEvHeader->SetRotX(fCBMMCEvHeader->GetRotX());
267 fBMNMCEvHeader->SetRotY(fCBMMCEvHeader->GetRotY());
268 fBMNMCEvHeader->SetRotZ(fCBMMCEvHeader->GetRotZ());
269 // copy tracks&points
270 fBMNGlobalTracks->AbsorbObjects(fCBMGlobalTracks);
271 fBMNCSCPoints->AbsorbObjects(fCBMCSCPoints);
272 fBMNBDPoints->AbsorbObjects(fCBMBDPoints);
273 fBMNTof400Points->AbsorbObjects(fCBMTof400Points);
274 // separate array to Gem and Sil
275 for (Int_t i = 0; i < fCBMPoints->GetEntriesFast(); i++) {
276 CbmStsPoint* pt = static_cast<CbmStsPoint*>(fCBMPoints->UncheckedAt(i));
277 Int_t iSt = pt->GetStation();
278 if (iSt == -1) { // Silicon (no station number for silicon in the CBM digitizer =( )
279 Int_t trackID = pt->GetTrackID();
280 Int_t detID = pt->GetDetectorID();
281 Int_t eventID = pt->GetEventID();
282 Double_t tof = pt->GetTime();
283 Double_t len = pt->GetLength();
284 Double_t eLoss = pt->GetEnergyLoss();
285 Int_t isPrimary = 0; // @TODO
286 Double_t charge = 0;
287 Int_t pdgId = 0;
288 Int_t iMod = pt->GetModule();
289 TVector3 posIn;
290 TVector3 posOut;
291 TVector3 momIn;
292 TVector3 momOut;
293 pt->Position(posIn);
294 pt->PositionOut(posOut);
295 pt->Momentum(momIn);
296 pt->MomentumOut(momOut);
297 BmnSiliconPoint* silPt = new ((*fBMNSilPoints)[fBMNSilPoints->GetEntriesFast()]) BmnSiliconPoint(
298 trackID, detID, posIn, posOut, momIn, momOut, tof, len, eLoss, isPrimary, charge, pdgId);
299 silPt->SetStation(iSt);
300 silPt->SetModule(iMod);
301 silPt->SetEventID(eventID);
302 } else { // GEM
303 /*CbmStsPoint * gemPt =*/
304 new ((*fBMNGemPoints)[fBMNGemPoints->GetEntriesFast()]) CbmStsPoint(*pt);
305 }
306 }
307}
308
310{
311 fBMNGlobalTracks->Delete();
312 fBMNSilTracks->Delete();
313 fBMNGemTracks->Delete();
314 // fBMNCscTracks->Delete();
315 fBMNInnerHits->Delete();
316 fBMNSilHits->Delete();
317 fBMNGemHits->Delete();
318 fBMNCscHits->Delete();
319 fBMNVertex->Delete();
320 for (TClonesArray* ar : fOutArrays)
321 ar->Delete();
322
323 fMapHit.resize(fCBMHits->GetEntriesFast(), 0);
324 // copy event id
325 if (isMCDST) {
326 fBMNEvHeader->SetEventId(++iEv);
327 fBMNEvHeader->SetEventTime(fCBMEvHeader->GetEventTime());
328 fBMNEvHeader->SetRunId(fCBMEvHeader->GetRunId());
329 } else {
330 BmnEventHeader* eh = static_cast<BmnEventHeader*>(fCBMoldBMNEvHeader->At(0));
331 fBMNEvHeader->SetEventId(eh->GetEventId());
332 fBMNEvHeader->SetEventTime(eh->GetEventTime());
333 fBMNEvHeader->SetEventTimeTS(eh->GetEventTimeTS());
334 fBMNEvHeader->SetRunId(eh->GetRunId());
335 }
336 // copy vertex
337 CbmVertex* vtxCBM = static_cast<CbmVertex*>(fCBMVertex);
338 // if ((vtxCBM->GetNTracks() < CutPVMinTracks) || Abs(vtxCBM->GetZ()) > Abs(CutValidZ)){
339 // fRunSimInst->SetSaveEvent(kFALSE);
340 // return;
341 // }
342
343 TMatrixFSym cov(3);
344 vtxCBM->CovMatrix(cov);
345 /*BmnVertex * vtx = */ new ((*fBMNVertex)[fBMNVertex->GetEntriesFast()])
346 BmnVertex(vtxCBM->GetX(), vtxCBM->GetY(), vtxCBM->GetZ(), vtxCBM->GetChi2(), vtxCBM->GetNDF(),
347 vtxCBM->GetNTracks(), cov, -1, vtxCBM->GetTrackInds());
348
349 // copy hits
350 for (Int_t iHit = 0; iHit < fCBMHits->GetEntriesFast(); iHit++) {
351 CbmStsHit* cbmHit = static_cast<CbmStsHit*>(fCBMHits->UncheckedAt(iHit));
352 Int_t iSt = cbmHit->GetStationNr();
353 Int_t iMod = cbmHit->GetSectorNr();
354 if (iSt > fSilStationSet->GetNStations()) { // behind silicon
355 iSt -= fSilStationSet->GetNStations();
356 if (iSt > fGemStationSet->GetNStations()) { // behind GEM
357 iSt -= fGemStationSet->GetNStations();
358 BmnCSCHit* hit = new ((*fBMNCscHits)[fBMNCscHits->GetEntriesFast()])
359 BmnCSCHit(0, TVector3(cbmHit->GetX(), cbmHit->GetY(), cbmHit->GetZ()),
360 TVector3(cbmHit->GetDx(), cbmHit->GetDy(), cbmHit->GetDz()), 0);
361 fMapHit[iHit] = fBMNCscHits->GetEntriesFast() - 1;
362 hit->SetDetId(kGEM);
363 hit->SetCovXY(cbmHit->GetCovXY());
364 hit->SetTimeStamp(cbmHit->GetTimeStamp());
365 hit->SetTimeStampError(cbmHit->GetTimeStampError());
366 hit->SetStation(iSt - 1);
367 hit->SetModule(CscModCbm2Bmn(iSt, iMod));
368
369 } else {
370 BmnGemStripHit* hit = new ((*fBMNGemHits)[fBMNGemHits->GetEntriesFast()])
371 BmnGemStripHit(0, TVector3(cbmHit->GetX(), cbmHit->GetY(), cbmHit->GetZ()),
372 TVector3(cbmHit->GetDx(), cbmHit->GetDy(), cbmHit->GetDz()), 0);
373 fMapHit[iHit] = fBMNGemHits->GetEntriesFast() - 1;
374 hit->SetDetId(kGEM);
375 hit->SetCovXY(cbmHit->GetCovXY());
376 hit->SetTimeStamp(cbmHit->GetTimeStamp());
377 hit->SetTimeStampError(cbmHit->GetTimeStampError());
378 hit->SetStation(iSt - 1);
379 hit->SetModule(GemModCbm2Bmn(iSt, iMod));
380 }
381 } else {
382 BmnSiliconHit* hit = new ((*fBMNSilHits)[fBMNSilHits->GetEntriesFast()])
383 BmnSiliconHit(0, TVector3(cbmHit->GetX(), cbmHit->GetY(), cbmHit->GetZ()),
384 TVector3(cbmHit->GetDx(), cbmHit->GetDy(), cbmHit->GetDz()), 0);
385 fMapHit[iHit] = fBMNSilHits->GetEntriesFast() - 1;
386 hit->SetDetId(kSILICON);
387 hit->SetCovXY(cbmHit->GetCovXY());
388 hit->SetTimeStamp(cbmHit->GetTimeStamp());
389 hit->SetTimeStampError(cbmHit->GetTimeStampError());
390 hit->SetStation(iSt - 1);
391 hit->SetModule(iMod - 1);
392 }
393 }
394 // recreate track structure
395 for (Int_t iTrack = 0; iTrack < fCBMGlobalTracks->GetEntriesFast(); iTrack++) {
396 // printf("iTrack %d\n", iTrack);
397 CbmStsTrack* cbmTrack = static_cast<CbmStsTrack*>(fCBMGlobalTracks->UncheckedAt(iTrack));
398 BmnTrack silTr;
399 BmnTrack gemTr;
400 BmnTrack cscTr;
401 BmnGlobalTrack* gTrack = new ((*fBMNGlobalTracks)[fBMNGlobalTracks->GetEntriesFast()]) BmnGlobalTrack();
402 gTrack->SetParamFirst(*(cbmTrack->GetParamFirst()));
403 gTrack->SetParamLast(*(cbmTrack->GetParamLast()));
404 // gTrack->SetPDG(cbmTrack->GetPidHypo());
405 gTrack->SetChi2(cbmTrack->GetChi2());
406 gTrack->SetNDF(cbmTrack->GetNDF());
407
408 for (Int_t iHit = 0; iHit < cbmTrack->GetNStsHits(); iHit++) {
409 Int_t iHitArr = cbmTrack->GetStsHitIndex(iHit);
410 CbmStsHit* cbmHit = static_cast<CbmStsHit*>(fCBMHits->UncheckedAt(iHitArr));
411 Int_t iSt = cbmHit->GetStationNr();
412 // Int_t iMod = cbmHit->GetSectorNr();
413 if (iSt > fSilStationSet->GetNStations()) { // behind silicon
414 iSt -= fSilStationSet->GetNStations();
415 if (iSt > fGemStationSet->GetNStations()) { // behind GEM
416 iSt -= fGemStationSet->GetNStations();
417 BmnHit* hit = static_cast<BmnHit*>(fBMNCscHits->UncheckedAt(fMapHit[iHitArr]));
418 gTrack->AddHit(fMapHit[iHitArr], hit);
419 // gTrack->AddCscHitIndex(0, fMapHit[iHitArr]);
420
421 } else {
422 BmnHit* hit = static_cast<BmnHit*>(fBMNGemHits->UncheckedAt(fMapHit[iHitArr]));
423 gemTr.AddHit(fMapHit[iHitArr], hit);
424 gTrack->AddHit(fMapHit[iHitArr], hit);
425 }
426 } else {
427 BmnHit* hit = static_cast<BmnHit*>(fBMNSilHits->UncheckedAt(fMapHit[iHitArr]));
428 silTr.AddHit(fMapHit[iHitArr], hit);
429 gTrack->AddHit(fMapHit[iHitArr], hit);
430 }
431 }
432 silTr.SortHits();
433 gemTr.SortHits();
434 cscTr.SortHits();
435 if (silTr.GetNHits()) {
436 new ((*fBMNSilTracks)[fBMNSilTracks->GetEntriesFast()]) BmnTrack(silTr);
437 // gTrack->SetSilTrackIndex(fBMNSilTracks->GetEntriesFast() - 1);
438 }
439 if (gemTr.GetNHits()) {
440 new ((*fBMNGemTracks)[fBMNGemTracks->GetEntriesFast()]) BmnTrack(gemTr);
441 gTrack->SetGemTrackIndex(fBMNGemTracks->GetEntriesFast() - 1);
442 }
443 gTrack->SortHits();
444 }
445
446 if (fDstFile && (!isMCDST)) {
447 while (iEvFile < 100000000) {
448 fDstTree->GetEntry(++iEvFile);
449 if ((fVerbose > 0) && (iEvFile % 5000 == 0))
450 printf("iev %8lld\n", iEvFile);
451 // printf("iExpEvent %lld\v", iEvFile);
452 // printf("main evId = %06u EHs[%06lld]->GetEventId() = %06u \n",
453 // fBMNEvHeader->GetEventId(), iEvFile, fBMNEvHeaderIn->GetEventId());
454 if (fBMNEvHeader->GetEventId() == fBMNEvHeaderIn->GetEventId()) {
455 if (fBMNZDC) {
456 fBMNZDC->SetAsymmetry(fBMNZDCIn->GetAsymmetry());
457 fBMNZDC->SetMoment(fBMNZDCIn->GetMoment());
458 fBMNZDC->SetX(fBMNZDCIn->GetX());
459 fBMNZDC->SetY(fBMNZDCIn->GetY());
460 fBMNZDC->SetEnergy(fBMNZDCIn->GetEnergy());
461 fBMNZDC->SetEnergy(fBMNZDCIn->GetEnergy('c'), 'c');
462 fBMNZDC->SetEnergy(fBMNZDCIn->GetEnergy('n'), 'n');
463 fBMNZDC->SetEnergy(fBMNZDCIn->GetEnergy('p'), 'p');
464 fBMNZDC->SetNHits(fBMNZDCIn->GetNHits());
465 fBMNZDC->SetNHits(fBMNZDCIn->GetNHits('c'), 'c');
466 fBMNZDC->SetNHits(fBMNZDCIn->GetNHits('n'), 'n');
467 fBMNZDC->SetNHits(fBMNZDCIn->GetNHits('p'), 'p');
468 }
469 for (size_t iAr = 0; iAr < fOutArrays.size(); iAr++)
470 fOutArrays[iAr]->AbsorbObjects(fInArrays[iAr]);
471 // fBMNTof400Hits->AbsorbObjects(fBMNTof400HitsIn);
472 // fBMNTof700Hits->AbsorbObjects(fBMNTof700HitsIn);
473 // fBMNDchTracks->AbsorbObjects(fBMNDchTracksIn);
474 break;
475 }
476 if (fBMNEvHeader->GetEventId() < fBMNEvHeaderIn->GetEventId()) {
477 if (fVerbose > 0)
478 printf("\n ToF tree %u event lost!\n", fBMNEvHeader->GetEventId());
479 break;
480 }
481 }
482 }
483}
484
486{
487 for (size_t iAr = 0; iAr < fOutArrays.size(); iAr++) {
488 delete fOutArrays[iAr];
489 // delete fInArrays[iAr];
490 }
491 // delete fBMNEvHeaderIn;
492 // if (fBMNZDCIn) delete fBMNZDCIn;
493 if (fDstFile) {
494 fDstFile->Close();
495 delete fDstFile;
496 }
497}
498
500
502{
503 Int_t iModBmn = 0;
504 switch (fPeriodId) {
505 case 7:
506 switch (iSt) {
507 case 1:
508 case 4:
509 case 6:
510 iModBmn = (4 - iModCbm) / 2;
511 break;
512 case 2:
513 case 3:
514 case 5:
515 iModBmn = (iModCbm - 1) / 2;
516 break;
517 default:
518 break;
519 }
520 break;
521 case 6:
522 break;
523 default:
524 break;
525 }
526 return iModBmn;
527}
528
530{
531 Int_t iModBmn = 0;
532 switch (fPeriodId) {
533 case 7:
534 iModBmn = (3 - iModCbm) / 2;
535 break;
536 default:
537 break;
538 }
539 return iModBmn;
540}
int i
Definition P4_F32vec4.h:22
int Int_t
constexpr Bool_t kFALSE
double Double_t
constexpr Bool_t kTRUE
const char Option_t
TMatrixTSym< Float_t > TMatrixFSym
@ kSILICON
@ kGEM
BmnSetup
Define experimental setup.
Definition BmnEnums.h:165
@ kBMNSETUP
Definition BmnEnums.h:166
UInt_t GetEventId()
Get the event ID for this event.
TTimeStamp GetEventTimeTS()
Get the time for this event.
BmnGlobalTrack.h.
void SetGemTrackIndex(Int_t iGem)
Modifiers.
void SetCovXY(Double_t val)
Definition BmnHit.h:62
void SetModule(Int_t mod)
Definition BmnHit.h:53
void SetDetId(DetectorId det)
Definition BmnHit.h:51
void SetStation(Short_t st)
Definition BmnHit.h:52
void SetStation(Int_t station_num)
void SetModule(Int_t module_num)
TString fCBMGlobalTracksCSCName
TClonesArray * fBMNSilPoints
FairMCEventHeader * fCBMMCEvHeader
TClonesArray * fBMNGemHits
TString fBMNGemHitsName
BmnTrackConv(Int_t run_period, Int_t run_number=0, BmnSetup setup=kBMNSETUP, TString inFileAdd="", vector< TString > branchesToClone={"BmnTof400Hit", "BmnTof700Hit", "BmnDchTrack"})
TClonesArray * fCBMClusters
TClonesArray * fCBMBDPoints
TClonesArray * fBMNInnerHits
TString fBMNCscHitsName
TString fBMNSilHitsName
vector< TClonesArray * > fOutArrays
TString fBMNCSCPointsName
TString fBMNMwpcHitsName
TClonesArray * fBMNCscHits
TClonesArray * fBMNCSCPoints
TClonesArray * fCBMHits
TString fBMNSilTracksName
Int_t CscModCbm2Bmn(Int_t iSt, Int_t iModCbm)
TClonesArray * fCBMGlobalTracks
void Exec(Option_t *option)
TClonesArray * fBMNTof400Points
TString fCBMPointsName
FairEventHeader * fCBMEvHeader
Long64_t iEvFile
vector< Int_t > fMapHit
TString fCBMHitsName
vector< TClonesArray * > fInArrays
BmnZDCEventDataExt * fBMNZDC
TString fTof400PointsName
BmnCSCStationSet * fCscStationSet
TClonesArray * fCBMoldBMNEvHeader
TClonesArray * fBMNSilHits
TString fDstTreeName
TClonesArray * fBMNGlobalTracks
TString fBMNDchTracksName
CbmVertex * fCBMVertex
TString fBMNGemPointsName
TString fCBMClustersName
TString fBMNZDCName
TClonesArray * fBMNBDPoints
TString fBMNEvHeaderName
TString fCBMMCEvHeaderName
TString fCBMEvHeaderName
TString fCBMVertexName
BmnSiliconStationSet * fSilStationSet
TClonesArray * fBMNGemPoints
FairMCEventHeader * fBMNMCEvHeader
BmnGemStripStationSet * fGemStationSet
BmnZDCEventData * fBMNZDCIn
TString fBMNGemTracksName
TClonesArray * fCBMPoints
TString fBMNBDPointsName
TString fDstTreeNameNew
TTree * fDstTree
TString fBMNSilPointsName
TFile * fDstFile
DstEventHeader * fBMNEvHeader
Int_t GemModCbm2Bmn(Int_t iSt, Int_t iModCbm)
DstEventHeader * fBMNEvHeaderIn
TClonesArray * fCBMCSCPoints
TString fCBMBDPointsName
TString fBMNGlobalTracksName
TString fBMNMCGlobalTracksName
TClonesArray * fBMNSilTracks
TString fCBMToF400HitsName
TClonesArray * fCBMTof400Points
TString fBMNVertexName
vector< TString > fBrNames
TString fBMNTof400PointsName
TString fBMNTof400HitsName
TString fBMNTof700HitsName
TString fBMNCscTracksName
TClonesArray * fBMNGemTracks
TString fCBMoldBMNEvHeaderName
TString fCBMCSCPointsName
TString fDstFileName
TClonesArray * fBMNVertex
TString fCBMGlobalTracksName
TString fBMNInnerHitsName
BmnSetup fSetup
InitStatus Init()
TString fBMNMCEvHeaderName
virtual ~BmnTrackConv()
void SetChi2(Double_t chi2)
Definition BmnTrack.h:76
void SetParamLast(FairTrackParam &par)
Definition BmnTrack.h:72
Int_t GetNHits() const
Accessors.
Definition BmnTrack.h:49
void AddHit(Int_t hitIndex, FairHit *Hit)
Associate a FairHit to the track.
Definition BmnTrack.cxx:28
void SetParamFirst(FairTrackParam &par)
Modifiers.
Definition BmnTrack.h:70
void SortHits()
Public method SortHits Sorts the hits in downstream direction and writes the hit indices into the mem...
Definition BmnTrack.cxx:45
void SetNDF(Int_t ndf)
Definition BmnTrack.h:78
Double_t GetCovXY() const
Accessors.
Definition CbmHit.h:41
virtual Int_t GetStationNr() const
Definition CbmStsHit.h:67
Int_t GetSectorNr() const
Definition CbmStsHit.h:68
void PositionOut(TVector3 &pos)
Definition CbmStsPoint.h:74
Int_t GetModule() const
Definition CbmStsPoint.h:77
Int_t GetStation() const
Definition CbmStsPoint.h:76
void MomentumOut(TVector3 &mom)
Definition CbmStsPoint.h:75
FairTrackParam * GetParamLast()
Definition CbmStsTrack.h:70
Int_t GetNStsHits() const
Accessors.
Definition CbmStsTrack.h:60
Double_t GetChi2() const
Definition CbmStsTrack.h:66
Int_t GetStsHitIndex(Int_t iHit) const
Definition CbmStsTrack.h:62
FairTrackParam * GetParamFirst()
Definition CbmStsTrack.h:69
Int_t GetNDF() const
Definition CbmStsTrack.h:67
CbmVertex.h.
Definition CbmVertex.h:21
Double_t GetZ() const
Definition CbmVertex.h:60
void CovMatrix(TMatrixFSym &covMat) const
Double_t GetX() const
Accessors.
Definition CbmVertex.h:58
Int_t GetNTracks() const
Definition CbmVertex.h:63
std::vector< Int_t > GetTrackInds()
Definition CbmVertex.h:69
Double_t GetChi2() const
Definition CbmVertex.h:61
Double_t GetY() const
Definition CbmVertex.h:59
Int_t GetNDF() const
Definition CbmVertex.h:62
TClass * GetClass() const
static TClass * Class()
Ssiz_t Length() const
const char * Data() const