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