Back to home page

sPhenix code displayed by LXR

 
 

    


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   // Default set to full SvtxTrackSeeds. Can be set to
0050   // SiliconTrackSeedContainer or TpcTrackSeedContainer
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   // set up verbosity
0061   int verbosity = std::max(Enable::VERBOSITY, Enable::TRACKING_VERBOSITY);
0062 
0063   // get fun4all server instance
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   // Associate Micromegas clusters with the tracks
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   // correct clusters for particle propagation in TPC
0132   auto *deltazcorr = new PHTpcDeltaZCorrection;
0133   deltazcorr->Verbosity(verbosity);
0134   se->registerSubsystem(deltazcorr);
0135 
0136   // perform final track fit with ACTS
0137   auto *actsFit = new PHCosmicsTrkFitter;
0138   actsFit->Verbosity(verbosity);
0139   // actsFit->commissioning(G4TRACKING::use_alignment);
0140   // actsFit->set_cluster_version(G4TRACKING::cluster_version);
0141   //  in calibration mode, fit only Silicons and Micromegas hits
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   // mille->set_cluster_version(G4TRACKING::cluster_version);
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   // helical->set_cluster_version(G4TRACKING::cluster_version);
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