File indexing completed on 2025-12-17 09:24:07
0001
0002
0003
0004
0005
0006
0007
0008 #include <GlobalVariables.C>
0009
0010 #include <G4_ActsGeom.C>
0011 #include <G4_Global.C>
0012 #include <G4_Magnet.C>
0013 #include <G4_Mbd.C>
0014 #include <QA.C>
0015 #include <Trkr_TpcReadoutInit.C>
0016 #include <Trkr_Clustering.C>
0017 #include <Trkr_LaserClustering.C>
0018 #include <Trkr_Reco.C>
0019
0020 #include <eventdisplay/TrackerEventDisplay.h>
0021
0022 #include <cdbobjects/CDBTTree.h>
0023
0024 #include <trackingqa/InttClusterQA.h>
0025 #include <trackingqa/MicromegasClusterQA.h>
0026 #include <trackingqa/MvtxClusterQA.h>
0027 #include <trackingqa/TpcClusterQA.h>
0028
0029 #include <trackingdiagnostics/TrackResiduals.h>
0030 #include <trackingdiagnostics/TrkrNtuplizer.h>
0031
0032 #include <trackreco/AzimuthalSeeder.h>
0033
0034 #include <ffamodules/CDBInterface.h>
0035
0036 #include <fun4all/Fun4AllDstInputManager.h>
0037 #include <fun4all/Fun4AllDstOutputManager.h>
0038 #include <fun4all/Fun4AllInputManager.h>
0039 #include <fun4all/Fun4AllOutputManager.h>
0040 #include <fun4all/Fun4AllRunNodeInputManager.h>
0041 #include <fun4all/Fun4AllServer.h>
0042 #include <fun4all/Fun4AllUtils.h>
0043
0044 #include <phool/recoConsts.h>
0045
0046 #pragma GCC diagnostic push
0047
0048 #pragma GCC diagnostic ignored "-Wundefined-internal"
0049
0050 #include <kfparticle_sphenix/KFParticle_sPHENIX.h>
0051
0052 #pragma GCC diagnostic pop
0053
0054 R__LOAD_LIBRARY(libkfparticle_sphenix.so)
0055
0056 R__LOAD_LIBRARY(libfun4all.so)
0057 R__LOAD_LIBRARY(libffamodules.so)
0058 R__LOAD_LIBRARY(libphool.so)
0059 R__LOAD_LIBRARY(libcdbobjects.so)
0060 R__LOAD_LIBRARY(libmvtx.so)
0061 R__LOAD_LIBRARY(libintt.so)
0062 R__LOAD_LIBRARY(libtpc.so)
0063 R__LOAD_LIBRARY(libmicromegas.so)
0064 R__LOAD_LIBRARY(libTrackingDiagnostics.so)
0065 R__LOAD_LIBRARY(libtrackingqa.so)
0066 R__LOAD_LIBRARY(libEventDisplay.so)
0067
0068 void Fun4All_FieldOnAllTrackers_KFP(
0069 const int nEvents = 0,
0070 const std::string& tpcfilename = "DST_BEAM_run2pp_new_2023p013-00041989-0000.root",
0071 const std::string& tpcdir = "/sphenix/lustre01/sphnxpro/commissioning/slurp/tpcbeam/run_00041900_00042000/",
0072 const std::string& = "clusters_seeds",
0073 const bool convertSeeds = false)
0074 {
0075
0076 G4TRACKING::convert_seeds_to_svtxtracks = convertSeeds;
0077 std::cout << "Converting to seeds : " << G4TRACKING::convert_seeds_to_svtxtracks << std::endl;
0078 std::pair<int, int>
0079 runseg = Fun4AllUtils::GetRunSegment(tpcfilename);
0080 int runnumber = runseg.first;
0081 int segment = runseg.second;
0082 TpcReadoutInit( runnumber );
0083 std::cout<< " run: " << runnumber
0084 << " samples: " << TRACKING::reco_tpc_maxtime_sample
0085 << " pre: " << TRACKING::reco_tpc_time_presample
0086 << " vdrift: " << G4TPC::tpc_drift_velocity_reco
0087 << std::endl;
0088
0089 std::string outDir = "myKShortReco/";
0090 std::string outputFileName = "outputFile_" + std::to_string(runnumber) + "_" + std::to_string(segment) + ".root";
0091
0092 std::string outputRecoDir = outDir + "inReconstruction/";
0093 std::string makeDirectory = "mkdir -p " + outputRecoDir;
0094 system(makeDirectory.c_str());
0095 std::string outputRecoFile = outputRecoDir + outputFileName;
0096
0097 std::string inputtpcRawHitFile = tpcdir + tpcfilename;
0098 ACTSGEOM::mvtxMisalignment = 100;
0099 ACTSGEOM::inttMisalignment = 100.;
0100 ACTSGEOM::tpotMisalignment = 100.;
0101
0102 auto *se = Fun4AllServer::instance();
0103 se->Verbosity(1);
0104 auto *rc = recoConsts::instance();
0105 rc->set_IntFlag("RUNNUMBER", runnumber);
0106
0107 Enable::CDB = true;
0108 rc->set_StringFlag("CDB_GLOBALTAG", "newcdbtag");
0109 rc->set_uint64Flag("TIMESTAMP", runnumber);
0110 std::string geofile = CDBInterface::instance()->getUrl("Tracking_Geometry");
0111
0112 Fun4AllRunNodeInputManager *ingeo = new Fun4AllRunNodeInputManager("GeoIn");
0113 ingeo->AddFile(geofile);
0114 se->registerInputManager(ingeo);
0115
0116 CDBInterface *cdb = CDBInterface::instance();
0117 std::string tpc_dv_calib_dir = cdb->getUrl("TPC_DRIFT_VELOCITY");
0118 if (tpc_dv_calib_dir.empty())
0119 {
0120 std::cout << "No calibrated TPC drift velocity for Run " << runnumber << ". Use default value " << G4TPC::tpc_drift_velocity_reco << " cm/ns" << std::endl;
0121 }
0122 else
0123 {
0124 CDBTTree *cdbttree = new CDBTTree(tpc_dv_calib_dir);
0125 cdbttree->LoadCalibrations();
0126 G4TPC::tpc_drift_velocity_reco = cdbttree->GetSingleFloatValue("tpc_drift_velocity");
0127 std::cout << "Use calibrated TPC drift velocity for Run " << runnumber << ": " << G4TPC::tpc_drift_velocity_reco << " cm/ns" << std::endl;
0128 }
0129
0130 G4MAGNET::magfield_rescale = 1;
0131 ACTSGEOM::ActsGeomInit();
0132
0133 auto *hitsin = new Fun4AllDstInputManager("InputManager");
0134 hitsin->fileopen(inputtpcRawHitFile);
0135 se->registerInputManager(hitsin);
0136
0137
0138
0139 Tpc_HitUnpacking();
0140 Micromegas_HitUnpacking();
0141
0142
0143
0144
0145 auto *tpcclusterizer = new TpcClusterizer;
0146 tpcclusterizer->Verbosity(0);
0147 tpcclusterizer->set_do_hit_association(G4TPC::DO_HIT_ASSOCIATION);
0148 tpcclusterizer->set_rawdata_reco();
0149 se->registerSubsystem(tpcclusterizer);
0150
0151 Tpc_LaserEventIdentifying();
0152
0153 Micromegas_Clustering();
0154
0155 Tracking_Reco_TrackSeed();
0156
0157 if (G4TRACKING::convert_seeds_to_svtxtracks)
0158 {
0159 auto *converter = new TrackSeedTrackMapConverter;
0160
0161
0162 converter->setTrackSeedName("TpcTrackSeedContainer");
0163 converter->setFieldMap(G4MAGNET::magfield_tracking);
0164 converter->Verbosity(0);
0165 se->registerSubsystem(converter);
0166 }
0167 else
0168 {
0169 auto *deltazcorr = new PHTpcDeltaZCorrection;
0170 deltazcorr->Verbosity(0);
0171 se->registerSubsystem(deltazcorr);
0172
0173
0174 auto *actsFit = new PHActsTrkFitter;
0175 actsFit->Verbosity(0);
0176 actsFit->commissioning(G4TRACKING::use_alignment);
0177
0178 actsFit->fitSiliconMMs(G4TRACKING::SC_CALIBMODE);
0179 actsFit->setUseMicromegas(G4TRACKING::SC_USE_MICROMEGAS);
0180 actsFit->set_pp_mode(TRACKING::pp_mode);
0181 actsFit->set_use_clustermover(true);
0182 actsFit->useActsEvaluator(false);
0183 actsFit->useOutlierFinder(false);
0184 actsFit->setFieldMap(G4MAGNET::magfield_tracking);
0185 se->registerSubsystem(actsFit);
0186 }
0187
0188 PHSimpleVertexFinder *finder = new PHSimpleVertexFinder;
0189 finder->Verbosity(0);
0190 finder->setDcaCut(0.5);
0191 finder->setTrackPtCut(-99999.);
0192 finder->setBeamLineCut(1);
0193 finder->setTrackQualityCut(1000000000);
0194 finder->setNmvtxRequired(3);
0195 finder->setOutlierPairCut(0.1);
0196 se->registerSubsystem(finder);
0197
0198
0199 auto *vtxProp = new PHActsVertexPropagator;
0200 vtxProp->Verbosity(0);
0201 vtxProp->fieldMap(G4MAGNET::magfield_tracking);
0202 se->registerSubsystem(vtxProp);
0203
0204
0205 KFParticle_sPHENIX *kfparticle = new KFParticle_sPHENIX("myKShortReco");
0206 kfparticle->Verbosity(1);
0207 kfparticle->setDecayDescriptor("K_S0 -> pi^+ pi^-");
0208
0209
0210 kfparticle->magFieldFile("FIELDMAP_TRACKING");
0211 kfparticle->getAllPVInfo(false);
0212 kfparticle->allowZeroMassTracks();
0213 kfparticle->useFakePrimaryVertex();
0214
0215 kfparticle->constrainToPrimaryVertex(false);
0216 kfparticle->setMotherIPchi2(FLT_MAX);
0217 kfparticle->setFlightDistancechi2(-1.);
0218 kfparticle->setMinDIRA(-1.1);
0219 kfparticle->setDecayLengthRange(0., FLT_MAX);
0220 kfparticle->setDecayTimeRange(-1*FLT_MAX, FLT_MAX);
0221
0222
0223 kfparticle->setMinMVTXhits(0);
0224 kfparticle->setMinTPChits(20);
0225 kfparticle->setMinimumTrackPT(-1.);
0226 kfparticle->setMaximumTrackPTchi2(FLT_MAX);
0227 kfparticle->setMinimumTrackIPchi2(-1.);
0228 kfparticle->setMinimumTrackIP(-1.);
0229 kfparticle->setMaximumTrackchi2nDOF(20.);
0230
0231
0232 kfparticle->setMaximumVertexchi2nDOF(50);
0233 kfparticle->setMaximumDaughterDCA(1.);
0234
0235
0236 kfparticle->setMotherPT(0);
0237 kfparticle->setMinimumMass(0.300);
0238 kfparticle->setMaximumMass(0.700);
0239 kfparticle->setMaximumMotherVertexVolume(0.1);
0240
0241 kfparticle->setOutputName(outputRecoFile);
0242
0243 se->registerSubsystem(kfparticle);
0244
0245 se->run(nEvents);
0246 se->End();
0247
0248 std::ifstream file(outputRecoFile);
0249 if (file.good())
0250 {
0251 std::string moveOutput = "mv " + outputRecoFile + " " + outDir;
0252 system(moveOutput.c_str());
0253 }
0254
0255 delete se;
0256 std::cout << "Finished" << std::endl;
0257 gSystem->Exit(0);
0258 }