5 #include "KVGeoImport.h"
6 #include "KVFAZIADetector.h"
8 #include "KVDetectorEvent.h"
10 #include "KVDataSet.h"
12 #include "KVFAZIAIDSiPSA.h"
13 #include "KVFAZIAIDCsI.h"
14 #include "KVFAZIAIDSiCsI.h"
15 #include "KVFAZIAIDSiSi.h"
20 #include <KVFAZIAIDSiSiCsI.h>
21 #include <KVReconstructedNucleus.h>
24 #include "MFMFaziaFrame.h"
28 #include "FzEventSet.pb.h"
29 #include "KVFzDataReader.h"
44 static Char_t const*
const FzDataType_str[] = {
"QH1",
"I1",
"QL1",
"Q2",
"I2",
"Q3",
"ADC",
"UNK" };
45 static Char_t const*
const FzDetector_str[] = {
"SI1",
"SI1",
"SI1",
"SI2",
"SI2",
"CSI" };
55 fStartingBlockNumber = 0;
58 fSignalTypes =
"QL1,I1,QH1,Q2,I2,Q3";
60 CreateCorrespondence();
68 Info(
"KVFAZIA",
"fpga shapers: %lf %lf %lf %lf", fQH1risetime, fQ2risetime, fQ3slowrisetime, fQ3fastrisetime);
93 prepare_to_handle_new_raw_data();
95 if (parlist->HasIntParameter(
"FAZIA.TRIGPAT")) SetTriggerPattern(parlist->GetIntValue(
"FAZIA.TRIGPAT"));
101 for(
auto& rnuc : recev)
104 rnuc.GetReconstructionTrajectory()->IterateFrom();
105 while(
auto rnod = rnuc.GetReconstructionTrajectory()->GetNextNode() )
108 for(
auto ds_p : rnod->GetDetector()->GetListOfDetectorSignals())
111 TString parname =
Form(
"%s.%s", rnod->GetName(), ds.GetName());
112 if(rnuc.GetParameters()->HasParameter(parname))
114 add_and_set_detector_signal(rnod->GetDetector(),rnod->GetName(),
115 rnuc.GetParameters()->GetDoubleValue(parname),ds.GetType());
132 ReadTriggerPatterns(db);
167 if (gExpDB->
GetTable(
"FAZIA.Triggers")) {
170 auto links = rundb->
GetLinks(
"FAZIA.Triggers");
171 if (links && links->GetEntries())
231 auto id_tel_list = GetDataSetEnv<KVString>(fDataSet,
"FAZIA.IDTelescopes");
233 fIDTelescopes->Delete();
241 KVDetector* csi{
nullptr}, *si2{
nullptr}, *si1{
nullptr};
243 auto d =
N->GetDetector();
244 if (
d->IsLabelled(
"SI1") &&
d->IsOK()) si1 =
d;
245 else if (
d->IsLabelled(
"SI2") &&
d->IsOK()) si2 =
d;
246 else if (
d->IsLabelled(
"CSI") &&
d->IsOK()) csi =
d;
252 fIDTelescopes->Add(idt);
257 if (id_tel_list.Contains(
"CSI-PSA")) {
260 add_telescope(idt, csi->
GetGroup());
263 if (!id_tel_list.Contains(
"SI1+SI2-CSI") && id_tel_list.Contains(
"SI2-CSI")) {
267 add_telescope(idt, csi->
GetGroup());
270 if (id_tel_list.Contains(
"SI1+SI2-CSI")) {
276 fSiCsI_idtype =
"SI_CSI";
277 idt->
SetName(
Form(
"ID_SI_CSI_%d", csi->GetIndex()));
278 add_telescope(idt, csi->
GetGroup());
284 if (id_tel_list.Contains(
"SI2-PSA")) {
287 add_telescope(idt, si2->
GetGroup());
291 if (id_tel_list.Contains(
"SI1-SI2")) {
295 add_telescope(idt, si2->
GetGroup());
299 if (id_tel_list.Contains(
"SI1-PSA")) {
302 add_telescope(idt, si1->
GetGroup());
323 TIter it(&fTrajectories);
327 if (geo_dn_traj->
GetN() != 3) {
330 rubbish.
Add(geo_dn_traj);
336 std::optional<int>
index;
342 rubbish.
Add(geo_dn_traj);
352 for (
auto tr : rubbish) {
353 fTrajectories.Remove(tr);
355 KVMultiDetArray::AssociateTrajectoriesAndNodes();
368 if (gFazia ==
this) gFazia =
nullptr;
377 if (fDetectorLabels ==
"") fDetectorLabels += label;
378 else if (!fDetectorLabels.
Contains(label)) fDetectorLabels +=
Form(
",%s", label);
394 void KVFAZIA::GenerateCorrespondanceFile()
408 if (fCorrespondanceFile !=
"")
return;
411 filename.Form(
"%s.names.dat", fDataSet.Data());
413 if (fCorrespondanceFile !=
"")
return;
418 Info(
"GenerateCorrespondanceFile",
"Opening correspondence file %s", fCorrespondanceFile.
Data());
425 Info(
"GenerateCorrespondanceFile",
"Creating correspondence file %s", fCorrespondanceFile.
Data());
428 fDetectorLabels =
"SI1,SI2,CSI";
430 SetNameOfDetectors(env);
433 env.
AddCommentLine(
"Make link between geometric ROOT objects and detector names");
436 fDetectorLabels =
"";
449 void KVFAZIA::SetNameOfDetectors(
KVEnv& env)
458 for (
Int_t bb = fStartingBlockNumber; bb < fNblocks; bb += 1) {
459 for (
Int_t qq = 1; qq <= 4; qq += 1) {
461 fDetectorLabels.
Begin(
",");
462 while (!fDetectorLabels.
End()) {
465 Form(
"BLOCK_%d_QUARTET_%d_%s-T%d", bb, qq, sdet.
Data(), tt),
466 Form(
"%s-%d", sdet.
Data(), bb * 100 + qq * 10 + tt)
480 void KVFAZIA::PerformClosedROOTGeometryOperations()
486 if (fImport_Xorg != 0 || fImport_Yorg != 0 || fImport_Zorg != 0) imp.SetOrigin(fImport_Xorg, fImport_Yorg, fImport_Zorg);
487 imp.SetDetectorPlugin(GetDataSetEnv<TString>(
GetDataSet(),
"FAZIADetectorPlugin",
"FAZIADetector"));
488 imp.SetNameCorrespondanceList(fCorrespondanceFile.
Data());
490 DefineStructureFormats(imp);
491 imp.AddAcceptedDetectorName(
"SI1-");
492 imp.AddAcceptedDetectorName(
"SI2-");
493 imp.AddAcceptedDetectorName(
"CSI-");
498 imp.ImportGeometry(fImport_dTheta, fImport_dPhi, fImport_ThetaMin, fImport_PhiMin, fImport_ThetaMax, fImport_PhiMax);
511 void KVFAZIA::GetGeometryParameters()
539 void KVFAZIA::SetTriggerPatternsForDataSet(
const TString& dataset)
560 auto patterns = GetDataSetEnv<KVString>(dataset,
"FAZIA.TriggerPatterns");
561 if (patterns.Length()) {
563 while (!patterns.End()) {
564 auto pattern = patterns.Next(kTRUE);
565 uint16_t val = (uint16_t)
GetDataSetEnv(dataset,
Form(
"FAZIA.TriggerPattern.%s", pattern.Data()), 0.);
576 void KVFAZIA::BuildFAZIA()
579 Info(
"BuildFAZIA",
"to be defined in child class ...");
587 void KVFAZIA::BuildTarget()
591 new TGeoBBox(
"TARGET_FRAME", 3., 3., 0.1 / 2.);
592 new TGeoEltu(
"TARGET_HOLE", 2., 2., 0.1 / 2.);
594 TGeoVolume* target_frame =
new TGeoVolume(
"TARGET_FRAME", cs, target_holder_mat.GetGeoMedium());
613 GetGeometryParameters();
614 GenerateCorrespondanceFile();
623 if (fCloseGeometryNow) {
625 PerformClosedROOTGeometryOperations();
663 if (fFiredDetectors.GetEntries()) {
664 dets = &fFiredDetectors;
669 TIter next_det(dets);
701 while (!DetNames.
End()) {
761 if (fDataSet ==
"FAZIASYM") {
762 sname.
Form(
"%s-RUTH", FzDataType_str[idsig]);
765 sname.
Form(
"%s-%d", FzDataType_str[idsig], 100 * bb + 10 * qq + tt);
769 if (fDataSet ==
"FAZIAPRE") {
770 sname.
Form(
"%s-RUTH", FzDataType_str[idsig]);
773 sname.
Form(
"%s-%d", FzDataType_str[idsig], 100 * bb + 10 * qq + tt);
777 sname.
Form(
"%s-%d", FzDataType_str[idsig], 100 * bb + 10 * qq + tt);
803 case DAQ::FzData_FzDataType_QH1:
804 if (eid == 0) dval =
value / (fQH1risetime * 1e3 / 10.);
806 case DAQ::FzData_FzDataType_I1:
808 case DAQ::FzData_FzDataType_QL1:
810 case DAQ::FzData_FzDataType_Q2:
811 if (eid == 0) dval =
value / (fQ2risetime * 1e3 / 10.);
813 case DAQ::FzData_FzDataType_I2:
815 case DAQ::FzData_FzDataType_Q3:
816 if (eid == 0) dval =
value / (fQ3slowrisetime * 1e3 / 10.);
817 if (eid == 1) dval =
value / (fQ3fastrisetime * 1e3 / 10.);
828 Bool_t KVFAZIA::treat_event(
const DAQ::FzEvent& e)
835 int ts =
e.trinfo_size();
838 for (
Int_t tr = ts - 1; tr >= 0; tr--) {
839 const DAQ::FzTrigInfo& rdtrinfo =
e.trinfo(tr);
840 uint64_t triggervalue = rdtrinfo.value();
842 fReconParameters.SetValue(
"FAZIA.TRIGPAT", (
int)triggervalue);
843 SetTriggerPattern((uint16_t)triggervalue);
845 else if (tr == ts - 6) fReconParameters.SetValue64bit(
"FAZIA.EC", ((triggervalue << 12) +
e.ec()));
846 else if (tr == ts - 8) {
847 dt = triggervalue / (1e6);
848 fReconParameters.SetValue(
"FAZIA.TRIGRATE.DT", dt);
849 double faziats = fReconParameters.GetValue64bit(
"FAZIA.TS") * 1.e-8;
850 if (oldfaziats > 0.) fReconParameters.SetValue(
"FAZIA.CENTRUM.DT", faziats - oldfaziats);
851 oldfaziats = faziats;
853 else if (tr == ts - 9) fReconParameters.SetValue(
"FAZIA.TRIGRATE.EXT", 1.*triggervalue / dt);
854 else if (tr == ts - 10) fReconParameters.SetValue(
"FAZIA.TRIGRATE.MAN", 1.*triggervalue / dt);
855 else if (tr == ts - 11) fReconParameters.SetValue(
Form(
"FAZIA.TRIGRATE.PAT%d", tr - 2), 1.*triggervalue / dt);
856 else if (tr == ts - 12) fReconParameters.SetValue(
Form(
"FAZIA.TRIGRATE.PAT%d", tr - 2), 1.*triggervalue / dt);
857 else if (tr == ts - 13) fReconParameters.SetValue(
Form(
"FAZIA.TRIGRATE.PAT%d", tr - 2), 1.*triggervalue / dt);
858 else if (tr == ts - 14) fReconParameters.SetValue(
Form(
"FAZIA.TRIGRATE.PAT%d", tr - 2), 1.*triggervalue / dt);
859 else if (tr == ts - 15) fReconParameters.SetValue(
Form(
"FAZIA.TRIGRATE.PAT%d", tr - 2), 1.*triggervalue / dt);
860 else if (tr == ts - 16) fReconParameters.SetValue(
Form(
"FAZIA.TRIGRATE.PAT%d", tr - 2), 1.*triggervalue / dt);
861 else if (tr == ts - 17) fReconParameters.SetValue(
Form(
"FAZIA.TRIGRATE.PAT%d", tr - 2), 1.*triggervalue / dt);
862 else if (tr == ts - 18) fReconParameters.SetValue(
Form(
"FAZIA.TRIGRATE.PAT%d", tr - 2), 1.*triggervalue / dt);
863 else if (tr == ts - 19) {
864 fReconParameters.SetValue(
"FAZIA.TRIGRATE.TOT", 1.*triggervalue / dt);
867 else if (tr == ts - 20) {
868 fReconParameters.SetValue(
"FAZIA.TRIGRATE.VAL", 1.*triggervalue / dt);
869 fReconParameters.SetValue(
"FAZIA.DEADTIME", 100.*(1. - 1.*triggervalue / tot));
876 for (
int b = 0;
b <
e.block_size(); ++
b) {
879 if (
e.block(b).len_error() ||
e.block(b).crc_error() || (!good)) {
884 int fIdBlk =
e.block(b).blkid();
886 for (
int f = 0;
f <
e.block(b).fee_size(); ++
f) {
888 const DAQ::FzFee& rdfee =
e.block(b).fee(f);
890 for (
int h = 0;
h < rdfee.hit_size(); ++
h) {
892 const DAQ::FzHit& rdhit = rdfee.hit(h);
894 if (rdfee.len_error() || rdfee.crc_error() || (!good)) {
895 KVError::Warning(
this,
"treat_event",
"FEE LEN OR CRC ERROR B%03d-FE%d",
e.block(b).blkid(), rdfee.feeid());
899 int fIdFee = rdhit.feeid();
900 int fIdTel = rdhit.telid();
902 for (
Int_t mm = 0;
mm < rdhit.data_size();
mm++) {
903 const DAQ::FzData& rdata = rdhit.data(mm);
904 int fIdSignal = rdata.type();
906 int DetTag = rdhit.dettag();
907 int GTTag = rdhit.gttag();
908 if (DetTag >= 16384 && GTTag < 16384) GTTag += 32768;
911 int fIdQuartet = fQuartet[fIdFee][fIdTel];
912 int fIdTelescope = fTelescope[fIdFee][fIdTel];
916 KVError::Error(
this,
"treat_event",
"No detector %s-%d found in FAZIA geometry...", FzDetector_str[fIdSignal], 100 * fIdBlk + 10 * fIdQuartet + fIdTelescope);
922 if (!rdata.has_energy() && !rdata.has_waveform()) {
923 if (FzDataType_str[fIdSignal] !=
"I2")
KVError::Warning(
this,
"treat_event",
"[NO DATA] [%s %s]", det->
GetName(), FzDataType_str[fIdSignal]);
927 if (rdata.has_energy()) {
928 const DAQ::Energy& ren = rdata.energy();
929 for (
Int_t ee = 0; ee < ren.value_size(); ee++) {
930 Double_t energy = TreatEnergy(fIdSignal, ee, ren.value(ee));
931 auto esig = det->SetFPGAEnergy(fIdSignal, ee, energy);
933 fFiredSignals.Add(esig);
937 fFiredDetectors.Add(det);
939 if (rdata.has_baseline()) {
941 auto bsig = det->SetBaseLine(fIdSignal, bl);
943 fFiredSignals.Add(bsig);
947 if (rdata.has_waveform()) {
948 const DAQ::Waveform& rwf = rdata.waveform();
951 if (fIdSignal <= 5) {
952 TString sname = GetSignalName(fIdBlk, fIdQuartet, fIdTelescope, fIdSignal);
954 KVError::Warning(
this,
"treat_event",
"signal name is empty !!! blk=%d qua=%d tel=%d\n", fIdBlk, fIdQuartet, fIdTelescope);
956 TGraph sig(rwf.sample_size());
958 for (
Int_t nn = 0; nn < rwf.sample_size(); nn++) {
959 if (fIdSignal != DAQ::FzData::ADC) {
960 if (rwf.sample(nn) > 8191) {
961 supp = rwf.sample(nn) | 0xFFFFC000;
964 supp = rwf.sample(nn);
968 supp = rwf.sample(nn);
970 sig.SetPoint(nn, nn, supp);
976 KVError::Warning(
this,
"treat_event",
"datatype %d>5 - taille = %d\n", fIdSignal, rwf.sample_size());
1000 Bool_t KVFAZIA::handle_raw_data_event_mfmframe(
const MFMCommonFrame& f)
1006 if (
f.GetFrameType() != MFM_FAZIA_FRAME_TYPE)
return kFALSE;
1007 fReconParameters.SetValue64bit(
"FAZIA.TS",
f.GetTimeStamp());
1009 #ifdef WITH_PROTOBUF
1010 DAQ::FzEventSet fazia_set;
1011 DAQ::FzEvent fazia_event;
1013 if (fazia_set.ParseFromArray(
f.GetPointUserData(), ((MFMFaziaFrame&)f).GetEventSize())) {
1015 if (fazia_set.ev_size() > 1) {
1017 "Got a FzEventSet from data: cannot handle multiple events at once!");
1020 return treat_event(fazia_set.ev(0));
1022 else if (fazia_event.ParseFromArray(
f.GetPointUserData(), ((MFMFaziaFrame&)f).GetEventSize())) {
1024 return treat_event(fazia_event);
1037 void KVFAZIA::CreateCorrespondence()
1044 KVError::Error(
this,
"CreateCorrespondence",
"ElecDetLink.env not found");
1048 DetLink.
ReadFile(DataFilePath, kEnvUser);
1049 for (
int t = 1; t <= 4; t++) {
1050 for (
int q = 1;
q <= 4;
q++) {
1054 sscanf(elec.
Data(),
"FPGA%d-FE%d", &fpga, &fee);
1055 fQuartet[fee][fpga] =
q;
1056 fTelescope[fee][fpga] = t;
1059 KVError::Error(
this,
"CreateCorrespondence",
"Problem reading FAZIA ElecDetLink.env file : T%1d-Q%1d = %s", t, q, elec.
Data());
1082 void KVFAZIA::ReadTriggerPatterns(
KVExpDB* db)
1101 Info(
"ReadTriggerPatterns()",
"Reading FAZIA triggers used during runs...");
1102 auto trigs = db->
AddTable(
"FAZIA.Triggers",
"Principal triggers used by FAZIA");
1110 while ((rec = (
TEnvRec*)it.Next())) {
1114 dbrec->
AddKey(
"Runs",
"List of Runs");
1115 trigs->AddRecord(dbrec);
1125 void KVFAZIA::SetIDCodeForIDTelescope(
KVIDTelescope* idt)
const
1131 else idt->
SetIDCode(IDCodes::ID_SI2_PSA);
1138 if (labsY.Contains(
"SI1") && labsY.Contains(
"SI2"))
1140 else if (labsY.Contains(
"SI1"))
1142 else if (labsY.Contains(
"SI2"))
1147 KVError::Error(
this,
"SetIDCodeForIDTelescope",
"Request for telescope name=%s of unknown class=%s",
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char filename
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t b
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h Atom_t Int_t ULong_t ULong_t unsigned char prop_list Atom_t Atom_t target
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t index
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void value
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t g
R__EXTERN TGeoManager * gGeoManager
char * Form(const char *fmt,...)
static const Char_t * GetWORKDIRFilePath(const Char_t *namefile="")
Bool_t IsLabelled(const Char_t *l) const
static ValType GetDataSetEnv(const KVString &dataset, const KVString &type, const ValType &defval={})
static Bool_t SearchKVFile(const Char_t *name, TString &fullpath, const Char_t *kvsubdir="")
Record folder for the database.
virtual Bool_t AddKey(KVDBKey *key, Bool_t check=kTRUE)
virtual KVRList * GetLinks(const Char_t *key) const
Returns the list of records linked to this record in table "key".
virtual KVDBTable * GetTable(const Char_t *table) const
virtual Bool_t AddTable(KVDBTable *table)
TString GetFullPathToDataSetFile(const Char_t *filename) const
ValType GetDataSetEnv(const Char_t *type, const ValType &defval={}) const
List of hit groups in a multidetector array.
void AddGroup(KVGroup *grp)
Base class for output signal data produced by a detector.
virtual Bool_t IsExpression() const
virtual void SetValue(Double_t x)
virtual Bool_t IsRaw() const
Base class for detector geometry description, interface to energy-loss calculations.
KVGroup * GetGroup() const
virtual Int_t GetIndex() const
const KVSeqCollection & GetListOfDetectorSignals() const
Extension of TEnv to allow the writing of comments in the file.
void AddCommentLine(const Char_t *line)
Int_t WriteFile(const char *fname, EEnvLevel level=kEnvAll) override
KVNameValueList * GetParameters() const
Base class to describe database of an experiment ,,.
KVDBRun * GetDBRun(Int_t number) const
virtual void LinkRecordToRunRange(KVDBRecord *rec, UInt_t first_run, UInt_t last_run)
Bool_t FindCalibFile(const Char_t *type, TString &fullpath, const TString &array_name="") const
Base class for FAZIA detectors.
void SetSignal(TGraph *signal, const Char_t *signal_name)
static const Char_t * GetNewName(KVString oldname)
Telescope for FAZIA identification using SI1 and/or SI2 with CSI.
void AddTriggerPattern(const TString &name, uint16_t value)
Description of a FAZIA detector geometry.
void SetGeometryImportParameters(Double_t dt=0.25, Double_t dp=1.0, Double_t tmin=2., Double_t pmin=0, Double_t tmax=20., Double_t pmax=360., Double_t xorg=0, Double_t yorg=0, Double_t zorg=0)
Double_t GetSetupParameter(const Char_t *parname)
std::string GetTriggerForCurrentRun() const
void AddDetectorLabel(const Char_t *label)
void GetDetectorEvent(KVDetectorEvent *detev, const TSeqCollection *dets) override
void AssociateTrajectoriesAndNodes() override
void Build(Int_t=-1) override
Build the FAZIA array.
void DeduceIdentificationTelescopesFromGeometry() override
KVFAZIA(const Char_t *title="")
Default constructor.
void FillDetectorList(KVReconstructedNucleus *rnuc, KVHashList *DetList, const KVString &DetNames) override
virtual ~KVFAZIA()
Destructor.
KVGroupReconstructor * GetReconstructorForGroup(const KVGroup *) const override
Specialized group reconstructor for FAZIA.
void SetRawDataFromReconEvent(const KVReconstructedEvent &recev) override
Set values of all raw data parameters and the value of the trigger bit pattern for the event.
void MakeCalibrationTables(KVExpDB *) override
Override base method in order to read FAZIA trigger for each run.
Handle FAZIA protobuf-format raw data files.
Path taken by particles through multidetector geometry.
KVGeoDetectorNode * GetNextNode() const
KVSeqCollection * AccessIDTelescopeList()
KVString GetPathString() const
void IterateFrom(const KVGeoDetectorNode *node0=nullptr) const
void IterateBackFrom(const KVGeoDetectorNode *node0=nullptr) const
Information on relative positions of detectors & particle trajectories.
KVDetector * GetDetector() const
Import detector array described by ROOT geometry and set up corresponding KVMultiDetArray object.
virtual Bool_t Fired(Option_t *opt="any") const
virtual KVDetector * GetDetector(const Char_t *name) const
Return detector in this structure with given name.
Base class for particle reconstruction in one group of a detector array.
static KVGroupReconstructor * Factory(const TString &plugin="", const KVGroup *g=nullptr)
Group of detectors which can be treated independently of all others in array.
Extended version of ROOT THashList.
Base class for all detectors or associations of detectors in array which can identify charged particl...
void SetGroup(KVGroup *kvg)
KVDetector * GetDetector(UInt_t n) const
virtual void SetIDCode(UShort_t c)
KVGroup * GetGroup() const
virtual void AddDetector(KVDetector *d)
KVString GetDetectorLabelsForGridCoord(const KVString &axis) const
Extended TList class which owns its objects by default.
Description of physical materials used to construct detectors & targets; interface to range tables.
virtual Double_t GetThickness() const
virtual TGeoMedium * GetGeoMedium(const Char_t *="")
static KVIonRangeTable * GetRangeTable()
Base class for describing the geometry of a detector array.
void SetDetectorThicknesses()
virtual void GetDetectorEvent(KVDetectorEvent *detev, const TSeqCollection *fired_params=0)
void CreateGeoManager(Double_t dx=500, Double_t dy=500, Double_t dz=500)
TString GetDataSet() const
KVGroup * GetGroup(const Char_t *name) const
virtual void MakeCalibrationTables(KVExpDB *)
UInt_t GetCurrentRunNumber() const
virtual void SetIdentifications()
const TSeqCollection * GetTrajectories() const
Int_t GetIntValue(const Char_t *name) const
Double_t GetDoubleValue(const Char_t *name) const
Bool_t HasParameter(const Char_t *name) const
Strings used to represent a set of ranges of values.
KVNameValueList * GetParameters() const
Read Google Protobuf DAQ files.
Event containing KVReconstructedNucleus nuclei reconstructed from hits in detectors.
Nuclei reconstructed from data measured by a detector array .
void Add(TObject *obj) override
void Clear(Option_t *option="") override
Extension of ROOT TString class which allows backwards compatibility with ROOT v3....
void Begin(TString delim) const
KVString Next(Bool_t strip_whitespace=kFALSE) const
Calculation/correction of energy losses of particles through an experimental target.
virtual Int_t GetEntries() const
THashList * GetTable() const
virtual const char * GetValue(const char *name, const char *dflt) const
virtual Int_t ReadFile(const char *fname, EEnvLevel level)
virtual void SetValue(const char *name, const char *value, EEnvLevel level=kEnvChange, const char *type=nullptr)
void CloseGeometry(Option_t *option="d")
TGeoVolume * GetTopVolume() const
TGeoVolume * MakeEltu(const char *name, TGeoMedium *medium, Double_t a, Double_t b, Double_t dz)
virtual TGeoNode * AddNode(TGeoVolume *vol, Int_t copy_no, TGeoMatrix *mat=nullptr, Option_t *option="")
const char * GetName() const override
virtual void SetName(const char *name)
TClass * IsA() const override
void AbstractMethod(const char *method) const
virtual const char * GetName() const
virtual const char * ClassName() const
virtual Bool_t InheritsFrom(const char *classname) const
virtual void Info(const char *method, const char *msgfmt,...) const
TObject * First() const override
const char * Data() const
Bool_t IsWhitespace() const
void Form(const char *fmt,...)
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
void Error(UserClass p, const char *location, const char *va_(fmt),...)
void Warning(UserClass p, const char *location, const char *va_(fmt),...)