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