Back to home page

sPhenix code displayed by LXR

 
 

    


File indexing completed on 2025-08-03 08:20:27

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