1+ #ifndef ST_FWD_HIT_LOADER_H
2+ #define ST_FWD_HIT_LOADER_H
3+
4+ #ifndef __CINT__
5+ #include " StFwdTrackMaker/include/Tracker/FwdHit.h"
6+ #include " StFwdTrackMaker/include/Tracker/FwdDataSource.h"
7+ #else
8+ class FwdHit ;
9+ #endif
10+
11+ class StEvent ;
12+ class StMuDstMaker ;
13+ class St_g2t_fts_hit ;
14+ class StFcsDb ;
15+
16+
17+ class FstRasterizer {
18+ public:
19+ FstRasterizer ( double r = 3.0 , double phi = 0.0040906154 ) {
20+ mRasterR = r;
21+ mRasterPhi = phi;
22+ }
23+ void setRPhi ( double r, double phi ) {
24+ mRasterR = r;
25+ mRasterPhi = phi;
26+ }
27+ ~FstRasterizer () {}
28+
29+ TVector3 raster (TVector3 p0) {
30+ TVector3 p = p0;
31+ double r = p.Perp ();
32+ double phi = p.Phi ();
33+ const double minR = 5.0 ;
34+ // 5.0 is the r minimum of the Si
35+ p.SetPerp (minR + (std::floor ((r - minR) / mRasterR ) * mRasterR + mRasterR / 2.0 ));
36+ p.SetPhi (-TMath::Pi () + (std::floor ((phi + TMath::Pi ()) / mRasterPhi ) * mRasterPhi + mRasterPhi / 2.0 ));
37+ return p;
38+ }
39+ double mRasterR , mRasterPhi ;
40+ };
41+
42+ class StFwdHitLoader {
43+ public:
44+ StFwdHitLoader () :
45+ mFttDataSource (StFwdHitLoader::DataSource::STEVENT),
46+ mFstDataSource (StFwdHitLoader::DataSource::STEVENT),
47+ mEpdDataSource (StFwdHitLoader::DataSource::STEVENT)
48+ {}
49+ ~StFwdHitLoader () {}
50+ void clear () {
51+ #if !defined (__CINT__)
52+ mFwdHitsFtt .clear ();
53+ mFwdHitsFst .clear ();
54+ mFwdHitsEpd .clear ();
55+ #endif
56+
57+ // clear vectors for visualization OBJ hits
58+ mSpacepointsFtt .clear ();
59+ mSpacepointsFst .clear ();
60+ mSpacepointsEpd .clear ();
61+ }
62+
63+ #if !defined(__CINT__) && !defined(__CLING__)
64+ /* *******************************/
65+ // Load hits from the FTT detector (location based on mFttDataSource)
66+ // * @param mcTrackMap : map of mc tracks
67+ // * @param hitMap : FTT hitmap to populate
68+ // * @return number of hits loaded
69+ // * @note: This function is called by StFwdTrackMaker::Make()
70+ int loadFttHits ( FwdDataSource::McTrackMap_t &mcTrackMap, FwdDataSource::HitMap_t &hitMap );
71+ int loadFttPointsFromStEvent ( FwdDataSource::McTrackMap_t &mcTrackMap, FwdDataSource::HitMap_t &hitMap );
72+ int loadFttPointsFromGEANT ( FwdDataSource::McTrackMap_t &mcTrackMap, FwdDataSource::HitMap_t &hitMap );
73+
74+ /* *******************************/
75+ // Load hits from the FST detector (location based on mFstDataSource)
76+ // * @param mcTrackMap : map of mc tracks
77+ // * @param hitMap : FST hitmap to populate
78+ // * @return number of hits loaded
79+ // * @note: This function is called by StFwdTrackMaker::Make()
80+ int loadFstHits ( FwdDataSource::McTrackMap_t &mcTrackMap, FwdDataSource::HitMap_t &hitMap );
81+ int loadFstHitsFromStEvent ( FwdDataSource::McTrackMap_t &mcTrackMap, FwdDataSource::HitMap_t &hitMap );
82+ int loadFstHitsFromMuDst ( FwdDataSource::McTrackMap_t &mcTrackMap, FwdDataSource::HitMap_t &hitMap );
83+ int loadFstHitsFromGEANT ( FwdDataSource::McTrackMap_t &mcTrackMap, FwdDataSource::HitMap_t &hitMap );
84+
85+ /* *******************************/
86+ // Load hits from the EPD detector (location based on mEpdDataSource)
87+ // * @param mcTrackMap : map of mc tracks
88+ // * @param hitMap : EPD hitmap to populate
89+ // * @return number of hits loaded
90+ // * @note: This function is called by StFwdTrackMaker::Make()
91+ int loadEpdHits ( FwdDataSource::McTrackMap_t &mcTrackMap, FwdDataSource::HitMap_t &hitMap, StFcsDb *fcsDb = nullptr );
92+ int loadEpdHitsFromStEvent ( FwdDataSource::McTrackMap_t &mcTrackMap, FwdDataSource::HitMap_t &hitMap, StFcsDb *fcsDb = nullptr );
93+ #endif
94+
95+ // all caps to avoid conflict with types themselves
96+ enum DataSource { GEANT=0 , STEVENT, MUDST, IGNORE };
97+ /* *******************************/
98+ // Specify the data source for FTT, FST and EPD hits
99+ // * @param ds : data source (GEANT, StEvent, MuDst)
100+ // * @return None
101+ void setFttDataSource ( DataSource ds ) { mFttDataSource = ds; }
102+ void setFstDataSource ( DataSource ds ) { mFstDataSource = ds; }
103+ void setEpdDataSource ( DataSource ds ) { mEpdDataSource = ds; }
104+ void setDataSource ( DataSource ds ) { mFttDataSource = ds; mFstDataSource = ds; mEpdDataSource = ds; }
105+
106+ void setStEvent ( StEvent *stEvent ) { mStEvent = stEvent; }
107+ void setMuDstMaker ( StMuDstMaker *muDstMaker ) { mMuDstMaker = muDstMaker; }
108+ void setTables ( St_g2t_fts_hit *stg_hits, St_g2t_fts_hit *fst_hits, St_g2t_fts_hit *epd_hits ) {
109+ mGeantFtt = stg_hits;
110+ mGeantFst = fst_hits;
111+ mGeantEpd = epd_hits;
112+ }
113+ FstRasterizer mFstRasterizer ;
114+ protected:
115+ DataSource mFttDataSource ;
116+ DataSource mFstDataSource ;
117+ DataSource mEpdDataSource ;
118+ float mEpdThreshold = 0.2 ;
119+
120+ // Pointers to these are used by StFwdTrackMaker, clear the vectors after each event
121+ #if !defined (__CINT__)
122+ vector<FwdHit> mFwdHitsFtt ;
123+ vector<FwdHit> mFwdHitsFst ;
124+ vector<FwdHit> mFwdHitsEpd ;
125+
126+ // this disables logging at compile time
127+ constexpr static int kLogVerbose = 10 ;
128+ constexpr static int kLogInfo = 1 ;
129+ constexpr static int kLogSilent = 0 ;
130+ constexpr static int kLogLevel = kLogSilent ;
131+ #endif
132+
133+ vector<TVector3> mSpacepointsFtt ;
134+ vector<TVector3> mSpacepointsFst ;
135+ vector<TVector3> mSpacepointsEpd ;
136+
137+ // / Non-owning pointer: StEvent provided externally via `setStEvent`
138+ StEvent *mStEvent = nullptr ; // pointer to StEvent
139+ // / Non-owning pointer: StMuDstMaker provided externally via `setMuDstMaker`
140+ StMuDstMaker *mMuDstMaker = nullptr ; // pointer to StMuDstMaker
141+
142+ // / Non-owning pointers to GEANT hits
143+ St_g2t_fts_hit *mGeantFtt = nullptr ; // pointer to GEANT FTT hits
144+ St_g2t_fts_hit *mGeantFst = nullptr ; // pointer to GEANT FST hits
145+ St_g2t_fts_hit *mGeantEpd = nullptr ; // pointer to GEANT EPD hits
146+
147+
148+
149+ bool verbosity = 0 ;
150+ };
151+
152+
153+ #endif // ST_FWD_HIT_LOADER_H
0 commit comments