EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4_Tracking_Genfit.C
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file G4_Tracking_Genfit.C
1 #ifndef MACRO_G4TRACKING_C
2 #define MACRO_G4TRACKING_C
3 
4 #include <GlobalVariables.C>
5 #include <QA.C>
6 
7 #include <G4_Intt.C>
8 #include <G4_Micromegas.C>
9 #include <G4_Mvtx.C>
10 #include <G4_TPC.C>
11 
12 #include <fun4all/Fun4AllServer.h>
13 
14 #include <g4eval/SvtxEvaluator.h>
15 
16 #include <trackreco/PHCASeeding.h>
38 
41 
43 
44 #include <phtpctracker/PHTpcTracker.h>
45 
46 #include <qa_modules/QAG4SimulationTracking.h>
47 #include <qa_modules/QAG4SimulationUpsilon.h>
48 #include <qa_modules/QAG4SimulationVertex.h>
49 
50 R__LOAD_LIBRARY(libg4eval.so)
51 R__LOAD_LIBRARY(libtrack_reco.so)
52 R__LOAD_LIBRARY(libtpccalib.so)
53 R__LOAD_LIBRARY(libPHTpcTracker.so)
54 R__LOAD_LIBRARY(libqa_modules.so)
55 
56 namespace Enable
57 {
58  bool TRACKING_TRACK = false;
59  bool TRACKING_EVAL = false;
60  int TRACKING_VERBOSITY = 0;
61  bool TRACKING_QA = false;
62 } // namespace Enable
63 
64 namespace G4TRACKING
65 {
66  // Space Charge calibration flag
67  bool SC_CALIBMODE = true; // this is anded with G4TPC::ENABLE_DISTORTIONS in TrackingInit()
68  double SC_COLLISIONRATE = 50e3; // leave at 50 KHz for now, scaling of distortion map not implemented yet
69  std::string SC_ROOTOUTPUT_FILENAME = "TpcSpaceChargeMatrices.root"; // space charge calibration output file
70 
71  // Tracking reconstruction setup parameters and flags
72  //=====================================
73 
74  // The normal (default) Acts tracking chain is:
75  // PHActsSiliconSeeding // make silicon track seeds
76  // PHCASeeding // TPC track seeds
77  // PHTpcTrackSeedVertexAssoc // Associates TPC track seeds with a vertex, refines phi and eta
78  // PHSiliconTpcTrackMatching // match TPC track seeds to silicon track seeds
79  // PHMicromegasTpcTrackMatching // associate Micromegas clusters with TPC track stubs
80  // PHActsTrkFitter (1) // Kalman fitter makes fit to assembled tracks
81  // PHSimpleVertexFinder // final vertexing using fitted Acts tracks
82  // PHActsVertexPropagator // propagates track parameters to vertex position to get final dca
83 
84  // Possible variations
85  //====================================
86  //Fittting
87  bool use_genfit = false; // if false, acts KF is run on proto tracks. If true, use Genfit track propagation and fitting
88 
89  // Vertexing
90  bool g4eval_use_initial_vertex = true; // if true, g4eval uses initial vertices in SvtxVertexMap, not final vertices in SvtxVertexMapRefit
91 
92  // TPC seeding options
93  bool use_PHTpcTracker_seeding = false; // false for using the default PHCASeeding to get TPC track seeds, true to use PHTpcTracker
94  bool use_hybrid_seeding = false; // false for using the default PHCASeeding, true to use PHHybridSeeding (STAR core, ALICE KF)
95  bool use_propagator = true; // use PHSimpleKFProp for CA seeding if true
96 
97  // set to false to disable adding fake surfaces (TPC, Micromegas) to MakeActsGeom
98  bool add_fake_surfaces = true;
99 
100  // Truth seeding options (can use any or all)
101  bool use_truth_silicon_seeding = false; // if true runs truth silicon seeding instead of acts silicon seeding
102  bool use_truth_tpc_seeding = false; // if true runs truth silicon seeding instead of reco TPC seeding
103  bool use_truth_si_matching = false; // if true, associates silicon clusters using best truth track match to TPC seed tracks - for diagnostics only
104  // Full truth track seeding
105  bool use_full_truth_track_seeding = false; // makes track seeds using truth info, used for both Acts and Genfit
106  bool use_truth_vertexing = false; // if true runs truth vertexing, if false runs PHSimpleVertexFinder
107 
108  // Rave final vertexing (for QA)
109  bool use_rave_vertexing = true; // Use Rave to find and fit for vertex after track fitting - used for QA only
110  // This is the setup we have been using - smeared truth vertex for a single collision per event. Make it the default for now.
111  std::string vmethod("avf-smoothing:1"); // only good for 1 vertex events // vmethod is a string used to set the Rave final-vertexing method:
112 
113 } // namespace G4TRACKING
114 
116 {
117 #if __cplusplus < 201703L
118  std::cout << std::endl;
119  std::cout << "Cannot run tracking without gcc-8.3 (c++17) environment. Please run:" << std::endl;
120  //
121  // the following gymnastics is needed to print out the correct shell script to source
122  // We have three cvmfs volumes:
123  // /cvmfs/sphenix.sdcc.bnl.gov (BNL internal)
124  // /cvmfs/sphenix.opensciencegrid.org (worldwide readable)
125  // /cvmfs/eic.opensciencegrid.org (Fun4All@EIC)
126  // We support tcsh and bash
127  //
128  std::string current_opt = getenv("OPT_SPHENIX");
129  std::string x8664_sl7 = "x8664_sl7";
130  std::string gcc83 = "gcc-8.3";
131  size_t x8664pos = current_opt.find(x8664_sl7);
132  current_opt.replace(x8664pos, x8664_sl7.size(), gcc83);
133  std::string setupscript = "sphenix_setup";
134  std::string setupscript_ext = ".csh";
135  if (current_opt.find("eic") != string::npos)
136  setupscript = "eic_setup";
137  std::string shell = getenv("SHELL");
138  if (shell.find("tcsh") == string::npos)
139  setupscript_ext = ".sh";
140  std::cout << "source " << current_opt << "/bin/"
141  << setupscript << setupscript_ext << " -n" << std::endl;
142  std::cout << "to set it up and try again" << std::endl;
143  gSystem->Exit(1);
144 #endif
145 
146  if (!Enable::MICROMEGAS)
147  {
149  }
150 
151  // SC_CALIBMODE makes no sense if distortions are not present
153 
154  // For now the TpcSpaceChargeCorrection module only works with the GenFit tracking chain
156  {
157  std::cout << "Cannot enable space charge correction if not using GenFit tracking chain" << std::endl;
159  }
160 
161  // Check for colliding switches
163  {
164  std::cerr << "***WARNING: MULTIPLE SEEDER OPTIONS SELECTED!***" << std::endl;
165  std::cerr << " Current config selects both PHTpcTracker and PHHybridSeeding." << std::endl;
166  std::cerr << " Revert to default...." << std::endl;
169  }
170 
174  #if __cplusplus >= 201703L
175 
176  MakeActsGeometry* geom = new MakeActsGeometry();
177  geom->Verbosity(verbosity);
181 
184  G4MAGNET::magfield.find(".root") == std::string::npos)
185  {
187  }
188  se->registerSubsystem(geom);
189  #endif
190 
191 }
192 
194 {
196  // processes the TrkrHits to make clusters, then reconstruct tracks and vertices
197 
198  //---------------
199  // Fun4All server
200  //---------------
201 
203 
204  //----------------------------------------------------------------------------
205  // Tracking
206  // Sections 1, 2 and 3 are alternatives to each other
207  // Section 1: Normal Acts tracking chain, with options for truth seeding
208  // Section 2: Truth track seeding with Acts fitting
209  // Section 3: Genfit tracking chain with option for truth track seeding
210  //------------------------------------------------------------------------------
211 
212  //====================
213  // Common to all sections
214  // Silicon seeding
215  //=====================
216 
217  // Assemble silicon clusters into track stubs - needed for initial vertex finding
218  //============================================================
220  {
221 
222  // For the silicon, for each truth particle, create a track and associate clusters with it using truth information, write to silicon track map
223  // track stubs are given the location of the truth vertex in this module
224  PHTruthTrackSeeding* pat_rec = new PHTruthTrackSeeding("PHTruthTrackSeedingSilicon");
225  pat_rec->Verbosity(verbosity);
226  pat_rec->set_track_map_name("SvtxSiliconTrackMap");
227  pat_rec->set_min_layer(0);
229 
230  se->registerSubsystem(pat_rec);
231  }
232  else
233  {
234  PHActsSiliconSeeding* silicon_Seeding = new PHActsSiliconSeeding();
235  silicon_Seeding->Verbosity(verbosity);
236  silicon_Seeding->fieldMapName(G4MAGNET::magfield);
237  se->registerSubsystem(silicon_Seeding);
238  }
239 
240  //================================================
241  // Section 1: Acts chain of track propagation and final fitting
242  //================================================
244  {
245  // TPC track seeding (finds all clusters in TPC for tracks)
246  //============================================
248  {
249  // For the TPC, for each truth particle, create a track and associate clusters with it using truth information, write to Svtx track map
250  // track stubs are given the position odf the truth vertex in this module
251  PHTruthTrackSeeding* pat_rec = new PHTruthTrackSeeding("PHTruthTrackSeedingTpc");
252  pat_rec->Verbosity(verbosity);
253  pat_rec->set_track_map_name("SvtxTrackMap");
256 
257  se->registerSubsystem(pat_rec);
258  }
259  else
260  {
261  std::cout << "Using normal TPC track seeding " << std::endl;
262 
263  // TPC track seeding from data
265  {
266  std::cout << " Using PHTpcTracker track seeding " << std::endl;
267 
268  PHTpcTracker* tracker = new PHTpcTracker("PHTpcTracker");
269  tracker->set_seed_finder_options(3.0, M_PI / 8, 10, 6.0, M_PI / 8, 5, 1); // two-pass CA seed params
270  tracker->set_seed_finder_optimization_remove_loopers(true, 20.0, 10000.0); // true if loopers not needed
271  tracker->set_track_follower_optimization_helix(true); // false for quality, true for speed
272  tracker->set_track_follower_optimization_precise_fit(false); // true for quality, false for speed
273  tracker->enable_json_export(false); // save event as json, filename is automatic and stamped by current time in ms
274  tracker->enable_vertexing(false); // rave vertexing is pretty slow at large multiplicities...
275  tracker->Verbosity(verbosity);
276  se->registerSubsystem(tracker);
277  }
279  {
280  std::cout << " Using PHHybridSeeding track seeding " << std::endl;
281 
282  PHHybridSeeding* hseeder = new PHHybridSeeding("PHHybridSeeding");
284  hseeder->setSearchRadius(3.,6.); // mm (iter1, iter2)
285  hseeder->setSearchAngle(M_PI/8.,M_PI/8.); // radians (iter1, iter2)
286  hseeder->setMinTrackSize(10,5); // (iter1, iter2)
287  hseeder->setNThreads(1);
288  hseeder->Verbosity(verbosity);
289  se->registerSubsystem(hseeder);
290  }
291  else
292  {
293  std::cout << " Using PHCASeeding track seeding " << std::endl;
294 
295  auto seeder = new PHCASeeding("PHCASeeding");
296  seeder->set_field_dir(G4MAGNET::magfield_rescale); // to get charge sign right
297  if(G4MAGNET::magfield.find("3d") != std::string::npos)
298  { seeder->set_field_dir(-1*G4MAGNET::magfield_rescale); }
299  seeder->Verbosity(verbosity);
300  seeder->SetLayerRange(7, 55);
301  seeder->SetSearchWindow(0.01, 0.02); // (eta width, phi width)
302  seeder->SetMinHitsPerCluster(0);
303  if(G4TRACKING::use_propagator) seeder->SetMinClustersPerTrack(3);
304  else seeder->SetMinClustersPerTrack(20);
305  seeder->useConstBField(false);
306  seeder->useFixedClusterError(true);
307  se->registerSubsystem(seeder);
308 
310  {
311  PHTpcTrackSeedCircleFit* vtxassoc2 = new PHTpcTrackSeedCircleFit("PrePropagatorPHTpcTrackSeedCircleFit");
312  vtxassoc2->Verbosity(verbosity);
313  se->registerSubsystem(vtxassoc2);
314 
315  std::cout << " Using PHSimpleKFProp propagator " << std::endl;
316  PHSimpleKFProp* cprop = new PHSimpleKFProp("PHSimpleKFProp");
318  if(G4MAGNET::magfield.find("3d") != std::string::npos)
320  cprop->useConstBField(false);
321  cprop->useFixedClusterError(true);
322  cprop->set_max_window(5.);
323  cprop->Verbosity(verbosity);
324  se->registerSubsystem(cprop);
325  }
326  }
327  }
328 
329  // Associate TPC track stubs with silicon and Micromegas
330  //=============================================
331 
332  // This does not care which seeder is used
333  // It refines the phi and eta of the TPC tracklet prior to matching with the silicon tracklet
335  vtxassoc->Verbosity(verbosity);
336  se->registerSubsystem(vtxassoc);
337 
338  // Choose the best duplicate TPC track seed
339  PHGhostRejection *ghosts= new PHGhostRejection();
340  ghosts->Verbosity(verbosity);
341  se->registerSubsystem(ghosts);
342 
343  // Silicon cluster matching to TPC track seeds
345  {
346  std::cout << " Using truth Si matching " << std::endl;
347  // use truth particle matching in TPC to assign clusters in silicon to TPC tracks from CA seeder
348  // intended only for diagnostics
350  silicon_assoc->Verbosity(verbosity);
351  se->registerSubsystem(silicon_assoc);
352  }
353  else
354  {
355  std::cout << " Using stub matching for Si matching " << std::endl;
356 
357  // The normal silicon association methods
358  // start with a complete TPC track seed from one of the CA seeders
359 
360  // Match the TPC track stubs from the CA seeder to silicon track stubs from PHSiliconTruthTrackSeeding
362  silicon_match->Verbosity(verbosity);
363  silicon_match->set_field(G4MAGNET::magfield);
367  {
369  // search windows for initial matching with distortions
370  // tuned values are 0.04 and 0.008 in distorted events
371  silicon_match->set_phi_search_window(0.04);
372  silicon_match->set_eta_search_window(0.008);
373  }
374  else
375  {
376  // after distortion corrections and rerunning clustering, default tuned values are 0.02 and 0.004 in low occupancy events
377  silicon_match->set_phi_search_window(0.03);
378  silicon_match->set_eta_search_window(0.005);
379  }
380  silicon_match->set_test_windows_printout(false); // used for tuning search windows only
381  se->registerSubsystem(silicon_match);
382  }
383 
384  // Associate Micromegas clusters with the tracks
386  {
387  std::cout << " Using Micromegas matching " << std::endl;
388 
389  // Match TPC track stubs from CA seeder to clusters in the micromegas layers
391  mm_match->Verbosity(verbosity);
394  {
395  // calibration pass with distorted tracks
397  // configuration is potentially with different search windows
398  mm_match->set_rphi_search_window_lyr1(0.2);
399  mm_match->set_rphi_search_window_lyr2(13.0);
400  mm_match->set_z_search_window_lyr1(26.0);
401  mm_match->set_z_search_window_lyr2(0.2);
402  }
403  else
404  {
405  // baseline configuration is (0.2, 13.0, 26, 0.2) and is the default
406  mm_match->set_rphi_search_window_lyr1(0.2);
407  mm_match->set_rphi_search_window_lyr2(13.0);
408  mm_match->set_z_search_window_lyr1(26.0);
409  mm_match->set_z_search_window_lyr2(0.2);
410  }
411  mm_match->set_min_tpc_layer(38); // layer in TPC to start projection fit
412  mm_match->set_test_windows_printout(false); // used for tuning search windows only
413  se->registerSubsystem(mm_match);
414  }
415 
416  // Final fitting of tracks using Acts Kalman Filter
417  //=====================================
418 
419  std::cout << " Using Acts track fitting " << std::endl;
420 
421  PHActsTrkFitter* actsFit = new PHActsTrkFitter("PHActsFirstTrkFitter");
422  actsFit->Verbosity(verbosity);
423  actsFit->doTimeAnalysis(false);
426  se->registerSubsystem(actsFit);
427 
429  {
431  auto residuals = new PHTpcResiduals;
433  residuals->Verbosity(verbosity);
434  se->registerSubsystem(residuals);
435  }
436 
437  // Choose the best silicon matched track for each TPC track seed
438  PHTrackCleaner *cleaner= new PHTrackCleaner();
439  cleaner->Verbosity(verbosity);
440  se->registerSubsystem(cleaner);
441 
443  {
444  PHTruthVertexing *vtxing = new PHTruthVertexing();
445  vtxing->associate_tracks(true);
446  std::string trackmapnamef = "SvtxTrackMap";
447  vtxing->set_track_map_name(trackmapnamef);
448  se->registerSubsystem(vtxing);
449  }
450  else
451  {
452  PHSimpleVertexFinder *vtxfinder = new PHSimpleVertexFinder();
453  vtxfinder->Verbosity(verbosity);
454  se->registerSubsystem(vtxfinder);
455  }
456 
459  vtxProp->Verbosity(verbosity);
460  se->registerSubsystem(vtxProp);
461 
462  }
463 
464  //=========================================================
465  // Section 2: Full truth track finding with Acts final fitting
466  //=========================================================
468  {
469  std::cout << " Using full truth track seeding for Acts" << std::endl;
470 
471  // For each truth particle, create a track and associate clusters with it using truth information, write to Svtx track map
472  // track stubs are given the position of the truth vertex in this module, but Genfit does not care
473  // Includes clusters for TPC, silicon and MM's
474  PHTruthTrackSeeding* pat_rec = new PHTruthTrackSeeding("PHTruthTrackSeedingFull");
475  pat_rec->Verbosity(verbosity);
476  pat_rec->set_track_map_name("SvtxTrackMap");
477  se->registerSubsystem(pat_rec);
478 
479  // Fitting of tracks using Acts Kalman Filter
480  //==================================
481 
482  std::cout << " Using Acts track fitting " << std::endl;
483 
484  PHActsTrkFitter* actsFit = new PHActsTrkFitter("PHActsFirstTrkFitter");
485  actsFit->Verbosity(verbosity);
486  actsFit->doTimeAnalysis(false);
489  se->registerSubsystem(actsFit);
490 
492  {
494  auto residuals = new PHTpcResiduals;
496  residuals->Verbosity(verbosity);
497  se->registerSubsystem(residuals);
498  }
499 
501  finder->Verbosity(verbosity);
502  se->registerSubsystem(finder);
503 
504  }
505 
506  //=========================================================
507  // Section 3: Genfit track propagation and final fitting
508  // Silicon association is by track propagation
509  //========================================================
511  {
512  // Track seeding
513  //============
515  {
516  std::cout << " Using truth track seeding for Genfit" << std::endl;
517 
518  // For each truth particle, create a track and associate clusters with it using truth information, write to Svtx track map
519  // tracks are given the position of the truth particle vertex in this module, but Genfit does not care
520  // Includes clusters for TPC, silicon and MM's
521  PHTruthTrackSeeding* pat_rec = new PHTruthTrackSeeding("PHTruthTrackSeedingFull");
522  pat_rec->Verbosity(verbosity);
523  pat_rec->set_track_map_name("SvtxTrackMap");
524  se->registerSubsystem(pat_rec);
525  }
526  else
527  {
528  // need TPC track seeds to give to GenfitTrkProp
529 
530  // TPC track seeding from data
532  {
533  std::cout << " Using PHTpcTracker track seeding " << std::endl;
534 
535  PHTpcTracker* tracker = new PHTpcTracker("PHTpcTracker");
536  tracker->set_seed_finder_options(3.0, M_PI / 8, 10, 6.0, M_PI / 8, 5, 1); // two-pass CA seed params
537  tracker->set_seed_finder_optimization_remove_loopers(true, 20.0, 10000.0); // true if loopers not needed
538  tracker->set_track_follower_optimization_helix(true); // false for quality, true for speed
539  tracker->set_track_follower_optimization_precise_fit(false); // true for quality, false for speed
540  tracker->enable_json_export(false); // save event as json, filename is automatic and stamped by current time in ms
541  tracker->enable_vertexing(false); // rave vertexing is pretty slow at large multiplicities...
542  tracker->Verbosity(verbosity);
543  se->registerSubsystem(tracker);
544  }
546  {
547  std::cout << " Using PHHybridSeeding track seeding " << std::endl;
548  PHHybridSeeding* hseeder = new PHHybridSeeding("PHHybridSeeding");
550  hseeder->setSearchRadius(3.,6.); // mm (iter1, iter2)
551  hseeder->setSearchAngle(M_PI/8.,M_PI/8.); // radians (iter1, iter2)
552  hseeder->setMinTrackSize(10,5); // (iter1, iter2)
553  hseeder->setNThreads(1);
554  hseeder->Verbosity(verbosity);
555  se->registerSubsystem(hseeder);
556  }
557  else
558  {
559  std::cout << " Using PHCASeeding track seeding " << std::endl;
560 
561  auto seeder = new PHCASeeding("PHCASeeding");
562  seeder->set_field_dir(G4MAGNET::magfield_rescale); // to get charge sign right
563  seeder->Verbosity(verbosity);
564  seeder->SetLayerRange(7, 55);
565  seeder->SetSearchWindow(0.01, 0.02); // (eta width, phi width)
566  seeder->SetMinHitsPerCluster(2);
567  seeder->SetMinClustersPerTrack(20);
568  se->registerSubsystem(seeder);
569  }
570 
571  std::cout << " Using PHGenFitTrkProp " << std::endl;
572 
573  // Association of TPC track seeds with all TPC layers, silicon layers and Micromegas layers
574  // Find all clusters associated with each seed track
575  auto track_prop = new PHGenFitTrkProp("PHGenFitTrkProp",
580  track_prop->Verbosity(verbosity);
581  se->registerSubsystem(track_prop);
582  for (int i = 0; i < G4INTT::n_intt_layer; i++)
583  {
584  // strip length is along theta
585  track_prop->set_max_search_win_theta_intt(i, 0.200);
586  track_prop->set_min_search_win_theta_intt(i, 0.200);
587  track_prop->set_max_search_win_phi_intt(i, 0.0050);
588  track_prop->set_min_search_win_phi_intt(i, 0.000);
589  }
590  }
591 
592  std::cout << " Using Genfit track fitting " << std::endl;
593 
594  auto kalman = new PHGenFitTrkFitter;
595  kalman->Verbosity(verbosity);
596  kalman->set_vertexing_method(G4TRACKING::vmethod);
597  kalman->set_use_truth_vertex(false);
598 
599  // in space charge calibration mode, disable the tpc
601  {
602  std::cout << "Tracking_reco - Disabling TPC layers from kalman filter" << std::endl;
603  for( int layer = 7; layer < 23; ++layer ) { kalman->disable_layer( layer ); }
604  for( int layer = 23; layer < 39; ++layer ) { kalman->disable_layer( layer ); }
605  for( int layer = 39; layer < 55; ++layer ) { kalman->disable_layer( layer ); }
606  }
607 
608  se->registerSubsystem(kalman);
609 
611  {
612  // Genfit based Tpc space charge Reconstruction
613  auto tpcSpaceChargeReconstruction = new TpcSpaceChargeReconstruction;
614  tpcSpaceChargeReconstruction->set_outputfile( G4TRACKING::SC_ROOTOUTPUT_FILENAME );
615  se->registerSubsystem(tpcSpaceChargeReconstruction);
616  }
617 
618  }
619 
620  //==================================
621  // Common to all sections
622  //==================================
623 
624  // Final vertex finding and fitting with RAVE
625  //==================================
627  {
628  PHRaveVertexing* rave = new PHRaveVertexing();
629  // rave->set_vertexing_method("kalman-smoothing:1");
630  rave->set_over_write_svtxvertexmap(false);
631  rave->set_svtxvertexmaprefit_node_name("SvtxVertexMapRave");
632  rave->Verbosity(verbosity);
633  se->registerSubsystem(rave);
634  }
635 
636  // Track Projections
637  //===============
639  projection->Verbosity(verbosity);
640  se->registerSubsystem(projection);
641 
642  return;
643 }
644 
645 void Tracking_Eval(const std::string& outputfile)
646 {
648 
649  //---------------
650  // Fun4All server
651  //---------------
652 
654 
655  //----------------
656  // Tracking evaluation
657  //----------------
658  SvtxEvaluator* eval;
659  eval = new SvtxEvaluator("SVTXEVALUATOR", outputfile, "SvtxTrackMap",
664  eval->do_cluster_eval(true);
665  eval->do_g4hit_eval(true);
666  eval->do_hit_eval(true); // enable to see the hits that includes the chamber physics...
667  eval->do_gpoint_eval(true);
668  eval->do_vtx_eval_light(true);
669  eval->do_eval_light(true);
672  eval->scan_for_embedded(true); // take all tracks if false - take only embedded tracks if true
673  eval->scan_for_primaries(true); // defaults to only thrown particles for ntp_gtrack
674  eval->Verbosity(verbosity);
675  se->registerSubsystem(eval);
676 
677  return;
678 }
679 
681 {
683 
684  //---------------
685  // Fun4All server
686  //---------------
687 
689 
691  // qa->addEmbeddingID(2);
692  qa->Verbosity(verbosity);
693  se->registerSubsystem(qa);
694 
696  // qa2->addEmbeddingID(2);
697  qa2->Verbosity(verbosity);
698  se->registerSubsystem(qa2);
699 
701  {
703  // qav->addEmbeddingID(2);
704  qav->Verbosity(verbosity);
705  qav->setVertexMapName("SvtxVertexMapRave");
706  se->registerSubsystem(qav);
707  }
708 
709  // Acts Kalman Filter vertex finder
710  //=================================
712  {
713 #if __cplusplus >= 201703L
714 
716  // qav->addEmbeddingID(2);
717  qav->Verbosity(verbosity);
718  qav->setVertexMapName("SvtxVertexMapActs");
719  se->registerSubsystem(qav);
720 #endif
721  }
722 
723  if (Input::UPSILON)
724  {
726 
727  for (int id : Input::UPSILON_EmbedIds)
728  {
729  qa->addEmbeddingID(id);
730  }
731  se->registerSubsystem(qa);
732  }
733 }
734 
735 #endif