Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-10-17 22:59:08

0001 #include "RecoTracker/MkFitCore/standalone/ConfigStandalone.h"
0002 #include "RecoTracker/MkFitCore/interface/TrackerInfo.h"
0003 #include "RecoTracker/MkFitCore/interface/IterationConfig.h"
0004 
0005 // For plugin loader
0006 #include <dlfcn.h>
0007 #include <sys/stat.h>
0008 #include <cstdlib>
0009 
0010 namespace mkfit {
0011 
0012   namespace Config {
0013 
0014     TrackerInfo TrkInfo;
0015     IterationsInfo ItrInfo;
0016 
0017     std::string geomPlugin = "CylCowWLids";
0018 
0019     int nTracks = 10000;
0020     int nEvents = 20;
0021     int nItersCMSSW = 0;
0022     bool loopOverFile = false;
0023 
0024     seedOpts seedInput = simSeeds;
0025     cleanOpts seedCleaning = noCleaning;
0026 
0027     bool readCmsswTracks = false;
0028 
0029     bool dumpForPlots = false;
0030 
0031     bool cf_seeding = false;
0032     bool cf_fitting = false;
0033 
0034     bool quality_val = false;
0035     bool sim_val_for_cmssw = false;
0036     bool sim_val = false;
0037     bool cmssw_val = false;
0038     bool fit_val = false;
0039     bool readSimTrackStates = false;
0040     bool inclusiveShorts = false;
0041     bool keepHitInfo = false;
0042     bool tryToSaveSimInfo = false;
0043     matchOpts cmsswMatchingFW = hitBased;
0044     matchOpts cmsswMatchingBK = trkParamBased;
0045 
0046     bool useDeadModules = false;
0047 
0048     // number of hits per task for finding seeds
0049     int numHitsPerTask = 32;
0050 
0051     bool mtvLikeValidation = false;
0052     bool mtvRequireSeeds = false;
0053     int cmsSelMinLayers = 12;
0054     int nMinFoundHits = 10;
0055 
0056     bool kludgeCmsHitErrors = false;
0057     bool backwardFit = false;
0058     bool backwardSearch = true;
0059 
0060     int numThreadsSimulation = 12;
0061 
0062     int finderReportBestOutOfN = 1;
0063 
0064     bool includePCA = false;
0065 
0066     // ================================================================
0067 
0068     bool silent = false;
0069     bool json_verbose = false;
0070     bool json_dump_before = false;
0071     bool json_dump_after = false;
0072     std::vector<std::string> json_patch_filenames;
0073     std::vector<std::string> json_load_filenames;
0074     std::string json_save_iters_fname_fmt;
0075     bool json_save_iters_include_iter_info_preamble = false;
0076 
0077     // ================================================================
0078 
0079     void recalculateDependentConstants() {}
0080 
0081   }  // namespace Config
0082 
0083   //==============================================================================
0084   // Geometry / Configuration Plugin Loader
0085   //==============================================================================
0086 
0087   namespace {
0088     const char *search_path[] = {"", "../Geoms/", "Geoms/", "../", nullptr};
0089     typedef void (*TrackerInfoCreator_foo)(TrackerInfo &, IterationsInfo &, bool verbose);
0090   }  // namespace
0091 
0092   void execTrackerInfoCreatorPlugin(const std::string &base, TrackerInfo &ti, IterationsInfo &ii, bool verbose) {
0093     const std::string soname = base + ".so";
0094     const std::string binname = base + ".bin";
0095     struct stat st;
0096 
0097     int si = 0;
0098     while (search_path[si]) {
0099       std::string path;
0100       const char *envpath = std::getenv("MKFIT_BASE");
0101       if (envpath != nullptr) {
0102         path += envpath;
0103         path += "/";
0104       }
0105       path += search_path[si];
0106       std::string sopath = path + soname;
0107       if (stat(sopath.c_str(), &st) == 0) {
0108         printf("execTrackerInfoCreatorPlugin processing '%s'\n", sopath.c_str());
0109 
0110         void *h = dlopen(sopath.c_str(), RTLD_LAZY);
0111         if (!h) {
0112           perror("dlopen failed");
0113           fprintf(stderr, "dlerror:\n%s\n", dlerror());
0114           exit(2);
0115         }
0116 
0117         long long *p2f = (long long *)dlsym(h, "TrackerInfoCreator_ptr");
0118         if (!p2f) {
0119           perror("dlsym failed");
0120           exit(2);
0121         }
0122 
0123         std::string binpath = path + binname;
0124         int binsr = stat(binpath.c_str(), &st);
0125         printf("execTrackerInfoCreatorPlugin has%s found TrackerInfo binary file '%s'\n",
0126                binsr ? " NOT" : "",
0127                binpath.c_str());
0128         if (binsr == 0)
0129           ti.read_bin_file(binpath);
0130 
0131         TrackerInfoCreator_foo foo = (TrackerInfoCreator_foo)(*p2f);
0132         foo(ti, ii, verbose);
0133 
0134         // level 2: print shapes and modules, precision 8
0135         // ti.print_tracker(2, 8);
0136 
0137         return;
0138       }
0139 
0140       ++si;
0141     }
0142 
0143     fprintf(stderr, "TrackerInfo plugin '%s' not found in search path.\n", soname.c_str());
0144     exit(2);
0145   }
0146 
0147   namespace internal {
0148     std::vector<DeadVec> deadvectors;
0149   }
0150 
0151 }  // namespace mkfit