diff --git a/common-tools/clas-detector/src/main/java/org/jlab/detector/scalers/DaqScaler.java b/common-tools/clas-detector/src/main/java/org/jlab/detector/scalers/DaqScaler.java index 8ae107969c..9cdd80d705 100644 --- a/common-tools/clas-detector/src/main/java/org/jlab/detector/scalers/DaqScaler.java +++ b/common-tools/clas-detector/src/main/java/org/jlab/detector/scalers/DaqScaler.java @@ -74,6 +74,37 @@ public void add(DaqScaler other) { protected void calibrate(IndexedTable fcupTable,IndexedTable slmTable,double seconds,double liveSeconds) { if (this.clock > 0) { + + // complain if a hard-coded clock frequency was used + String prefix = String.format("clockbug [%s]", this.getClass().getSimpleName()); + boolean clockbug = false; + System.err.println(String.format("%s: -----------", prefix)); + if(Math.abs(this.clockFreq - ((1e6)+1)) < 0.1) { + System.err.println(String.format("%s: used hard-coded clockFreq from Dsc2Scaler(bank,table,table,seconds)", prefix)); + clockbug = true; + } + else if(Math.abs(this.clockFreq - ((1e6)+2)) < 0.1) { + System.err.println(String.format("%s: used hard-coded clockFreq from StruckScaler()", prefix)); + clockbug = true; + } + else if(Math.abs(this.clockFreq - ((1e6)+3)) < 0.1) { + System.err.println(String.format("%s: used hard-coded clockFreq from StruckScaler(table,table,table)", prefix)); + clockbug = true; + } + else + System.err.println(String.format("%s: clockFreq OK (value=%f)", prefix, this.clockFreq)); + + // the hard-coded clock frequency is 1 MHz, but if it was used, it'll be 1 MHz + a few Hz; correct it now, along + // with the `seconds` and `liveSeconds` + if(clockbug) { + seconds *= this.clockFreq / 1e6; + liveSeconds *= this.clockFreq / 1e6; + this.clockFreq = 1e6; + } + + // print the clock + System.err.println(String.format("%s: toString: %s", prefix, this.toString())); + final double fcup_slope = fcupTable.getDoubleValue("slope",0,0,0); // Hz/nA final double fcup_offset = fcupTable.getDoubleValue("offset",0,0,0); // Hz final double fcup_atten = fcupTable.getDoubleValue("atten",0,0,0); // attenuation @@ -97,6 +128,10 @@ protected void calibrate(IndexedTable fcupTable,IndexedTable slmTable,double sec this.beamCharge = q * fcup_atten / fcup_slope; this.beamChargeGated = qg * fcup_atten / fcup_slope; } + + // print the beam charge + System.err.println(String.format("%s: fcup_offset=%f fcup_slope=%f fcup_atten=%f", prefix, fcup_offset, fcup_slope, fcup_atten)); + System.err.println(String.format("%s: clockFreq=%f beamCharge=%f beamChargeGated=%f", prefix, this.clockFreq, this.beamCharge, this.beamChargeGated)); } } diff --git a/common-tools/clas-detector/src/main/java/org/jlab/detector/scalers/Dsc2Scaler.java b/common-tools/clas-detector/src/main/java/org/jlab/detector/scalers/Dsc2Scaler.java index 5f48d43421..5e4aa3a3d2 100644 --- a/common-tools/clas-detector/src/main/java/org/jlab/detector/scalers/Dsc2Scaler.java +++ b/common-tools/clas-detector/src/main/java/org/jlab/detector/scalers/Dsc2Scaler.java @@ -38,7 +38,7 @@ public Dsc2Scaler() {} * @param seconds dwell time, provided in case the clock rolls over */ public Dsc2Scaler(Bank bank, IndexedTable fcupTable, IndexedTable slmTable, double seconds) { - this.clockFreq=1e6; + this.clockFreq=(1e6)+1; this.read(bank); this.calibrate(fcupTable,slmTable,seconds); } @@ -110,4 +110,4 @@ public final void read(Bank bank) { } } -} \ No newline at end of file +} diff --git a/common-tools/clas-detector/src/main/java/org/jlab/detector/scalers/StruckScaler.java b/common-tools/clas-detector/src/main/java/org/jlab/detector/scalers/StruckScaler.java index 14237ebe62..f940271c61 100644 --- a/common-tools/clas-detector/src/main/java/org/jlab/detector/scalers/StruckScaler.java +++ b/common-tools/clas-detector/src/main/java/org/jlab/detector/scalers/StruckScaler.java @@ -164,7 +164,7 @@ public final Interval getStableInterval(Bank bank, IndexedTable helTable) { } public StruckScaler() { - this.clockFreq = 1e6; + this.clockFreq = (1e6)+2; } /** @@ -178,7 +178,7 @@ public StruckScaler() { public StruckScaler(Bank bank,IndexedTable fcupTable, IndexedTable slmTable, IndexedTable helTable) { // the STRUCK's clock is 1 MHz - this.clockFreq = 1e6; + this.clockFreq = (1e6)+3; // Here we're going to assume the stable period is the same Struck // period throughout a single readout. Almost always correct ... @@ -239,4 +239,4 @@ else if (Input.equals(Input.CLOCK, chan)) { this.calibrate(fcupTable,slmTable); } -} \ No newline at end of file +} diff --git a/rg-c__summer22__10.5gev__NH3.yaml b/rg-c__summer22__10.5gev__NH3.yaml new file mode 100644 index 0000000000..76944e0f08 --- /dev/null +++ b/rg-c__summer22__10.5gev__NH3.yaml @@ -0,0 +1,86 @@ +mime-types: + - binary/data-hipo +configuration: + global: + variation: rgc_summer2022 + dcrbJitter: "true" + timestamp: 03/13/2024-06:40:00 + io-services: + writer: + schema_dir: dst + services: + MAGFIELDS: + magfieldSolenoidMap: Symm_solenoid_r601_phi1_z1201_13June2018.dat + magfieldTorusMap: Full_torus_r251_phi181_z251_25Jan2021.dat + DCCR: + rawBankGroup: "NOISE1" + MLTD: + run: "6302" + DCHAI: + outputBankPrefix: "HB" +io-services: + # reader: + # class: org.jlab.io.clara.HipoToHipoReader + # name: HipoToHipoReader + # writer: + # class: org.jlab.io.clara.HipoToHipoWriter + # name: HipoToHipoWriter + reader: + class: org.jlab.io.clara.DecoderReader + name: DecoderReader + writer: + class: org.jlab.io.clara.DecoderWriter + name: DecoderWriter +services: + - class: org.jlab.clas.swimtools.MagFieldsEngine + name: MAGFIELDS + - class: org.jlab.rec.ft.cal.FTCALEngine + name: FTCAL + - class: org.jlab.rec.ft.hodo.FTHODOEngine + name: FTHODO + - class: org.jlab.rec.ft.trk.FTTRKEngine + name: FTTRK + - class: org.jlab.rec.ft.FTEBEngine + name: FTEB + - class: org.jlab.service.raster.RasterEngine + name: RASTER +# DC clustering: nominal algoritm, filled the cluster bank for ai and conventional tracking + - class: org.jlab.service.dc.DCHBClustering + name: DCCR +# This is where the AI plugin would go. THe AI code reads the HB clusters. + - class: org.jlab.service.mltn.MLTDEngine + name: MLTD +# DC using clustering on AI hits: NN assisted HB tracking + - class: org.jlab.service.dc.DCHBPostClusterAI + name: DCHAI + - class: org.jlab.service.ftof.FTOFHBEngine + name: FTOFHB + - class: org.jlab.service.ec.ECEngine + name: EC + - class: org.jlab.rec.cvt.services.CVTEngine + name: CVTFP + - class: org.jlab.service.ctof.CTOFEngine + name: CTOF + - class: org.jlab.service.cnd.CNDCalibrationEngine + name: CND + - class: org.jlab.service.htcc.HTCCReconstructionService + name: HTCC + - class: org.jlab.service.ltcc.LTCCEngine + name: LTCC + - class: org.jlab.service.eb.EBHBEngine + name: EBHB +# DC regular TB tracking + - class: org.jlab.service.dc.DCTBEngine + name: DCTB + - class: org.jlab.service.fmt.FMTEngine + name: FMT + - class: org.jlab.rec.cvt.services.CVTSecondPassEngine + name: CVTSP + - class: org.jlab.service.ftof.FTOFTBEngine + name: FTOFTB + - class: org.jlab.service.eb.EBTBEngine + name: EBTB + - class: org.jlab.rec.rich.RICHEBEngine + name: RICH + - class: org.jlab.service.rtpc.RTPCEngine + name: RTPC diff --git a/rg-c__summer22__10.5gev__NH3__README.json b/rg-c__summer22__10.5gev__NH3__README.json new file mode 100644 index 0000000000..d404a081d2 --- /dev/null +++ b/rg-c__summer22__10.5gev__NH3__README.json @@ -0,0 +1,213 @@ +{ + "ignored": { + "reconYaml": [ + "io-services:", + " reader:", + " class: org.jlab.io.clara.HipoToHipoReader", + " name: HipoToHipoReader", + " writer:", + " class: org.jlab.io.clara.HipoToHipoWriter", + " name: HipoToHipoWriter", + "services:", + " - class: org.jlab.clas.swimtools.MagFieldsEngine", + " name: MAGFIELDS", + " - class: org.jlab.rec.ft.cal.FTCALEngine", + " name: FTCAL", + " - class: org.jlab.rec.ft.hodo.FTHODOEngine", + " name: FTHODO", + " - class: org.jlab.rec.ft.trk.FTTRKEngine", + " name: FTTRK", + " - class: org.jlab.rec.ft.FTEBEngine", + " name: FTEB", + " - class: org.jlab.service.raster.RasterEngine", + " name: RASTER", + "# DC clustering: nominal algoritm, filled the cluster bank for ai and conventional tracking", + " - class: org.jlab.service.dc.DCHBClustering", + " name: DCCR", + "# This is where the AI plugin would go. THe AI code reads the HB clusters. ", + " - class: org.jlab.service.mltn.MLTDEngine", + " name: MLTD", + "# DC using clustering on AI hits: NN assisted HB tracking", + " - class: org.jlab.service.dc.DCHBPostClusterAI", + " name: DCHAI", + " - class: org.jlab.service.ftof.FTOFHBEngine", + " name: FTOFHB", + " - class: org.jlab.service.ec.ECEngine", + " name: EC", + " - class: org.jlab.rec.cvt.services.CVTEngine", + " name: CVTFP", + " - class: org.jlab.service.ctof.CTOFEngine", + " name: CTOF", + " - class: org.jlab.service.cnd.CNDCalibrationEngine", + " name: CND", + " - class: org.jlab.service.htcc.HTCCReconstructionService", + " name: HTCC", + " - class: org.jlab.service.ltcc.LTCCEngine", + " name: LTCC", + " - class: org.jlab.service.eb.EBHBEngine", + " name: EBHB", + "# DC regular TB tracking ", + " - class: org.jlab.service.dc.DCTBEngine", + " name: DCTB", + " - class: org.jlab.service.fmt.FMTEngine", + " name: FMT", + " - class: org.jlab.rec.cvt.services.CVTSecondPassEngine", + " name: CVTSP", + " - class: org.jlab.service.ftof.FTOFTBEngine", + " name: FTOFTB", + " - class: org.jlab.service.eb.EBTBEngine", + " name: EBTB", + " - class: org.jlab.rec.rich.RICHEBEngine", + " name: RICH", + " - class: org.jlab.service.rtpc.RTPCEngine", + " name: RTPC", + "configuration:", + " global:", + " variation: rgc_summer2022", + " dcrbJitter: \"true\"", + " timestamp: 03/13/2024-06:40:00", + " io-services:", + " writer:", + " schema_dir: \"/group/clas12/packages/clara/5.0.2_10.0.9/plugins/clas12/etc/bankdefs/hipo4/singles/dst/\"", + " services:", + " MAGFIELDS:", + " magfieldSolenoidMap: Symm_solenoid_r601_phi1_z1201_13June2018.dat", + " magfieldTorusMap: Full_torus_r251_phi181_z251_25Jan2021.dat", + " DCCR:", + " rawBankGroup: \"NOISE1\"", + " MLTD:", + " run: \"6302\"", + " DCHAI:", + " outputBankPrefix: \"HB\"", + "mime-types:", + " - binary/data-hipo" + ], + "trainYaml": [ + "io-services:", + " reader:", + " class: org.jlab.jnp.grapes.io.HipoFrameReader", + " name: HipoFrameReader", + " writer:", + " class: org.jlab.jnp.grapes.io.HipoFrameWriter", + " name: HipoFrameWriter", + "services:", + "#################################################### JPSI/TCS", + " - class: org.jlab.jnp.grapes.services.JpsiTcsWagon", + " name: JPSITCS", + "#################################################### gmn", + " - class: org.jlab.jnp.grapes.services.GenericWagon", + " name: gmn1", + " - class: org.jlab.jnp.grapes.services.GenericWagon", + " name: gmn2", + "#################################################### eDeut", + " - class: org.jlab.jnp.grapes.services.GenericWagon", + " name: eDeutQ1", + " - class: org.jlab.jnp.grapes.services.GenericWagon", + " name: eDeutQ2", + "#################################################### sidisdvcs", + " - class: org.jlab.jnp.grapes.services.GenericWagon", + " name: sidisdvcs", + "#################################################### TWO ", + " - class: org.jlab.jnp.grapes.services.GenericWagon", + " name: TWO1", + " - class: org.jlab.jnp.grapes.services.GenericWagon", + " name: TWO2", + "####################################################", + "configuration:", + " custom-names:", + " 1: jpsi ", + " 2: gmn", + " 3: edeutcut", + " 4: sidisdvcs", + " 5: two ", + " io-services:", + " writer:", + " compression: 2", + " services:", + "#################################################### JPSI/TCS", + " JPSITCS:", + " id: 1", + "#################################################### nDVCS", + " gmn1:", + " id: 2", + " forward: 11:Xn", + " beamEnergy: 10.5473", + " targetPDG: 2112", + " electron: Q2>0.95 && W<2 && vz>-25 && vz<20", + " gmn2:", + " id: 2", + " forward: 11:2212:Xn", + " beamEnergy: 10.5473", + " targetPDG: 2212", + " electron: Q2>0.95 && W<2 && vz>-25 && vz<20", + "#################################################### eDeut", + " eDeutQ1:", + " id: 3", + " forward: 11:45:X+:X-:Xn", + " beamEnergy: 10.5473", + " targetPDG: 45", + " electron: Q2>0.95 && W>1.95 && p>1 && vz>-25 && vz<20 ", + " eDeutQ2:", + " id: 3", + " forward: 11:X+:X-:Xn", + " central: 45:X+:X-:Xn", + " beamEnergy: 10.5473", + " targetPDG: 45", + " electron: Q2>0.95 && W>1.95 && p>1 && vz>-25 && vz<20 ", + "#################################################### sidisdvcs", + " sidisdvcs:", + " id: 4", + " forward: 11:X+:X-:Xn", + " beamEnergy: 10.5473", + " targetPDG: 2112 ", + " electron: Q2>0.95 && W>1.95 && p>1 && vz>-25 && vz<20", + "#################################################### Two", + " TWO1:", + " id: 5", + " filter: 321:321:X+:X-:Xn", + " TWO2:", + " id: 5", + " filter: 2212:2212:X+:X-:Xn ", + "", + " mime-types:", + " - binary/data-hipo-frame" + ] + }, + "fileRegex": ".*clas[_A-Za-z]*_(\\d+)\\.evio\\.(\\d+)", + "mergePattern": "clas_%.6d.evio.%.5d-%.5d.hipo", + "trainDir": "/cache/clas12/rg-c/production/summer22/pass1/10.5gev/NH3", + "clara": "/group/clas12/packages/clara/5.0.2_10.0.9", + "mergeSize": 5, + "phaseSize": -1, + "noheldel": false, + "recharge": false, + "workDir": "/volatile/clas12/rg-c/production/summer22/pass1New/10.5gev/NH3", + "coatjava": "/group/clas12/packages/clara/5.0.2_10.0.9/plugins/clas12", + "denoise": 2.0, + "runGroup": "rgc", + "submit": false, + "trainSize": 30, + "hattawy": false, + "tag": "pass1_su22e10_NH3_p1", + "solenoid": null, + "outDir": "/cache/clas12/rg-c/production/summer22/pass1/10.5gev/NH3", + "node": "general", + "helflip": false, + "trainYaml": "/u/home/clas12-6/users/lixu/train_dst_20230113_105473MeV.yaml", + "forties": false, + "threads": 16, + "logDir": "/farm_out/clas12-6", + "reconSize": 2, + "graalvm": false, + "groovy": "/group/clas12/packages/groovy/4.0.3", + "singlePattern": "clas_%.6d.evio.%.5d.hipo", + "torus": null, + "nopostproc": false, + "project": "hallb-pro", + "reconYaml": "/u/home/clas12-6/users/lixu/rgcPass1Summer22/rgcSummer22Pass1.yaml", + "ccdbsqlite": null, + "decDir": "/cache/clas12/rg-c/production/summer22/pass1/10.5gev/NH3/decoded", + "model": "decmrgrecana", + "schema": "dst", + "physics": false +} \ No newline at end of file diff --git a/scan.groovy b/scan.groovy new file mode 100644 index 0000000000..b3f6d3b09e --- /dev/null +++ b/scan.groovy @@ -0,0 +1,25 @@ +// print `RUN::scaler` + +import org.jlab.jnp.hipo4.io.HipoReader; +import org.jlab.jnp.hipo4.data.Event; +import org.jlab.jnp.hipo4.data.Bank; +import org.jlab.jnp.hipo4.data.SchemaFactory; + +def filename = args[0]; + +HipoReader reader = new HipoReader(); +reader.setTags(0); +reader.open(filename); +SchemaFactory schema = reader.getSchemaFactory(); + +while(reader.hasNext()) { + Bank scalerBank = new Bank(schema.getSchema("RUN::scaler")); + Event event = new Event(); + reader.nextEvent(event); + event.read(scalerBank); + if(scalerBank.getRows()>0) { + System.out.println("beamCharge=${scalerBank.getFloat('fcup', 0)} beamChargeGated=${scalerBank.getFloat('fcupgated', 0)}"); + } +} + +reader.close(); diff --git a/test-rgc.sh b/test-rgc.sh new file mode 100755 index 0000000000..3540fa615a --- /dev/null +++ b/test-rgc.sh @@ -0,0 +1,31 @@ +#!/usr/bin/env bash +set -euo pipefail +sep() { echo '=================================================================================='; } +# ./build-coatjava.sh -T8 --clara + +### decode an RG-C Summer 2022 NH3 file +rm rgc.hipo -f +coatjava/bin/decoder \ + -l FINE \ + -n 10000 \ + -o rgc.hipo \ + /cache/clas12/rg-c/data/clas_016330/clas_016330.evio.00808 2>&1 | tee clockbug.log +grep --color '^clockbug.*' clockbug.log + +### reconstruct; its `README.json` file is copied here to `rg-c__summer22__10.5gev__NH3__README.json` +# rm -vfr tmp +# coatjava/bin/run-clara \ +# -y rg-c__summer22__10.5gev__NH3.yaml \ +# -t 8 \ +# -n 500 \ +# -c ./clara \ +# -o ./tmp \ +# /cache/clas12/rg-c/data/clas_016330/clas_016330.evio.00808 +# # rgc.hipo +# sep +# grep \ +# --color \ +# '^clockbug.*' \ +# $(find tmp/log -type f -name '*dpe.log') +# sep +# coatjava/bin/run-groovy scan.groovy tmp/rec_clas_016330.evio.00808.hipo diff --git a/test-rgd.sh b/test-rgd.sh new file mode 100755 index 0000000000..a0d6073bf0 --- /dev/null +++ b/test-rgd.sh @@ -0,0 +1,21 @@ +#!/usr/bin/env bash +set -euo pipefail +sep() { echo '=================================================================================='; } +# ./build-coatjava.sh -T8 --clara + +### test with local RG-D test file (as done in the CI) +rm -vfr tmp +coatjava/bin/run-clara \ + -y etc/services/rgd-clarode.yml \ + -t 8 \ + -n 500 \ + -c ./clara \ + -o ./tmp \ + validation/advanced-tests/data/evio/rg-d/clas_018779.evio.01339 +sep +grep \ + --color \ + '^clockbug.*' \ + $(find tmp/log -type f -name '*dpe.log') +sep +coatjava/bin/run-groovy scan.groovy tmp/rec_clas_018779.evio.01339.hipo