File indexing completed on 2025-12-17 09:24:03
0001 #ifndef MACRO_TRKRRECO_COSMICS_C
0002 #define MACRO_TRKRRECO_COSMICS_C
0003
0004 #include <GlobalVariables.C>
0005
0006 #include <G4_TrkrVariables.C>
0007
0008 #include <g4eval/SvtxTruthRecoTableEval.h>
0009
0010 #include <trackingdiagnostics/TrackSeedTrackMapConverter.h>
0011
0012 #include <trackreco/MakeActsGeometry.h>
0013 #include <trackreco/PHActsTrkFitter.h>
0014 #include <trackreco/PHActsVertexPropagator.h>
0015 #include <trackreco/PHCosmicSeeder.h>
0016 #include <trackreco/PHCosmicSiliconPropagator.h>
0017 #include <trackreco/PHCosmicTrackMerger.h>
0018 #include <trackreco/PHCosmicsTrkFitter.h>
0019 #include <trackreco/PHMicromegasTpcTrackMatching.h>
0020 #include <trackreco/PHSiliconHelicalPropagator.h>
0021 #include <trackreco/PHSimpleVertexFinder.h>
0022 #include <trackreco/PHTpcDeltaZCorrection.h>
0023 #include <trackreco/PHTrackCleaner.h>
0024 #include <trackreco/SecondaryVertexFinder.h>
0025
0026 #include <tpc/TpcLoadDistortionCorrection.h>
0027
0028 #include <tpccalib/PHTpcResiduals.h>
0029
0030 #include <trackermillepedealignment/HelicalFitter.h>
0031 #include <trackermillepedealignment/MakeMilleFiles.h>
0032
0033 #include <fun4all/Fun4AllServer.h>
0034
0035 #include <string>
0036
0037 R__LOAD_LIBRARY(libtrack_reco.so)
0038 R__LOAD_LIBRARY(libtpccalib.so)
0039 R__LOAD_LIBRARY(libtpc.so)
0040 R__LOAD_LIBRARY(libtrackeralign.so)
0041 R__LOAD_LIBRARY(libTrackingDiagnostics.so)
0042
0043 void convert_seeds()
0044 {
0045 Fun4AllServer *se = Fun4AllServer::instance();
0046 int verbosity = std::max(Enable::VERBOSITY, Enable::TRACKING_VERBOSITY);
0047
0048 TrackSeedTrackMapConverter *converter = new TrackSeedTrackMapConverter();
0049
0050
0051 converter->setTrackSeedName("SvtxTrackSeedContainer");
0052 converter->Verbosity(verbosity);
0053 converter->cosmics();
0054 converter->setFieldMap(G4MAGNET::magfield_tracking);
0055 se->registerSubsystem(converter);
0056 }
0057
0058 void Tracking_Reco_TrackSeed()
0059 {
0060
0061 int verbosity = std::max(Enable::VERBOSITY, Enable::TRACKING_VERBOSITY);
0062
0063
0064 auto *se = Fun4AllServer::instance();
0065
0066 PHCosmicSeeder *seeder = new PHCosmicSeeder;
0067 seeder->adcCut(175.);
0068 seeder->Verbosity(verbosity);
0069 se->registerSubsystem(seeder);
0070
0071 PHCosmicSiliconPropagator *hprop = new PHCosmicSiliconPropagator("HelicalPropagator");
0072 hprop->Verbosity(verbosity);
0073 double fieldstrength = std::numeric_limits<double>::quiet_NaN();
0074 bool ConstField = isConstantField(G4MAGNET::magfield_tracking, fieldstrength);
0075 if (ConstField && fieldstrength < 0.1)
0076 {
0077 hprop->zero_field();
0078 }
0079 hprop->set_dca_z_cut(2);
0080 hprop->set_dca_xy_cut(1.);
0081 se->registerSubsystem(hprop);
0082
0083
0084
0085 auto *merger = new PHCosmicTrackMerger("PHCosmicMerger");
0086 merger->Verbosity(verbosity);
0087 if (ConstField && fieldstrength < 0.1)
0088 {
0089 merger->zero_field();
0090 }
0091 se->registerSubsystem(merger);
0092
0093 PHCosmicSiliconPropagator *hprop2 = new PHCosmicSiliconPropagator("HelicalPropagator2");
0094 hprop2->Verbosity(verbosity);
0095 hprop2->resetSvtxSeedContainer();
0096 if (ConstField && fieldstrength < 0.1)
0097 {
0098 hprop2->zero_field();
0099 }
0100 hprop2->set_dca_z_cut(2.);
0101 hprop2->set_dca_xy_cut(0.5);
0102
0103 se->registerSubsystem(hprop2);
0104
0105 auto *merger2 = new PHCosmicTrackMerger("PHCosmicMerger2");
0106 merger2->Verbosity(0);
0107 merger2->dca_xycut(0.5);
0108 merger2->dca_rzcut(1);
0109 if (ConstField && fieldstrength < 0.1)
0110 {
0111 merger2->zero_field();
0112 }
0113 se->registerSubsystem(merger2);
0114 }
0115
0116 void vertexing()
0117 {
0118 Fun4AllServer *se = Fun4AllServer::instance();
0119 int verbosity = std::max(Enable::VERBOSITY, Enable::TRACKING_VERBOSITY);
0120
0121 auto *vtxfinder = new PHSimpleVertexFinder;
0122 vtxfinder->Verbosity(verbosity);
0123 se->registerSubsystem(vtxfinder);
0124 }
0125
0126 void Tracking_Reco_TrackFit()
0127 {
0128 int verbosity = std::max(Enable::VERBOSITY, Enable::TRACKING_VERBOSITY);
0129 auto *se = Fun4AllServer::instance();
0130
0131
0132 auto *deltazcorr = new PHTpcDeltaZCorrection;
0133 deltazcorr->Verbosity(verbosity);
0134 se->registerSubsystem(deltazcorr);
0135
0136
0137 auto *actsFit = new PHCosmicsTrkFitter;
0138 actsFit->Verbosity(verbosity);
0139
0140
0141
0142 actsFit->useActsEvaluator(true);
0143 actsFit->useOutlierFinder(false);
0144 actsFit->setFieldMap(G4MAGNET::magfield_tracking);
0145 se->registerSubsystem(actsFit);
0146 }
0147
0148 void alignment(const std::string &datafilename = "mille_output_data_file",
0149 const std::string &steeringfilename = "mille_steer")
0150 {
0151 Fun4AllServer *se = Fun4AllServer::instance();
0152 int verbosity = std::max(Enable::VERBOSITY, Enable::TRACKING_VERBOSITY);
0153
0154 auto *mille = new MakeMilleFiles;
0155 mille->Verbosity(verbosity);
0156 mille->set_datafile_name(datafilename + ".bin");
0157 mille->set_steeringfile_name(steeringfilename + ".txt");
0158
0159 se->registerSubsystem(mille);
0160
0161 auto *helical = new HelicalFitter;
0162 helical->Verbosity(0);
0163 helical->set_datafile_name(datafilename + "_helical.bin");
0164 helical->set_steeringfile_name(steeringfilename + "_helical.txt");
0165
0166 se->registerSubsystem(helical);
0167 }
0168
0169 void Tracking_Reco()
0170 {
0171 Tracking_Reco_TrackSeed();
0172 if (G4TRACKING::convert_seeds_to_svtxtracks)
0173 {
0174 convert_seeds();
0175 }
0176 else
0177 {
0178 Tracking_Reco_TrackFit();
0179 }
0180
0181 vertexing();
0182
0183 if (G4TRACKING::use_alignment)
0184 {
0185 alignment();
0186 }
0187 }
0188
0189 #endif