8#include "FairRootManager.h"
10#include "FairRuntimeDb.h"
11#include "FairGeoNode.h"
12#include "FairMCPoint.h"
13#include "CbmGeoStsPar.h"
14#include "CbmStsSensor.h"
15#include "CbmStsDigiScheme.h"
16#include "CbmGeoStsPar.h"
17#include "CbmStsDigiPar.h"
18#include "CbmMCTrack.h"
19#include "CbmStsPoint.h"
20#include "CbmBaseHit.h"
21#include "TDatabasePDG.h"
22#include "TGeoManager.h"
23#include "TClonesArray.h"
27BmnMCTrackCreator::BmnMCTrackCreator(TString gem, TString sil, TString csc)
31 fTof400Points(nullptr),
32 fTof700Points(nullptr),
60 AddPoints(
kSSD, fSsdPoints);
61 AddPoints(
kGEM, fGemPoints);
62 AddPoints(
kTOF1, fTof400Points);
63 AddPoints(
kTOF, fTof700Points);
64 AddPoints(
kCSC, fCscPoints);
65 AddPoints(
kDCH, fDchPoints);
78void BmnMCTrackCreator::ReadDataBranches() {
79 FairRootManager* ioman = FairRootManager::Instance();
80 fMCTracks = (TClonesArray*) ioman->GetObject(
"MCTrack");
81 fSilPoints = (TClonesArray*) ioman->GetObject(
"SiliconPoint");
82 fSsdPoints = (TClonesArray*) ioman->GetObject(
"SSDPoint");
83 fGemPoints = (TClonesArray*) ioman->GetObject(
"StsPoint");
84 fTof400Points = (TClonesArray*) ioman->GetObject(
"TOF400Point");
85 fTof700Points = (TClonesArray*) ioman->GetObject(
"TOF700Point");
86 fCscPoints = (TClonesArray*) ioman->GetObject(
"CSCPoint");
87 fDchPoints = (TClonesArray*) ioman->GetObject(
"DCHPoint");
90void BmnMCTrackCreator::AddPoints(
DetectorId detId,
const TClonesArray* array) {
92 Int_t nofPoints =
array->GetEntriesFast();
93 for (Int_t iPoint = 0; iPoint < nofPoints; iPoint++) {
94 FairMCPoint* fairPoint = (FairMCPoint*) (
array->At(iPoint));
100 }
else if (detId ==
kSSD) {
103 }
else if (detId ==
kGEM) {
105 }
else if (detId ==
kCSC) {
107 }
else if (detId ==
kTOF1) {
108 stationId = fNSiliconStations + fNGemStations + fNCscStations + 1;
109 }
else if (detId ==
kTOF) {
110 stationId = fNSiliconStations + fNGemStations + fNCscStations + 2;
111 }
else if (detId ==
kDCH) {
112 stationId = fNSiliconStations + fNGemStations + fNCscStations + 3;
115 if (stationId < 0)
continue;
116 FairMCPointCoordinatesAndMomentumToBmnMCPoint(fairPoint, &bmnPoint);
117 FairMCPointToBmnMCPoint(fairPoint, &bmnPoint, iPoint, stationId);
118 fBmnMCTracks[fairPoint->GetTrackID()].AddPoint(detId, bmnPoint);
122void BmnMCTrackCreator::FairMCPointToBmnMCPoint(
const FairMCPoint* fairPoint,
BmnMCPoint* bmnPoint, Int_t refId, Int_t stationId) {
126 if (mcTrack ==
nullptr)
return;
127 TParticlePDG* pdgParticle = TDatabasePDG::Instance()->GetParticle(mcTrack->
GetPdgCode());
128 Float_t charge = (pdgParticle !=
nullptr) ? pdgParticle->Charge() : 0.;
130 bmnPoint->
SetQ(charge / 3);
133void BmnMCTrackCreator::FairMCPointCoordinatesAndMomentumToBmnMCPoint(
const FairMCPoint* fairPoint,
BmnMCPoint* bmnPoint) {
134 bmnPoint->
SetXIn(fairPoint->GetX());
135 bmnPoint->
SetYIn(fairPoint->GetY());
136 bmnPoint->
SetZIn(fairPoint->GetZ());
137 bmnPoint->
SetPxIn(fairPoint->GetPx());
138 bmnPoint->
SetPyIn(fairPoint->GetPy());
139 bmnPoint->
SetPzIn(fairPoint->GetPz());
140 bmnPoint->
SetXOut(fairPoint->GetX());
141 bmnPoint->
SetYOut(fairPoint->GetY());
142 bmnPoint->
SetZOut(fairPoint->GetZ());
143 bmnPoint->
SetPxOut(fairPoint->GetPx());
144 bmnPoint->
SetPyOut(fairPoint->GetPy());
145 bmnPoint->
SetPzOut(fairPoint->GetPz());
Int_t GetPointStationOwnership(Double_t zcoord)
Int_t GetPointStationOwnership(Double_t zcoord)
void SetPyOut(Double_t py)
void SetPxOut(Double_t px)
void SetPxIn(Double_t px)
void SetStationId(Int_t stationId)
void SetPzOut(Double_t pz)
void SetPyIn(Double_t py)
void SetPzIn(Double_t pz)
void SetRefId(Int_t refId)
virtual ~BmnMCTrackCreator()
Destructor.
void Create()
Creates array of BmnMCTracks for current event. Has to be executed in Exec() function of the task.
static BmnMCTrackCreator * Instance(TString gem, TString sil, TString csc)
Singleton instance.
Int_t GetPointStationOwnership(Double_t zcoord)
@ array
array (ordered collection of values)