62 throw std::runtime_error{
"TRD not enabled in current geometry!"};
66 throw std::runtime_error{
"Failed to get TRD geo tag from CbmSetup!"};
69 TString paramFilesTrd(Form(
"%s/parameters/trd/trd_%s",
fSrcDir.Data(), geoTagTrd.Data()));
70 std::vector<TString> paramFilesVecTrd = {
"asic",
"digi",
"gas",
"gain"};
71 for (
auto parIt : paramFilesVecTrd) {
72 fParList->Add(
new TObjString(Form(
"%s.%s.par", paramFilesTrd.Data(), parIt.Data())));
75 for (
auto parFileVecIt : *
fParList) {
76 std::cout << Form(
"TrdParams - %s - added to parameter file list", parFileVecIt->GetName()) << std::endl;
81 fRun->AddTask(trdHitfinderPar);
85 FairParAsciiFileIo asciiInput;
86 std::string digiparfile = Form(
"%s/parameters/trd/trd_%s.digi.par",
fSrcDir.Data(), geoTagTrd.Data());
87 std::string asicparfile = Form(
"%s/parameters/trd/trd_%s.asic.par",
fSrcDir.Data(), geoTagTrd.Data());
91 if (asciiInput.open(digiparfile.data())) {
92 digiparset->init(&asciiInput);
98 if (asciiInput.open(asicparfile.data())) {
99 asicparset->init(&asciiInput);
106 fRun->AddTask(trdUnpackPar);
120 TObjString* tofBdfFile =
new TObjString(
fSrcDir +
"/parameters/tof/tof_" + geoTag +
".digibdf.par");
122 std::cout <<
"-I- TOF: Using parameter file " << tofBdfFile->GetString() << std::endl;
128 Double_t dDeadtime = 50.;
130 TString TofFileFolder =
fSrcDir +
"/parameters/mcbm/";
131 bool doCalibration =
false;
132 TString cCalId =
"490.100.5.0";
133 Int_t iCalSet = 30040500;
137 case Setup::mCBM2022:
138 doCalibration =
true;
139 cCalId =
"2391.5.000";
142 case Setup::mCBM2024_03:
143 doCalibration =
true;
147 case Setup::mCBM2024_05:
148 doCalibration =
true;
149 cFname = Form(
"%s/3026_1_TofCal.hst.root", TofFileFolder.Data());
151 case Setup::mCBM2025_02:
152 doCalibration =
true;
153 cFname = Form(
"%s/3310_1_TofCal.hst.root", TofFileFolder.Data());
155 default:
throw std::runtime_error(
"TOF: Unknown setup type");
158 if (cFname.IsNull() && doCalibration) {
160 Form(
"%s/%s_set%09d_%02d_%01dtofClust.hst.root", TofFileFolder.Data(), cCalId.Data(), iCalSet, calMode, calSel);
164 tofCluster->SetCalParFileName(cFname);
165 tofCluster->SetCalMode(calMode);
166 tofCluster->SetTotMax(20.);
167 tofCluster->SetTotMin(0.);
168 tofCluster->SetTotMean(5.);
169 tofCluster->SetMaxTimeDist(1.0);
170 tofCluster->SetChannelDeadtime(dDeadtime);
171 tofCluster->PosYMaxScal(0.75);
172 fRun->AddTask(tofCluster);
190 LOG(info) <<
"STS geo tag: " << geoTag;
194 sensor6cm.
SetPar(0, 6.2092);
196 sensor6cm.
SetPar(2, 0.03);
197 sensor6cm.
SetPar(3, 5.9692);
198 sensor6cm.
SetPar(4, 1024.);
199 sensor6cm.
SetPar(5, 1024.);
200 sensor6cm.
SetPar(6, 0.0058);
201 sensor6cm.
SetPar(7, 0.0058);
206 sensor12cm.
SetPar(1, 12.4);
207 sensor12cm.
SetPar(3, 12.1692);
215 auto sensorParSet =
new CbmStsParSetSensor(
"CbmStsParSetSensor",
"STS sensor parameters"
245 sensorParSet->SetParSensor(stsAddress01, sensor6cm);
246 sensorParSet->SetParSensor(stsAddress02, sensor6cm);
247 sensorParSet->SetParSensor(stsAddress03, sensor6cm);
248 sensorParSet->SetParSensor(stsAddress04, sensor6cm);
249 sensorParSet->SetParSensor(stsAddress05, sensor6cm);
250 sensorParSet->SetParSensor(stsAddress06, sensor12cm);
251 sensorParSet->SetParSensor(stsAddress07, sensor6cm);
252 sensorParSet->SetParSensor(stsAddress08, sensor12cm);
253 sensorParSet->SetParSensor(stsAddress09, sensor6cm);
254 sensorParSet->SetParSensor(stsAddress10, sensor6cm);
255 sensorParSet->SetParSensor(stsAddress11, sensor6cm);
259 uint32_t addr01 = 0x10008012;
260 uint32_t addr02 = 0x10018012;
261 uint32_t addr03 = 0x10008412;
262 uint32_t addr04 = 0x10018412;
263 uint32_t addr05 = 0x10008422;
264 uint32_t addr06 = 0x10018422;
265 uint32_t addr07 = 0x10008822;
266 uint32_t addr08 = 0x10018822;
267 uint32_t addr09 = 0x10028822;
268 uint32_t addr10 = 0x10008022;
269 uint32_t addr11 = 0x10018022;
270 uint32_t addr00 = 0x10000002;
285 sensorParSet->SetParSensor(addr01, sensor6cm);
286 sensorParSet->SetParSensor(addr02, sensor6cm);
287 sensorParSet->SetParSensor(addr03, sensor6cm);
288 sensorParSet->SetParSensor(addr04, sensor6cm);
289 sensorParSet->SetParSensor(addr05, sensor6cm);
290 sensorParSet->SetParSensor(addr06, sensor12cm);
291 sensorParSet->SetParSensor(addr07, sensor6cm);
292 sensorParSet->SetParSensor(addr08, sensor6cm);
293 sensorParSet->SetParSensor(addr09, sensor6cm);
294 sensorParSet->SetParSensor(addr10, sensor6cm);
295 sensorParSet->SetParSensor(addr11, sensor12cm);
296 sensorParSet->SetParSensor(addr00, sensor6cm);
299 throw std::runtime_error(
"STS: Unknown setup type");
302 recoSts->UseSensorParSet(sensorParSet);
306 auto parAsic =
new CbmStsParAsic(128, 31, 75000., 3000., 5., 800., 1000., 3.9789e-3);
310 parMod->SetAllAsics(*parAsic);
311 recoSts->UseModulePar(parMod);
316 recoSts->UseSensorCond(sensorCond);
318 fRun->AddTask(recoSts);
343 static bool callOnce =
true;
345 throw std::runtime_error(
"CbmOnlineParWrite::Run() can only be called once at the moment!");
352 fSrcDir = gSystem->Getenv(
"VMCWORKDIR");
358 TString geoSetupTag =
"";
362 case Setup::mCBM2022: runId = 2391;
break;
363 case Setup::mCBM2024_03: runId = 2724;
break;
364 case Setup::mCBM2024_05: runId = 2918;
break;
365 case Setup::mCBM2025_02: runId = 3453;
break;
366 default:
throw std::runtime_error(
"Unknown setup type");
370 catch (
const std::invalid_argument& e) {
371 std::cout <<
"Error in mapping from runID to setup name: " << e.what() << std::endl;
375 LOG(info) <<
"Using geometry setup: " << geoSetupTag;
378 TString geoFile =
fSrcDir +
"/macro/run/data/" + geoSetupTag +
".geo.root";
386 fRun =
new FairRunAna();
398 TString alignmentMatrixFileName =
fSrcDir +
"/parameters/mcbm/AlignmentMatrices_" + geoSetupTag +
".root";
399 if (alignmentMatrixFileName.Length() == 0) {
400 throw std::runtime_error{
"Alignment matrix file name is empty"};
403 LOG(info) <<
"Applying alignment for file '" << alignmentMatrixFileName <<
"'";
408 std::map<std::string, TGeoHMatrix>* matrices{
nullptr};
411 LOG(info) <<
"Filename: " << alignmentMatrixFileName;
412 TFile* misalignmentMatrixRootfile =
new TFile(alignmentMatrixFileName,
"READ");
413 if (misalignmentMatrixRootfile->IsOpen()) {
414 gDirectory->GetObject(
"MisalignMatrices", matrices);
415 misalignmentMatrixRootfile->Close();
418 throw std::runtime_error{
"Could not open alignment matrix file: " + alignmentMatrixFileName};
422 fRun->AddAlignmentMatrices(*matrices);
425 throw std::runtime_error{
"Could not read alignment matrices from file: " + alignmentMatrixFileName};
435 FairRuntimeDb* rtdb =
fRun->GetRuntimeDb();
436 FairParAsciiFileIo* parIo2 =
new FairParAsciiFileIo();
437 parIo2->setAutoWritable(
false);
439 rtdb->setSecondInput(parIo2);
443 fRun->SetGeomFile(geoFile);
450 gGeoManager->GetListOfVolumes()->Delete();
451 gGeoManager->GetListOfShapes()->Delete();
455 gSystem->Exec(
"rm all_*.par");
int32_t GetAddress(uint32_t unit=0, uint32_t ladder=0, uint32_t halfladder=0, uint32_t module=0, uint32_t sensor=0, uint32_t side=0, uint32_t version=kCurrentVersion)
Construct address.