BmnRoot 26.10.0-18-g4e3414f9
Software framework of the BM@N experiment
Loading...
Searching...
No Matches
BmnMCTrackCreator.cxx
Go to the documentation of this file.
1/**
2 * \file BmnMCTrackCreator.cxx
3 * \author Andrey Lebedev <andrey.lebedev@gsi.de>
4 * \author Sergey Merts <sergey.merts@gmail.com> - modifications for BMN experiment
5 * \date 2011-2014
6 **/
7#include "BmnMCTrackCreator.h"
8
9#include "CbmBaseHit.h"
10#include "CbmGeoStsPar.h"
11#include "CbmMCTrack.h"
12#include "CbmStsDigiPar.h"
13#include "CbmStsDigiScheme.h"
14#include "CbmStsPoint.h"
15#include "CbmStsSensor.h"
16#include "FairGeoNode.h"
17#include "FairMCPoint.h"
18#include "FairRootManager.h"
19#include "FairRunAna.h"
20#include "FairRuntimeDb.h"
21#include "TClonesArray.h"
22#include "TDatabasePDG.h"
23#include "TGeoManager.h"
24
25using namespace std;
26
28 : fMCTracks(nullptr)
29 , fSilPoints(nullptr)
30 , fGemPoints(nullptr)
31 , fTof400Points(nullptr)
32 , fTof700Points(nullptr)
33 , fCscPoints(nullptr)
34 , fDchPoints(nullptr)
36{
41}
42
49
51{
52 static BmnMCTrackCreator instance(gem, sil, csc);
53 return &instance;
54}
55
57{
58 fBmnMCTracks.clear();
59 fNSiliconStations = fSilDetector->GetNStations();
60 fNGemStations = fGemDetector->GetNStations();
61 fNCscStations = fCscDetector->GetNStations();
69 // printf("fSilDetector->GetNStations() = %d\n", fSilDetector->GetNStations());
70 // printf("fGemDetector->GetNStations() = %d\n", fGemDetector->GetNStations());
71
72 // std::cout << "BmnMCTrackCreator: nof MC tracks=" << fBmnMCTracks.size() << std::endl;
73 // std::map<Int_t, BmnMCTrack>::iterator it;
74 // for (it = fBmnMCTracks.begin(); it != fBmnMCTracks.end(); it++) {
75 // printf("n gem pnts = %d\n", (*it).second.GetNofPoints(kGEM));
76 // printf("n sil pnts = %d\n", (*it).second.GetNofPoints(kSILICON));
77 // //std::cout << (*it).first << " => " << (*it).second;
78 // }
79}
80
82{
83 FairRootManager* ioman = FairRootManager::Instance();
84 fMCTracks = (TClonesArray*)ioman->GetObject("MCTrack");
85 fSilPoints = (TClonesArray*)ioman->GetObject("SiliconPoint");
86 fSsdPoints = (TClonesArray*)ioman->GetObject("SSDPoint");
87 fGemPoints = (TClonesArray*)ioman->GetObject("StsPoint");
88 fTof400Points = (TClonesArray*)ioman->GetObject("TOF400Point");
89 fTof700Points = (TClonesArray*)ioman->GetObject("TOF700Point");
90 fCscPoints = (TClonesArray*)ioman->GetObject("CSCPoint");
91 fDchPoints = (TClonesArray*)ioman->GetObject("DCHPoint");
92}
93
94void BmnMCTrackCreator::AddPoints(DetectorId detId, const TClonesArray* array)
95{
96 if (!array)
97 return;
98 Int_t nofPoints = array->GetEntriesFast();
99 for (Int_t iPoint = 0; iPoint < nofPoints; iPoint++) {
100 FairMCPoint* fairPoint = (FairMCPoint*)(array->At(iPoint));
101 BmnMCPoint bmnPoint;
102 Int_t stationId = -1;
103 if (detId == kSILICON) {
104 stationId = fSilDetector->GetPointStationOwnership(fairPoint->GetZ());
105 // printf("stSil = %d\n", stationId);
106 } else if (detId == kSSD) {
107 // BmnSSDHitProducer hp;
108 // stationId = hp.DefineStationByZ(fairPoint->GetZ(), 0);
109 } else if (detId == kGEM) {
110 stationId = fGemDetector->GetPointStationOwnership(fairPoint->GetZ()) + fNSiliconStations;
111 } else if (detId == kCSC) {
112 stationId = fCscDetector->GetPointStationOwnership(fairPoint->GetZ()) + fNSiliconStations + fNGemStations;
113 } else if (detId == kTOF1) {
115 } else if (detId == kTOF) {
117 } else if (detId == kDCH) {
119 }
120
121 if (stationId < 0)
122 continue;
124 FairMCPointToBmnMCPoint(fairPoint, &bmnPoint, iPoint, stationId);
125 fBmnMCTracks[fairPoint->GetTrackID()].AddPoint(detId, bmnPoint);
126 }
127}
128
130 BmnMCPoint* bmnPoint,
131 Int_t refId,
132 Int_t stationId)
133{
134 bmnPoint->SetRefId(refId);
135 bmnPoint->SetStationId(stationId);
136 const CbmMCTrack* mcTrack = (const CbmMCTrack*)(fMCTracks->At(fairPoint->GetTrackID()));
137 if (mcTrack == nullptr)
138 return; // FIXME! it shouldn't happen
139 TParticlePDG* pdgParticle = TDatabasePDG::Instance()->GetParticle(mcTrack->GetPdgCode());
140 Float_t charge = (pdgParticle != nullptr) ? pdgParticle->Charge() : 0.;
141 // Float_t q = (charge > 0) ? 1. : -1.;
142 bmnPoint->SetQ(charge / 3); // Потому что, сука, кварки!
143}
144
146 BmnMCPoint* bmnPoint)
147{
148 bmnPoint->SetXIn(fairPoint->GetX());
149 bmnPoint->SetYIn(fairPoint->GetY());
150 bmnPoint->SetZIn(fairPoint->GetZ());
151 bmnPoint->SetPxIn(fairPoint->GetPx());
152 bmnPoint->SetPyIn(fairPoint->GetPy());
153 bmnPoint->SetPzIn(fairPoint->GetPz());
154 bmnPoint->SetXOut(fairPoint->GetX());
155 bmnPoint->SetYOut(fairPoint->GetY());
156 bmnPoint->SetZOut(fairPoint->GetZ());
157 bmnPoint->SetPxOut(fairPoint->GetPx());
158 bmnPoint->SetPyOut(fairPoint->GetPy());
159 bmnPoint->SetPzOut(fairPoint->GetPz());
160}
Creates BmnMCTrack objects.
int Int_t
float Float_t
@ kSILICON
@ kGEM
@ kTOF
@ kSSD
@ kTOF1
@ kCSC
@ kDCH
Monte-Carlo point.
Definition BmnMCPoint.h:23
void SetYIn(Double_t y)
Definition BmnMCPoint.h:103
void SetPyOut(Double_t py)
Definition BmnMCPoint.h:112
void SetPxOut(Double_t px)
Definition BmnMCPoint.h:111
void SetPxIn(Double_t px)
Definition BmnMCPoint.h:105
void SetStationId(Int_t stationId)
Definition BmnMCPoint.h:116
void SetYOut(Double_t y)
Definition BmnMCPoint.h:109
void SetPzOut(Double_t pz)
Definition BmnMCPoint.h:113
void SetPyIn(Double_t py)
Definition BmnMCPoint.h:106
void SetZIn(Double_t z)
Definition BmnMCPoint.h:104
void SetPzIn(Double_t pz)
Definition BmnMCPoint.h:107
void SetXIn(Double_t x)
Definition BmnMCPoint.h:102
void SetXOut(Double_t x)
Definition BmnMCPoint.h:108
void SetZOut(Double_t z)
Definition BmnMCPoint.h:110
void SetQ(Double_t q)
Definition BmnMCPoint.h:114
void SetRefId(Int_t refId)
Definition BmnMCPoint.h:115
void FairMCPointToBmnMCPoint(const FairMCPoint *fairPoint, BmnMCPoint *bmnPoint, int refId, int stationId)
Convert FairMCPoint to BmnMCPoint.
void AddPoints(DetectorId detId, const TClonesArray *array)
Add MC points from a certain detector.
TClonesArray * fDchPoints
void FairMCPointCoordinatesAndMomentumToBmnMCPoint(const FairMCPoint *fairPoint, BmnMCPoint *bmnPoint)
std::map< Int_t, BmnMCTrack > fBmnMCTracks
TClonesArray * fTof400Points
void ReadDataBranches()
Read data branches.
TClonesArray * fMCTracks
TClonesArray * fTof700Points
BmnCSCStationSet * fCscDetector
BmnGemStripStationSet * fGemDetector
virtual ~BmnMCTrackCreator()
Destructor.
BmnSiliconStationSet * fSilDetector
TClonesArray * fCscPoints
BmnMCTrackCreator(TString gem, TString sil, TString csc)
Constructor.
TClonesArray * fSilPoints
void Create()
Creates array of BmnMCTracks for current event.
static BmnMCTrackCreator * Instance(TString gem, TString sil, TString csc)
Singleton instance.
TClonesArray * fGemPoints
TClonesArray * fSsdPoints
CbmMCTrack.h.
Definition CbmMCTrack.h:26
Int_t GetPdgCode() const
Accessors.
Definition CbmMCTrack.h:56
static TDatabasePDG * Instance()
TParticlePDG * GetParticle(const char *name) const
Double_t Charge() const
Definition json.hpp:4446