From c3c2fda5eb03c6e625db23841c62659867276072 Mon Sep 17 00:00:00 2001 From: "alberica.toia@cern.ch" <alberica.toia@cern.ch> Date: Thu, 8 Apr 2021 11:01:10 +0200 Subject: [PATCH] Adding reco macro and geo par --- macro/beamtime/cosy2019/cosy2019_process.C | 102 +++++++++++++----- .../cosy2019/sts_hodo_v19a_cosy_geo.root | Bin 0 -> 11895 bytes 2 files changed, 74 insertions(+), 28 deletions(-) create mode 100644 macro/beamtime/cosy2019/sts_hodo_v19a_cosy_geo.root diff --git a/macro/beamtime/cosy2019/cosy2019_process.C b/macro/beamtime/cosy2019/cosy2019_process.C index c553d67eef..c2a8c82f28 100644 --- a/macro/beamtime/cosy2019/cosy2019_process.C +++ b/macro/beamtime/cosy2019/cosy2019_process.C @@ -8,13 +8,13 @@ // -------------------------------------------------------------------------- -void cosy2019_process( - Int_t nTimeslices = -1, - UInt_t uRunId = 0, - TString outDir = "data", - TString dataSet = "data/cosy2019", // Data set for file names - Bool_t eventMode = kFALSE // Event-by-event mode -) { +void cosy2019_process() { + + Int_t nTimeslices = -1; + TString inFile = "unp_cosy_0025.root"; + TString parFile = "unp_cosy_params_0025.root"; + TString outFile = "0025.rec.root"; + TString geoFile = "sts_hodo_v19a_cosy_geo.root"; // --- Logger settings ---------------------------------------------------- @@ -30,12 +30,12 @@ void cosy2019_process( // ----- In- and output file names ------------------------------------ - TString runId = TString::Format("%04u", uRunId); - TString inFile = outDir + "/unp_cosy_" + runId + ".root"; - if (eventMode) inFile = dataSet + ".event.raw.root"; - TString parFile = outDir + "/unp_cosy_params_" + runId + "_sts.root"; - TString outFile = dataSet + "_" + runId + ".rec.root"; - TString geoFile = dataSet + ".geo.root"; // to be created by a simulation run + //TString runId = TString::Format("%04u", uRunId); + //TString inFile = outDir + "/unp_cosy_" + runId + ".root"; + //if (eventMode) inFile = dataSet + ".event.raw.root"; + //TString parFile = outDir + "/unp_cosy_params_" + runId + "_sts.root"; + //TString outFile = dataSet + "_" + runId + ".rec.root"; + //TString geoFile = dataSet + ".geo.root"; // to be created by a simulation run // ------------------------------------------------------------------------ @@ -52,7 +52,6 @@ void cosy2019_process( // ----- FairRunAna --------------------------------------------------- FairRunAna* run = new FairRunAna(); - CbmStsFindHits* hit = new CbmStsFindHits(); FairFileSource* inputSource = new FairFileSource(inFile); run->SetSource(inputSource); @@ -76,20 +75,67 @@ void cosy2019_process( // ----- Local reconstruction in STS ---------------------------------- - CbmStsReco* stsReco = new CbmStsReco(); - // --- The parameter file for the STS Setup sensors needs to be explicitely set as - // --- 1) By default the CbmStsSetup creates only Stereo sensors with a 58 um pitch - // --- 2) The only place where this can be set is in the init of the CbmStsReco - - // ----- Geometry Tags -------------------------------------------------- - TString sStsHodoGeoPar = "sts_hodo_v19a_cosy.par"; - // ------------------------------------------------------------------------ - stsReco->SetSensorsParFile(sStsHodoGeoPar); - stsReco->SetTimeCutDigisInNs(20); // cluster finder: time cut in ns - stsReco->SetTimeCutClustersInNs(20.); // hit finder: time cut in ns - - run->AddTask(stsReco); - std::cout << "-I- : Added task " << stsReco->GetName() << std::endl; + CbmRecoSts* recoSts = new CbmRecoSts(); + recoSts->SetTimeCutDigisAbs(20); // cluster finder: time cut in ns + recoSts->SetTimeCutClustersAbs(20.); // hit finder: time cut in ns + + // ---- Here we define the sensor parameters since they are not available + // ----- from the runtimeDb.(#hateRuntimeDb) + + // ---- Hodoscope "sensor" + CbmStsParSensor hodoSensPar(CbmStsSensorClass::kDssdOrtho); + hodoSensPar.SetPar(0, 6.5); // extension in x + hodoSensPar.SetPar(1, 6.5); // extension in y + hodoSensPar.SetPar(2, 0.4); // extension in z + hodoSensPar.SetPar(3, 6.4); // active size in y + hodoSensPar.SetPar(4, 64); // number of strips front side + hodoSensPar.SetPar(5, 64); // number of strips back side + hodoSensPar.SetPar(6, 0.1); // strip pitch front side + hodoSensPar.SetPar(7, 0.1); // strip pitch back side + + // ---- STS sensor (DUT) + CbmStsParSensor stsSensPar(CbmStsSensorClass::kDssdStereo); + stsSensPar.SetPar(0, 6.2092); // extension in x + stsSensPar.SetPar(1, 6.2000); // extension in y + stsSensPar.SetPar(2, 0.0300); // extension in z + stsSensPar.SetPar(3, 5.9600); // active size in y + stsSensPar.SetPar(4, 1024); // number of strips front side + stsSensPar.SetPar(5, 1024); // number of strips back side + stsSensPar.SetPar(6, 0.0058); // strip pitch front side + stsSensPar.SetPar(7, 0.0058); // strip pitch back side + stsSensPar.SetPar(8, -7.5); // strip pitch front side + stsSensPar.SetPar(9, 0.0); // strip pitch back side + + // --- Addresses for sensors + // --- They are defined in each station as sensor 1, module 1, halfladderD (2), ladder 1 + Int_t hodo1Address = CbmStsAddress::GetAddress(0, 0, 1, 0, 0); // station 1 + Int_t stsAddress = CbmStsAddress::GetAddress(1, 0, 1, 0, 0); // station 2 + Int_t hodo2Address = CbmStsAddress::GetAddress(2, 0, 1, 0, 0); // station 3 + std::cout << "Hodo 1 address " << std::dec << hodo1Address << " " << std::hex << hodo1Address << std::endl; + std::cout << "STS address " << std::dec << stsAddress << " " << std::hex << stsAddress << std::endl; + std::cout << "Hodo 2 address " << std::dec << hodo2Address << " " << std::hex << hodo2Address << std::endl; + + // --- Now we can define the sensor parameter set and tell recoSts to use it + auto sensorParSet = new CbmStsParSetSensor("CbmStsParSetSensor", + "STS sensor parameters" "cosy2019"); + sensorParSet->SetParSensor(hodo1Address, hodoSensPar); + sensorParSet->SetParSensor(stsAddress, stsSensPar); + sensorParSet->SetParSensor(hodo2Address, hodoSensPar); + recoSts->UseSensorParSet(sensorParSet); + + // --- Next we define the module and ASIC parameters. The same can be used for all sensors. + CbmStsParAsic asicPar(32, 75000., 3000., 5., 800., 1000., 3.9789e-3); + auto modulePar = new CbmStsParModule(2048, 128); + modulePar->SetAllAsics(asicPar); + recoSts->UseModulePar(modulePar); + + // --- We also need the sensor conditions, although they are of no relevance here + // --- without magnetic field (they are used to determine the Lorentz shift). + auto sensorCond = new CbmStsParSensorCond(70., 140., 268., 17.5, 1.); + recoSts->UseSensorCond(sensorCond); + + run->AddTask(recoSts); + std::cout << "-I- : Added task " << recoSts->GetName() << std::endl; // ------------------------------------------------------------------------ diff --git a/macro/beamtime/cosy2019/sts_hodo_v19a_cosy_geo.root b/macro/beamtime/cosy2019/sts_hodo_v19a_cosy_geo.root new file mode 100644 index 0000000000000000000000000000000000000000..0af3858f256e33283e122bc253583bc32fbc0925 GIT binary patch literal 11895 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 a5<vV9fqxz2A4R_ZPT*sDW+0F&9q>Oz9$&!# literal 0 HcmV?d00001 -- GitLab