@@ -179,103 +179,120 @@ void build_geometry(FairRunSim* run = nullptr)
179179 run -> AddModule (new o2 ::passive ::FrameStructure ("FRAME" , "Frame" ));
180180 }
181181
182+ std ::vector < int > detId2RunningId = std ::vector < int > (o2 ::detectors ::DetID ::nDetectors , -1 ); // a mapping of detectorId to a dense runtime index
183+ // used for instance to set bits in the hit structure of MCTracks; -1 means that there is no bit associated
184+
185+ auto addReadoutDetector = [& detId2RunningId , & run ](o2 ::base ::Detector * detector ) {
186+ static int runningid = 0 ; // this is static for constant lambda interfaces --> use fixed type and not auto in the lambda!
187+ run -> AddModule (detector );
188+ if (detector -> IsActive ()) {
189+ auto detID = detector -> GetDetId ();
190+ detId2RunningId [detID ] = runningid ;
191+ LOG (info ) << " DETID " << detID << " vs " << detector -> GetDetId () << " mapped to hit bit index " << runningid ;
192+ runningid ++ ;
193+ }
194+ };
195+
182196 if (isActivated ("TOF" )) {
183197 // TOF
184- run -> AddModule (new o2 ::tof ::Detector (isReadout ("TOF" )));
198+ addReadoutDetector (new o2 ::tof ::Detector (isReadout ("TOF ")));
185199 }
186200
187201 if (isActivated ("TRD" )) {
188202 // TRD
189- run -> AddModule (new o2 ::trd ::Detector (isReadout ("TRD" )));
203+ addReadoutDetector (new o2 ::trd ::Detector (isReadout ("TRD ")));
190204 }
191205
192206 if (isActivated ("TPC" )) {
193207 // tpc
194- run -> AddModule (new o2 ::tpc ::Detector (isReadout ("TPC" )));
208+ addReadoutDetector (new o2 ::tpc ::Detector (isReadout ("TPC ")));
195209 }
196210#ifdef ENABLE_UPGRADES
197211 if (isActivated ("IT3" )) {
198212 // IT3
199- run -> AddModule (new o2 ::its ::Detector (isReadout ("IT3" ), "IT3" ));
213+ addReadoutDetector (new o2 ::its ::Detector (isReadout ("IT3 "), " IT3 "));
200214 }
201215
202216 if (isActivated ("TRK" )) {
203217 // ALICE 3 TRK
204- run -> AddModule (new o2 ::trk ::Detector (isReadout ("TRK" )));
218+ addReadoutDetector (new o2 ::trk ::Detector (isReadout ("TRK ")));
205219 }
206220
207221 if (isActivated ("FT3" )) {
208222 // ALICE 3 FT3
209- run -> AddModule (new o2 ::ft3 ::Detector (isReadout ("FT3" )));
223+ addReadoutDetector (new o2 ::ft3 ::Detector (isReadout ("FT3 ")));
210224 }
211225
212226 if (isActivated ("FCT" )) {
213227 // ALICE 3 FCT
214- run -> AddModule (new o2 ::fct ::Detector (isReadout ("FCT" )));
228+ addReadoutDetector (new o2 ::fct ::Detector (isReadout ("FCT ")));
215229 }
216230#endif
217231
218232 if (isActivated ("ITS" )) {
219233 // its
220- run -> AddModule (new o2 ::its ::Detector (isReadout ("ITS" )));
234+ addReadoutDetector (new o2 ::its ::Detector (isReadout ("ITS ")));
221235 }
222236
223237 if (isActivated ("MFT" )) {
224238 // mft
225- run -> AddModule (new o2 ::mft ::Detector (isReadout ("MFT" )));
239+ addReadoutDetector (new o2 ::mft ::Detector (isReadout ("MFT ")));
226240 }
227241
228242 if (isActivated ("MCH" )) {
229243 // mch
230- run -> AddModule (new o2 ::mch ::Detector (isReadout ("MCH" )));
244+ addReadoutDetector (new o2 ::mch ::Detector (isReadout ("MCH ")));
231245 }
232246
233247 if (isActivated ("MID" )) {
234248 // mid
235- run -> AddModule (new o2 ::mid ::Detector (isReadout ("MID" )));
249+ addReadoutDetector (new o2 ::mid ::Detector (isReadout ("MID ")));
236250 }
237251
238252 if (isActivated ("EMC" )) {
239253 // emcal
240- run -> AddModule (new o2 ::emcal ::Detector (isReadout ("EMC" )));
254+ addReadoutDetector (new o2 ::emcal ::Detector (isReadout ("EMC ")));
241255 }
242256
243257 if (isActivated ("PHS" )) {
244258 // phos
245- run -> AddModule (new o2 ::phos ::Detector (isReadout ("PHS" )));
259+ addReadoutDetector (new o2 ::phos ::Detector (isReadout ("PHS ")));
246260 }
247261
248262 if (isActivated ("CPV" )) {
249263 // cpv
250- run -> AddModule (new o2 ::cpv ::Detector (isReadout ("CPV" )));
264+ addReadoutDetector (new o2 ::cpv ::Detector (isReadout ("CPV ")));
251265 }
252266
253267 if (isActivated ("FT0" )) {
254268 // FIT-T0
255- run -> AddModule (new o2 ::ft0 ::Detector (isReadout ("FT0" )));
269+ addReadoutDetector (new o2 ::ft0 ::Detector (isReadout ("FT0 ")));
256270 }
257271
258272 if (isActivated ("FV0" )) {
259273 // FIT-V0
260- run -> AddModule (new o2 ::fv0 ::Detector (isReadout ("FV0" )));
274+ addReadoutDetector (new o2 ::fv0 ::Detector (isReadout ("FV0 ")));
261275 }
262276
263277 if (isActivated ("FDD" )) {
264278 // FIT-FDD
265- run -> AddModule (new o2 ::fdd ::Detector (isReadout ("FDD" )));
279+ addReadoutDetector (new o2 ::fdd ::Detector (isReadout ("FDD ")));
266280 }
267281
268282 if (isActivated ("HMP" )) {
269283 // HMP
270- run -> AddModule (new o2 ::hmpid ::Detector (isReadout ("HMP" )));
284+ addReadoutDetector (new o2 ::hmpid ::Detector (isReadout ("HMP ")));
271285 }
272286
273287 if (isActivated ("ZDC" )) {
274288 // ZDC
275- run -> AddModule (new o2 ::zdc ::Detector (isReadout ("ZDC" )));
289+ addReadoutDetector (new o2 ::zdc ::Detector (isReadout ("ZDC ")));
276290 }
277291
278292 if (geomonly ) {
279293 run -> Init ();
280294 }
295+
296+ // register the DetId2HitIndex lookup with the detector class by copying the vector
297+ o2 ::base ::Detector ::setDetId2HitBitIndex (detId2RunningId );
281298}
0 commit comments