Difference between revisions of "Polarized Helium-3 Experiments"
m (→Shifts) |
(→Run Information) |
||
Line 19: | Line 19: | ||
** 01/22/20 schedule 147 hours, ABU 65.8 hours. 63% efficiency, production data collected to date 7.89% | ** 01/22/20 schedule 147 hours, ABU 65.8 hours. 63% efficiency, production data collected to date 7.89% | ||
** 01/29/20 schedule ?? hours, ABU ?? hours, production data collected to date 14.72% | ** 01/29/20 schedule ?? hours, ABU ?? hours, production data collected to date 14.72% | ||
− | ** 02/05/20 schedule 168 hours, ABU 64 hours. | + | ** 02/05/20 schedule 168 hours, ABU 64 hours. 38% efficiency, scheduled hours to date:??, data collected to date 25.32%. |
** So far, Total scheduled hour, s 414 hours (414/1728 =24%), ABU 124.3 hours (7%). 30% efficiency. | ** So far, Total scheduled hour, s 414 hours (414/1728 =24%), ABU 124.3 hours (7%). 30% efficiency. | ||
Revision as of 16:44, 5 February 2020
Contents
- 1 Experiment Information
- 2 Run Information
- 3 Pol He-3 Target Information
- 3.1 Target Operator Instructions
- 3.2 Checklists
- 3.3 Expert Information
- 3.4 Reference Cell Information
- 3.5 Production Target Cell Information
- 3.6 Additional Documentation
- 3.7 Manuals
- 4 Pol He-3 Analysis Resources
- 5 Calibrations
- 5.1 Basic Template for each Detector/Calibration Procedure
- 5.2 Drift Chambers
- 5.3 Hodoscopes
- 5.4 Calorimeter
- 5.5 Gas Cerenkovs
- 5.6 Aerogel (Not in use for this run)
- 5.7 Optics
- 5.8 EDTM
- 5.9 BPM / Raster
- 5.10 BCM
- 5.11 Acceptance
- 5.12 ...
- 5.13 hcana Analyzer Variable Names
- 5.14 Pol He-3 Farm / Disk Resources
- 6 Calibrations
Experiment Information
Proposals, Experiment overviews
Collaboration Meetings
- A1n/d2n Collaboration Meeting -- Jul 24, 2019
- A1n/d2n Collaboration Meeting -- Dec 10, 2018
- A1n/d2n Collaboration Meeting -- Jun 15, 2018
Run Information
- RC Daily Meeting and Run Plan
- todo list
- Weekly summary reports. A1N schedule hours are 36 PAC days. With 50% efficiency that is 1728 hours
- 12/11/19 schedule 57 hours, ABU 11.7 hours. 21% efficiency.
- 12/18/19 schedule 104 hours, ABU 20 hours. 19% efficiency.
- 01/15/20 schedule 106 hours, ABU 26.8 hours. 25% efficiency.
- 01/22/20 schedule 147 hours, ABU 65.8 hours. 63% efficiency, production data collected to date 7.89%
- 01/29/20 schedule ?? hours, ABU ?? hours, production data collected to date 14.72%
- 02/05/20 schedule 168 hours, ABU 64 hours. 38% efficiency, scheduled hours to date:??, data collected to date 25.32%.
- So far, Total scheduled hour, s 414 hours (414/1728 =24%), ABU 124.3 hours (7%). 30% efficiency.
Run Plan
- Run plan (google doc)
- Overview of schedule (google doc)
- 2-pass commissioning (<- follow this for commissioning even if using 1-pass beam)
- 1-pass calibration for A1n (Dec 2019)
- 1-pass calibration for A1n (Jan 2020)
- 5-pass production for A1n
Shifts
Shift Leader Responsibilities
1) Start a "Shift Summary" at the start of shift using a web browser and edit as needed. This provides read-time update of what's going on. A good example can be found here: hclog 3762636
2) Record in the shift summary all events happened during the shift, such as accelerator down time, beam IHWP change, target rotation, NMR measurements, access (incl purpose of access), link to relevant separate hclog entry if possible;
3) Maintain a list of runs that were taken during the shift, note the type of target (spin direction or gas pressure when applicable), beam IHWP status, and anything special about the run;
4) Fill out shift checklist or delegate someone on shift to do it. Checklist instructions can be found at Shift Checklist Help.
5) Watch data quality using the "New Online Monitoring Instructions" (see a few lines below). "Golden run" plots should be provided (if not, ask RC);
6) Make sure automatic asymmetry analysis is on-going and log entries posted (every single run should have an auto entry once auto-replay is done. This may take a while for long runs). For a SHMS run autolog example please see: hclog 3764000.
Target Operator Responsibilities
1) Maintain normal function of the target;
2) Perform NMR measurements as instructed in the run plan, post in hclog NMR with results in the title, for example "NMR ~62%". In the entry itself provide screenshots of the sweep spectrum and the fitting window. For an example please see https://logbooks.jlab.org/entry/3772347
3) Take screen shots of target status (all stripcharts, fields, and laser status) once a shift.
Pol He-3 Target Screen Setup / How-tos
Beam Restoration Procedure
New Online Monitoring Instructions
FAQ
1. Where is the replay and how do I run it?
There is no manual replay. It runs automatically. Welcome to the year of 2020.
2. How do I look at and check the latest data?
Go to the Hall C online monitor page. For the curious, there is also the jsroot http server which stores the analysis plots too.
3. Where is the 50k replay?
The "Live" Hall C online monitor looks at the data in real time. Also, see #1.
Toolkit
First, ssh to cdaql1 and use go_analysis pro
to setup the terminal environment.
Run list commands:
HMS_run_table
and SHMS_run_table
will print a run list with useful information.
To add to a run's comment column (if there is something notable, eg, junk run) do the following:
add_run_comment HMS -r 2635 -c "Junk"
or
add_run_comment SHMS -r 1234 -c "Halfwave plate out"
Monitoring ongoing replays
List the current replays which are still in progress:
list_running_replays
Starting missing runs
If something happens where a replay is missing, use the following command to get it going.
start_missing_replay -h
Take note of the arguments given by the help.
End-of-shift
At the end of each shift this command will automatically be run to post a summary of the logged files (you don't have to do anything):
/home/cdaq/polhe3/production/hallc_online/util/post_runlists_to_logbook
It will make a post similar to this https://logbooks.jlab.org/entry/3763867
Troubleshooting
If the online monitoring display is broken please contact an expert.
http://cdaql1.jlab.org:8090
and
http://cdaql1.jlab.org:8091
should both load webpages. If they don't that should help guide the following fix. If one is not loading, to check/restart the http servers, follow the instruction given by
/home/cdaq/polhe3/production/hallc_online/util/fix_http_servers
Expert contacts
Send hate mail to Sylvester Joosten, Chao Peng, and Whitney Armstrong. Also reach out on https://hallc.slack.com.
Safety Documents
Pol He-3 Target Information
- How-tos, Training Documentation, etc main page: Pol He-3 Target Information
Target Operator Instructions
- PolHe3 Target Training Slides
- PNMR Training slides: Media:PNMR Training Slides 20_08_25.pdf
- Pol He-3 Target Screen Setup / How-tos
- Pol He3 Operational Restrictions (raster, beam current limits, etc)
- Procedure for Moving Between Target Cells (pdf) (ODP)
- Reference Cell Fill Procedure (PDF) (docx)
Checklists
- Checklist before starting Target Work inside the Enclosure
- Backout Checklist after Hall Access for Target Work
- Backout Checklist after Target Work inside Enclosure
Expert Information
Reference Cell
- How to install/remove a reference cell
- EPR Photodiode Replacement Procedure
- Reference Cell Summary Document
- Reference Cell Fill Procedure (PDF) (docx)
- Pressure calibration data:
- EPICS data:
- Vacuum readback: ADC channel 7 (raw: HcHPE1313ACh7; "calibrated": polhe3:CellVacuum )
- Pressure readback: ADC channel 8 (raw: HcHPE1313ACh8; "calibrated": polhe3:CellPressure )
- 04 Dec 2019 : Reference Cell Summary Document (These calibrations were done before a 1 uF cap was added on 18 Dec 2019 [1])
- 14 Feb 2020 : Reference Cell pressure calibration (14 Feb 2020)
- A little more information: https://logbooks.jlab.org/entry/3788269
- EPICS data:
Cooling Jet Alignment
Alignment jigs and drawings are stored on the box labeled 'Averett 3He Reference Cell Pts'. And the box is on the floor underneath the Hall C counting house printer.
Pol He3 Field Mapping Data
- Pol He3 Field Mapping Data
- Field Correction Settings for A1N
- Field Correction Settings for D2N (Original)
Pol He3 Field Map from TOSCA simulation
Circular Raster Information
- Raster Status Presentation Mark J., Bob M. (Dec 10, 2018 Collaboration Meeting)
Reboot Switches
- Reboot Switch Operation --How to use reboot switches
- hcreboot5 --Devices in the Pol He3 Rack behind the Green Wall
- hcreboot6 --Devices in the two racks under the pivot
- hcreboot7 --Devices in the two racks under the pivot
Reset Target Ladder Motion Control
Cable/RTD/Signal Maps
NOTE: If you update a map below Click on a the previous hclog entry and either add a comment pointing to your new entry, or use the 'Follow-up' link on the old entry to make a new entry. That will make it easier to track when/why things change.
- Note: There is a dictionary of EPICS PVs with descriptions at
- ~coda/coda/scripts/EPICS_logging/polhe3-epics.txt
- Laser Fiber End RTDs:
- Hardware notes: https://logbooks.jlab.org/entry/3747838
- Final Map: https://logbooks.jlab.org/entry/3747950
- RTDs on cell:
- Visual gauge photo and PV map: https://logbooks.jlab.org/entry/3747509 (12/06/2019 - 03:48)
- RTD head settings: https://logbooks.jlab.org/entry/3747508
Fiber RTD hardware trip points
- Fire Safety RTDs
- HcFiberTemp0, HcFiberTemp1
- max measured about 32C
- set trip to 36C
- Fiber Temperature RTDs
- HcFiberTemp4+ (except for 12, 14 below)
- Max measured of about 32C
- set trip to 46C (as of Jan 14, 2020 -- will set to 36C during next downtime)
- HcFiberTemp12, 14
- Max measured of 40C
- set trip to 46C
Address 0xF6 FiberTemp0-1: (and the unused 2, 3) Fire safety RTDs (max 36) Address 0xF5 FiberTemp4--7 * max 36 Address 0xF3 FiberTemp8--11 * max 36 Address 0xF4 FiberTemp12-15 * max 46 due to 12, 14
NOTE: power cycling the acromag controller below will trip the laser interlock!
- Set the hardware trip limits
% ssh pi@polhe3pi2 ('hccuser' password) % cd Documents % scls # select 'acromag' entry, then type Ctrl-C to kill the program # Set the limits % for f in 0xf3 0xf5 0xF6; do ./setupAcro -l 36 -a $f; done % for f in 0xf4; do ./setupAcro -l 46 -a $f; done # Reboot the acromag controller using hcreboot6 # Then restart the software by (for example) running bash again % bash
- Verify that the stripcharts are updating again and close the terminal window.
PolHe3 Alarm Handler defaults
These can be reset this way:
% ssh cvxwrks@cdaql1 % cd alarm_handler_polhe3 % ./set_polhe3_defaults
Type in the number for the fields you wish to reset and hit return.
Reference Cell Information
- Reference Cell Window Thicknesses (As posted to the Analysis Log here: https://hallcweb.jlab.org/elogs/A1n-d2n+Combined+Analysis/59 )
Production Target Cell Information
PolHe3 Polarization Citation/Reference Link
Final Cell polarizations and supporting documentation is (will be) on the Hall C DocDB https://hallcweb.jlab.org/doc-private/ShowDocument?docid=1182 Use that URL as a citation/reference in papers.
Additional Details
Nominal Cell Status summary slide
- Any cells that are production ready need to be flagged as such
- Any cells that have seen beam should be flagged with the date range
- Production cell target chamber wall thickness measurement location (JLab Measurements)
- Production cell target chamber wall thickness measurement location (UVa Measurements)
Currently Installed Cell
- Briana
- Re-Installed in target: 08/21/2020
- Originally Installed in target: Cell for Initial testing 12/15/2019 to 01/04/2020
- Characterization Document: Media:Production_Cell_Info_-_Cell_Briana.pdf
Cells Being Readied for Installation
- Tommy -- next cell; being remounted
- Installed in target: (Soon ready for install; Planned for next Production Cell)
- Characterization Document: Media:Production_Cell_Info_-_Cell_Tommy.pdf
- Butterball
- Installed in target: (Future Production Cell)
- Characterization Document: Media:Production_Cell_Info_-_Cell_Butterball.pdf
Older Installed Cells
- Austin
- Installed in target: 03/20/2020 to 8/21/2020
- Characterization Document: Media:Production_Cell_Info_-_Cell_Austin.pdf
- Big Brother
- Installed in target: 02/12/2020 to 03/13/2020
- Characterization Document: Media:Production_Cell_Info_-_Cell_Bigbrother.pdf
- Dutch
- Installed in target: 01/04/2020 to 02/10/2020
- Characterization Document: Media:Production_Cell_Info_-_Cell_Dutch.pdf
- Fulla
- Installed in target: November 2019 (Backup Cell)
- Characterization Document: Media:Production_Cell_Info_-_Cell_Fulla.pdf
Addition Documentation
- Spreadsheet from Chris Jantzi (July 8, 2020) : Media:A1n Cell Characteristics - 08Jul2020.xlsx
- Media:Target_Summary_-_Wall_Thickness.xlsx
- Mingyu Chen (March 22, 2021): Media:Production_Cell_Info_-_Pumping_Chamber_Wall_Thickness.pdf
- "Frequency shifts in the EPR spectrom of 39K due to spin-exchange collisions with polarized 3He and precise 3He polarimetry" (Kappa_0) Paper: arXiv link, Local copy (16Oct2021)
Additional Documentation
Target CAD Files/Photos
- Document Control Group
- Use 'Advanced Search Options': Category='hall c', Document number='67507'
- Selected Target Shop Drawings
- Target Ladder
- Carbon Foil Mount Plate
- 7 foils spaced 2.625" (6.667 cm) apart
- Upstream entrance window should be at z=-30.0cm (based off 67507-00017-1.pdf, 67507-00014.pdf, 67507-00024-1.pdf)
- Target Oven
- Platform and coils
- Carbon Foils
- Photos of Target Setup (google drive link)
- CAD Models from Bert
- JT files
Manuals
- Kepco Power supply (and target Field) information
- SR844 Stanford Research Systems RF Lockin Amplifier Manual
- GPIB-ENET/100 Manual
- Perkin Elmer 7265 Lockin Manual
- Raytum Laser configuration file (HCLOG 3745303
- iSeries CNi32 Temperature controller (4-wire RTD)
Pol He-3 Analysis Resources
E12-06-121 (d2n) and E12-06-110 (A1n) Dissertations
- M. Roy dissertation (U. Kentucky) (Presentation to Collaboration (recording)) [E12-06-121]
- M. Cordona (Rehfuss) (U. Temple) [E12-06-110]
- M. Chen dissertation (U. Virginia) [E12-06-110]
E06-014 Dissertations
Related E06-014 Publications
- M. Posik Precision Measurement of the Neutron Twist-3 Matrix Element d2n: Probing Color Forces (PRL)
- D.S. Parno Precision measurements of A1n in the deep inelastic regime (PLB)
- D. Flay Measurements of d2n and A1n: Probing the neutron spin structure (PRD; long paper)
A1n/d2n Analysis Logbooks
When a user clicks on one of the three logbooks under that link, they will be prompted for a "Login name:", "Full name:" and "Email:". For the login name they must put their JLab user name. After hitting save, they will be prompted to login. Use the JLab user name and password here.
- Contact Brad S. or Steve W. if you have problems.
Hall C analyzer documentation (Pol 3He Specific)
- Please feel welcome to use the Hall C Slack Channel if you have questions/issues.
- Anyone should be able to join if they use their @jlab.org email address
- If that doesn't work, try this Invitation link.
General Analysis / Farm Notes
- General Hall C Analysis Procedure -- Carlos Yero
- Reference times, etc.
- Simona's 2018 notes on Detector Checkout and Analyzer configuratoin
- HCANA and lessons learned from analyzing TDC1190 and FADC250 data -- Mark Jones
- Reference times, lessons learned, etc.
- Joint Hall A & C Data Analysis Workshop June 2018
- In general, items with a (*) on that page denotes an interactive tutorial component. If you login to "JLab" Bluejeans you can view the recorded video sessions.
- Review the following presentations from the Analysis workshop(s)
- Farm Use and Computing Resources Tips and Tricks (Updated 2019) -- Brad Sawatzky
- Hall-C Software: Status and Outlook -- Eric Pooser from Hall C Winter 2019 Collab meeting
- Overview & Update of the Hall C Analyzer -- Eric Pooser from 2018 Workshop
- Then move on to the Tuesday 'Hall C' sessions starting with the git howto:
- Effective Git use (*) -- Steve Wood
- Folks really do need to understand how to work with git. They should follow up on the tutorials/howtos Steve mentions in his talk before moving on.
Survey Group Information
- All Survey & Alignment Group results **should** be here
https://www.jlab.org/accel/survalign/documents/dthallc.htm
- However, that page is not always kept current. I've put copies of PolHe3 data (2019--2020) transmittals I have here as well:
https://hallcweb.jlab.org/doc-private/ShowDocument?docid=1114
Special Runs
- Table of 12 GeV Beam Energy Measurements
- Xiaochao's run list for A1n period https://hallcweb.jlab.org/elogs/A1n-d2n+Combined+Analysis/48
- Pressure Curve Runs
- List of special runs (A1n)
Calibrations
Students / PostDocs write the section then an Expert validates the procedure
- General Hall C Analysis Procedure
- Reference times, etc.
I expect to break each detector/calibration out into its own wiki page as they mature, but for now I think it is best to work on this single (big) page until we have settled on a "good" template.
Basic Template for each Detector/Calibration Procedure
For each detector subsystem we would like to capture/document the following information:
- A list of all (or at least the most useful) ROOT tree variables associated with this detector
- Description of the calibration algorithm (That is, how is it supposed to work -- what is the logic behind it?)
- Files involved in the calibration
- THc* or THa* modules that are needed/used
- Database files that will be modified
- Scripts that will be used
- Dependencies of this calibration
- Reference time cuts should be verified
- FADC 'hit selection' timing cuts should be verified
- Calorimeter calibration relies on good optics calibration for momentum determination
- If tight timing cuts are used, then the hodoscopes may need to be calibrated first, etc
- ... etc
- Provide a step-by-step "Howto" that shows
- What commands/scripts need to be run, in what order.
- How do you verify that various cuts (ref times, trigger types, etc) are correct before you run the script(s)?
- What do you look for to verify that the code has run correctly after you run the script(s)?
- Common Pitfalls / Things to watch for
- I have found it useful in the past to provide a list of common symptoms and solutions that people may run into.
Drift Chambers
- Expert: Deb, Bill Henry
- Student:
Hodoscopes
- Expert: Carlos Yero, Deb Biswas, Bill Henry
- Student: Mingyu
- The hodoscope calibration scripts are in
hallc_replay/CALIBRATION/hms_hodo_calib
andhallc_replay/CALIBRATION/shms_hodo_calib
- Carlos Yero wrote a pretty thorough guide to the calibration procedure on DocDB as well as some nice slides from the 2018 analysis workshop
- Here are the steps for the HMS. The procedure is the same for the SHMS.
- Set the flag
htofusinginvadc = 0
to NOT use the hodo parameters from the previous hodoscope calibration procedure. This flag is found onhallc_replay/PARAM/HMS/HODO/
directory. - Replay a run with 1–2 million events.
- In the directory
hallc_replay/CALIBRATION/hms_hodo_calib/
, run the following code:-
root -l timeWalkHistos.C(<run_num>)
- This script takes as input the ROOTfile replayed and creates another ROOTfile with histogram objects that are used to perform the time-walk correction.
-
- To do the time-walk corrections, run the following code:
-
root -l timeWalkCalib.C(<run_num>)
- This script takes as input the ROOTfile containing the histogram objects produced by the previous script. A parameter file containing the time-walk parameters will be produced at
-
hallc_replay/PARAM/HMS/HODO/hhodo_TWcalib_runNUM.param
-
- Rename this file
hhodo_TWcalib.param
-
- Replay the raw data file, once again (1 - 2 M events), with the updated time-walk parameters.
- In the hodoscopoe calibration directory, run the following code:
-
root -l fitHodoCalib.C
- The first part of this script performs a linear fit on the time-walk corrected time vs. hodoscope track to determine the propagation velocity and the cable time difference across each paddle.
- The second part of this code solves a matrix equation for the lambda parameters mentioned in Carlos's guide.
- A parameter file containing the time-walk parameters will be produced at
-
hallc_replay/PARAM/HMS/HODO/hhodo_Vpcalib_runNUM.param
-
- Rename this file
hhodo_Vpcalib.param
-
- Replay the raw data one last time, and check the hodoscope beta distribution.
- You may have to apply a calorimeter cut (for example,
H.cal.etottracknorm>0.7
) to get a clean sample. A good calibration should have beta centered at 1.
- You may have to apply a calorimeter cut (for example,
Calorimeter
- Expert: Simona
- Student: Melanie
- Simona's slides on calorimeter analysis/calibration: [2]
- The calorimeter calibration scripts are in
hallc_replay/CALIBRATION/hms_cal_calib
andhallc_replay/CALIBRATION/shms_cal_calib
- Slides from the 2017 and 2018 analysis workshops are here [3], [4]
How to perform calibration
- Replay a run with HCANA and include the following branches
- HMS
- H.cal.1pr.goodNegAdcPulseInt
- H.cal.1pr.goodPosAdcPulseInt
- H.cal.2ta.goodNegAdcPulseInt
- H.cal.2ta.goodPosAdcPulseInt
- H.cal.3ta.goodNegAdcPulseInt
- H.cal.3ta.goodPosAdcPulseInt
- H.cal.4ta.goodNegAdcPulseInt
- H.cal.4ta.goodPosAdcPulseInt
- H.cal.nclust
- H.dc.ntrack
- H.dc.x_fp
- H.dc.y_fp
- H.dc.xp_fp
- H.dc.yp_fp
- H.gtr.p
- H.gtr.dp
- H.cer.npeSum
- H.hod.beta
- HMS
- SHMS
- P.cal.pr.goodNegAdcPulseInt
- P.cal.pr.goodPosAdcPulseInt
- P.cal.fly.goodAdcPulseInt
- P.dc.x_fp
- P.dc.y_fp
- P.dc.xp_fp
- P.dc.yp_fp
- P.dc.ntrack
- P.gtr.p
- P.gtr.dp
- P.hgcer.npeSum
- P.ngcer.npeSum
- P.hod.beta
- P.cal.nclust
- P.cal.ntracks
- P.cal.fly.nclust
- P.cal.fly.ntracks
- SHMS
- Create a ROOTfiles directory in the calibration directory (hms_cal_calib or shms_cal_calib)
- Modify the input file to select cuts (beta, delta, cherenkov)
- Run the calibration script from HCANA
.x cal_calib.cpp+("prefix_root_file")
Gas Cerenkovs
- Expert: Simona
- Student: Melanie
ROOT Tree Variables
SHMS Heavy Gas Cherenkov (HGC or "hgcer") and Noble Gas Cherenkov (NGC or "ngcer")
- P.h(n)gcer.npeSum
- P.h(n)gcer.totNumAdcHits
- P.h(n)gcer.totNumGoodAdcHits
- P.h(n)gcer.totNumTracksFired
- P.h(n)gcer.totNumTracksMatched
- P.h(n)gcer.xAtCer
- P.h(n)gcer.yAtCer
- T.shms.pH(N)GCER_adcMultiplicity
- T.shms.pH(N)GCER_adcPed
- T.shms.pH(N)GCER_adcPedRaw
- T.shms.pH(N)GCER_adcPulseAmp
- T.shms.pH(N)GCER_adcPulseAmpRaw
- T.shms.pH(N)GCER_adcPulseInt
- T.shms.pH(N)GCER_adcPulseIntRaw
- T.shms.pH(N)GCER_adcPulseTime
- T.shms.pH(N)GCER_adcPulseTimeRaw
- T.shms.pH(N)GCER_tdcMultiplicity
- T.shms.pH(N)GCER_tdcTime
- T.shms.pH(N)GCER_tdcTimeRaw
- Ndata.P.h(n)gcer.adcCounter
- P.h(n)gcer.adcCounter
- Ndata.P.h(n)gcer.adcErrorFlag
- P.h(n)gcer.adcErrorFlag
- Ndata.P.h(n)gcer.adcPed
- P.h(n)gcer.adcPed
- Ndata.P.h(n)gcer.adcPedRaw
- P.h(n)gcer.adcPedRaw
- Ndata.P.h(n)gcer.adcPulseAmp
- P.h(n)gcer.adcPulseAmp
- Ndata.P.h(n)gcer.adcPulseAmpRaw
- P.h(n)gcer.adcPulseAmpRaw
- Ndata.P.h(n)gcer.adcPulseInt
- P.h(n)gcer.adcPulseInt
- Ndata.P.h(n)gcer.adcPulseIntRaw
- P.h(n)gcer.adcPulseIntRaw
- Ndata.P.h(n)gcer.adcPulseTime
- P.h(n)gcer.adcPulseTime
- Ndata.P.h(n)gcer.adcPulseTimeRaw
- P.h(n)gcer.adcPulseTimeRaw
- Ndata.P.h(n)gcer.goodAdcHitUsed
- P.h(n)gcer.goodAdcHitUsed
- Ndata.P.h(n)gcer.goodAdcMult
- P.h(n)gcer.goodAdcMult
- Ndata.P.h(n)gcer.goodAdcPed
- P.h(n)gcer.goodAdcPed
- Ndata.P.h(n)gcer.goodAdcPulseAmp
- P.h(n)gcer.goodAdcPulseAmp
- Ndata.P.h(n)gcer.goodAdcPulseInt
- P.h(n)gcer.goodAdcPulseAmp
- Ndata.P.h(n)gcer.goodAdcPulseIntRaw
- P.h(n)gcer.goodAdcPulseInt
- Ndata.P.h(n)gcer.goodAdcPulseTime
- P.h(n)gcer.goodAdcPulseTime
- Ndata.P.h(n)gcer.goodAdcTdcDiffTime
- P.h(n)gcer.goodAdcTdcDiffTime
- Ndata.P.h(n)gcer.npe
- P.h(n)gcer.npe
- Ndata.P.h(n)gcer.numAdcHits
- P.h(n)gcer.numAdcHits
- Ndata.P.h(n)gcer.numGoodAdcHits
- P.h(n)gcer.numGoodAdcHits
- Ndata.P.h(n)gcer.numTracksFired
- P.h(n)gcer.numGoodAdcHits
- Ndata.P.h(n)gcer.numTracksMatched
- P.h(n)gcer.numTracksMatched
Calibration Algorithm
- There are two methods used to calibrate the gas Cherenkovs:
- The first - most straightforward - method is to identify the single photo-electron (SPE) peak from the ADC readout (and the oscilloscope). The pulse amplitudes of the PMTs are read out using FADCs and integrated to produce the pulse integrals. These histograms are then fitted along the range of the SPE signal to find the mean, which gives the number of picocoulombs for 1 photo-electron. This is the "adc_to_npe" calibration coefficient, which is then manually added to the parameter files located in
hallc_replay/PARAM/HMS/CER/hcer_calib.param
for the HMS andhallc_replay/PARAM/SHMS/HGCER/phgcer_calib.param
for the SHMS HGC- Identifying SPE signals requires only very little light, so beam isn't needed. These calibrations are done using cosmics
- See Simona Malace's elog entry on an HMS cherenkov calibration
- Clear SPE spectra hasn't been attainable with the SHMS NGC, so a second method is used to calibrate it. This is done for each PMT at a time by selecting electrons whose Cherenkov light was reflected on one PMT only. A calorimeter cut, timing cut, graphical X and Y cuts at the mirror planes, and cuts to ensure that very low pulse integrals are seen on all other PMTs (except for the one under calibration) are all needed. Once these are applied, the pulse integral histograms are fitted to get the number of photoelectrons (npe = μ²/σ²) and then the expected integral per single photo-electron (spe = μ/npe), which is the "adc_to_npe" calibration coefficient manually added to the parameter file located in
hallc_replay/PARAM/SHMS/NGCER/pngcer_calib.param
- See Simona Malace's elog entry on an SHMS NGC cherenkov calibration for a more thorough explanation
- See also Burcu Duran's notes on this type of calibration, a student who's done extensive PID studies with the NGC for the J/Psi experiment: SHMS NGCER Calib.pdf
- The first - most straightforward - method is to identify the single photo-electron (SPE) peak from the ADC readout (and the oscilloscope). The pulse amplitudes of the PMTs are read out using FADCs and integrated to produce the pulse integrals. These histograms are then fitted along the range of the SPE signal to find the mean, which gives the number of picocoulombs for 1 photo-electron. This is the "adc_to_npe" calibration coefficient, which is then manually added to the parameter files located in
- Once these calibration constants are found and implemented, replaying the run should result in the npe distribution with the single photo-electron peak centered around 1 (H.cer.npe[0] {H.cer.goodAdcMult[0]==1} for example, in the first elog post above, where indices [0] and [1] correspond to one of the two PMTs in the HMS cherenkov)
Needed Files
- The calibration scripts for the gas cherenkovs are located in:
hallc_replay/hms_cer_calib
for the HMS gas cherenkov andhallc_replay/shms_hgcer_calib
for the SHMS heavy gas cherenkov. - You will need to have replayed either the HMS or SHMS run, depending on which calibration you're doing, so that the appropriate root file has been generated.
- If the
-all
option was used, then the file will be in the form of:(s)hms_replay_production_all_XXXX_-1.root
whereXXXX
is the run number - If a certain number of events was chosen, then the file will be in the form of:
(s)hms_replay_production_XXXX__XXXX.root
with the run number and number of events
- If the
How to Run the Calibration
- First, always remember to load the Pol He3 software to properly set your environment:
source /group/c-polhe3/software/setup.sh
- For the HMS gas cherenkov calibration, go to
/hallc_replay/CALIBRATION/hms_cer_calib
and typeroot -l "run_cal.C(RunNum,NumEvents)"
where-1
is an option for NumEvents if a full replay was done- You will be prompted to enter 1 if it was a coincidence run. For our experiments, it won't be. Enter 0.
- Enter
showall
when prompted to "enter options for calibration." - The ADC-to-NPE conversion value will be outputted to the terminal for PMT 1 and PMT 2, and can be seen as the mean displayed in the Pulse Integral histograms.
- You'll be asked if you want to update the calibration constants with the better estimate. If you type "y," then a new parameters file called
hcer_calib_XXXX.param
for that specific run number will be generated and stored inhallc_replay/PARAM/HMS/CER
Common Issues
Aerogel (Not in use for this run)
Optics
- Expert: Mark Jones
- Post-Doc: Jixie
EDTM
BPM / Raster
- Expert: Mark Jones
- Student: Mingyu
BCM
- Expert: Dave Mack
- Student: Melanie
Acceptance
- Expert: Mark Jones
- Student: Murchanna
...
hcana Analyzer Variable Names
This is a rough list of the hcana variable names. This is a subset only, and may not include the variables you need/want.
- I just ran my old script on a recent'ish hcana code base (Spring 2020) to extract the following dictionary.
The output should be close to waht you get online by running the following command:
-
FIXME: add command/instructions for online printout
NOTE: This is just a general reference. Look at the replay.C file (or equivalent) to understand what the object names are for your detector class. There are classes and variables here that will NOT be in a typical ROOT file.
THcAerogel (THcAerogel.cxx)
RVarDef vars[] = { {"posGain", "Positive PMT gains", "fPosGain"}, {"negGain", "Negative PMT gains", "fNegGain"}, {"numPosAdcHits", "Number of Positive ADC Hits Per PMT", "fNumPosAdcHits"}, // Aerogel occupancy {"totNumPosAdcHits", "Total Number of Positive ADC Hits", "fTotNumPosAdcHits"}, // Aerogel multiplicity {"numNegAdcHits", "Number of Negative ADC Hits Per PMT", "fNumNegAdcHits"}, // Aerogel occupancy {"totNumNegAdcHits", "Total Number of Negative ADC Hits", "fTotNumNegAdcHits"}, // Aerogel multiplicity {"totnumAdcHits", "Total Number of ADC Hits Per PMT", "fTotNumAdcHits"}, // Aerogel multiplicity {"posAdcPedRaw", "Positive Raw ADC pedestals", "frPosAdcPedRaw.THcSignalHit.GetData()"}, {"posAdcPulseIntRaw", "Positive Raw ADC pulse integrals", "frPosAdcPulseIntRaw.THcSignalHit.GetData()"}, {"posAdcPulseAmpRaw", "Positive Raw ADC pulse amplitudes", "frPosAdcPulseAmpRaw.THcSignalHit.GetData()"}, {"posAdcPulseTimeRaw", "Positive Raw ADC pulse times", "frPosAdcPulseTimeRaw.THcSignalHit.GetData()"}, {"posAdcPed", "Positive ADC pedestals", "frPosAdcPed.THcSignalHit.GetData()"}, {"posAdcPulseInt", "Positive ADC pulse integrals", "frPosAdcPulseInt.THcSignalHit.GetData()"}, {"posAdcPulseAmp", "Positive ADC pulse amplitudes", "frPosAdcPulseAmp.THcSignalHit.GetData()"}, {"posAdcPulseTime", "Positive ADC pulse times", "frPosAdcPulseTime.THcSignalHit.GetData()"}, {"negAdcPedRaw", "Negative Raw ADC pedestals", "frNegAdcPedRaw.THcSignalHit.GetData()"}, {"negAdcPulseIntRaw", "Negative Raw ADC pulse integrals", "frNegAdcPulseIntRaw.THcSignalHit.GetData()"}, {"negAdcPulseAmpRaw", "Negative Raw ADC pulse amplitudes", "frNegAdcPulseAmpRaw.THcSignalHit.GetData()"}, {"negAdcPulseTimeRaw", "Negative Raw ADC pulse times", "frNegAdcPulseTimeRaw.THcSignalHit.GetData()"}, {"negAdcPed", "Negative ADC pedestals", "frNegAdcPed.THcSignalHit.GetData()"}, {"negAdcPulseInt", "Negative ADC pulse integrals", "frNegAdcPulseInt.THcSignalHit.GetData()"}, {"negAdcPulseAmp", "Negative ADC pulse amplitudes", "frNegAdcPulseAmp.THcSignalHit.GetData()"}, {"negAdcPulseTime", "Negative ADC pulse times", "frNegAdcPulseTime.THcSignalHit.GetData()"}, { 0 } }; RVarDef vars[] = { {"apos", "Positive Raw ADC Amplitudes", "fA_Pos"}, {"aneg", "Negative Raw ADC Amplitudes", "fA_Neg"}, {"apos_p", "Positive Ped-subtracted ADC Amplitudes", "fA_Pos_p"}, {"aneg_p", "Negative Ped-subtracted ADC Amplitudes", "fA_Neg_p"}, {"tpos", "Positive Raw TDC", "fT_Pos"}, {"tneg", "Negative Raw TDC", "fT_Neg"}, {"ntdc_pos_hits", "Number of Positive Tube Hits", "fNTDCPosHits"}, {"ntdc_neg_hits", "Number of Negative Tube Hits", "fNTDCNegHits"}, {"posadchits", "Positive ADC hits", "fPosADCHits.THcSignalHit.GetPaddleNumber()"}, {"negadchits", "Negative ADC hits", "fNegADCHits.THcSignalHit.GetPaddleNumber()"}, {"postdchits", "Positive TDC hits", "fPosTDCHits.THcSignalHit.GetPaddleNumber()"}, {"negtdchits", "Negative TDC hits", "fNegTDCHits.THcSignalHit.GetPaddleNumber()"}, {"nGoodHits", "Total number of good hits", "fNGoodHits"}, {"posNpeSixGev", "Number of Positive PEs", "fPosNpeSixGev"}, {"negNpeSixGev", "Number of Negative PEs", "fNegNpeSixGev"}, {"posNpeSumSixGev", "Total Number of Positive PEs", "fPosNpeSumSixGev"}, {"negNpeSumSixGev", "Total Number of Negative PEs", "fNegNpeSumSixGev"}, {"npeSumSixGev", "Total Number of PEs", "fNpeSumSixGev"}, { 0 } }; RVarDef vars[] = { {"posAdcCounter", "Positive ADC counter numbers", "frPosAdcPulseIntRaw.THcSignalHit.GetPaddleNumber()"}, {"negAdcCounter", "Negative ADC counter numbers", "frNegAdcPulseIntRaw.THcSignalHit.GetPaddleNumber()"}, {"posAdcErrorFlag", "Error Flag for When FPGA Fails", "fPosAdcErrorFlag.THcSignalHit.GetData()"}, {"negAdcErrorFlag", "Error Flag for When FPGA Fails", "fNegAdcErrorFlag.THcSignalHit.GetData()"}, {"numGoodPosAdcHits", "Number of Good Positive ADC Hits Per PMT", "fNumGoodPosAdcHits"}, // Aerogel occupancy {"numGoodNegAdcHits", "Number of Good Negative ADC Hits Per PMT", "fNumGoodNegAdcHits"}, // Aerogel occupancy {"totNumGoodPosAdcHits", "Total Number of Good Positive ADC Hits", "fTotNumGoodPosAdcHits"}, // Aerogel multiplicity {"totNumGoodNegAdcHits", "Total Number of Good Negative ADC Hits", "fTotNumGoodNegAdcHits"}, // Aerogel multiplicity {"totnumGoodAdcHits", "TotalNumber of Good ADC Hits Per PMT", "fTotNumGoodAdcHits"}, // Aerogel multiplicity {"numTracksMatched", "Number of Tracks Matched Per Region", "fNumTracksMatched"}, {"numTracksFired", "Number of Tracks that Fired Per Region", "fNumTracksFired"}, {"totNumTracksMatched", "Total Number of Tracks Matched Per Region", "fTotNumTracksMatched"}, {"totNumTracksFired", "Total Number of Tracks that Fired", "fTotNumTracksFired"}, {"xAtAero", "Track X at Aero diffusion box", "fXAtAero"}, {"yAtAero", "Track Y at Aero diffusion box", "fYAtAero"}, {"posNpe", "Number of Positive PEs", "fPosNpe"}, {"negNpe", "Number of Negative PEs", "fNegNpe"}, {"posNpeSum", "Total Number of Positive PEs", "fPosNpeSum"}, {"negNpeSum", "Total Number of Negative PEs", "fNegNpeSum"}, {"npeSum", "Total Number of PEs", "fNpeSum"}, {"goodPosAdcPed", "Good Negative ADC pedestals", "fGoodPosAdcPed"}, {"goodPosAdcMult", "Good Positive ADC mult", "fGoodPosAdcMult"}, {"goodPosAdcPulseInt", "Good Negative ADC pulse integrals", "fGoodPosAdcPulseInt"}, {"goodPosAdcPulseIntRaw", "Good Negative ADC raw pulse integrals", "fGoodPosAdcPulseIntRaw"}, {"goodPosAdcPulseAmp", "Good Negative ADC pulse amplitudes", "fGoodPosAdcPulseAmp"}, {"goodPosAdcPulseTime", "Good Negative ADC pulse times", "fGoodPosAdcPulseTime"}, {"goodPosAdcTdcDiffTime", "Good Positive hodo Start - ADC pulse times", "fGoodPosAdcTdcDiffTime"}, {"goodNegAdcPed", "Good Negative ADC pedestals", "fGoodNegAdcPed"}, {"goodNegAdcMult", "Good Negative ADC Mult", "fGoodNegAdcMult"}, {"goodNegAdcPulseInt", "Good Negative ADC pulse integrals", "fGoodNegAdcPulseInt"}, {"goodNegAdcPulseIntRaw", "Good Negative ADC raw pulse integrals", "fGoodNegAdcPulseIntRaw"}, {"goodNegAdcPulseAmp", "Good Negative ADC pulse amplitudes", "fGoodNegAdcPulseAmp"}, {"goodNegAdcPulseTime", "Good Negative ADC pulse times", "fGoodNegAdcPulseTime"}, {"goodNegAdcTdcDiffTime", "Good Negative hodo Start - ADC pulse times", "fGoodNegAdcTdcDiffTime"}, { 0 } };
THcBCMCurrent (THcBCMCurrent.cxx)
RVarDef vars[] = { {"CurrentFlag", "BCM current flag for good event", "fBCMflag"}, {"bcm1.AvgCurrent", "BCM1 average beam current", "fBCM1avg"}, {"bcm2.AvgCurrent", "BCM2 average beam current", "fBCM2avg"}, {"bcm4a.AvgCurrent", "BCM4a average beam current", "fBCM4aavg"}, {"bcm4b.AvgCurrent", "BCM4b average beam current", "fBCM4bavg"}, {"bcm4c.AvgCurrent", "BCM4c average beam current", "fBCM4cavg"}, { 0 } };
THcCherenkov (THcCherenkov.cxx)
RVarDef vars[] = { {"numAdcHits", "Number of ADC Hits Per PMT", "fNumAdcHits"}, // Cherenkov occupancy {"totNumAdcHits", "Total Number of ADC Hits", "fTotNumAdcHits"}, // Cherenkov multiplicity {"adcPedRaw", "Raw ADC pedestals", "frAdcPedRaw.THcSignalHit.GetData()"}, {"adcPulseIntRaw", "Raw ADC pulse integrals", "frAdcPulseIntRaw.THcSignalHit.GetData()"}, {"adcPulseAmpRaw", "Raw ADC pulse amplitudes", "frAdcPulseAmpRaw.THcSignalHit.GetData()"}, {"adcPulseTimeRaw", "Raw ADC pulse times", "frAdcPulseTimeRaw.THcSignalHit.GetData()"}, {"adcPed", "ADC pedestals", "frAdcPed.THcSignalHit.GetData()"}, {"adcPulseInt", "ADC pulse integrals", "frAdcPulseInt.THcSignalHit.GetData()"}, {"adcPulseAmp", "ADC pulse amplitudes", "frAdcPulseAmp.THcSignalHit.GetData()"}, {"adcPulseTime", "ADC pulse times", "frAdcPulseTime.THcSignalHit.GetData()"}, { 0 } }; RVarDef vars[] = { {"adcCounter", "ADC counter numbers", "frAdcPulseIntRaw.THcSignalHit.GetPaddleNumber()"}, {"adcErrorFlag", "Error Flag for When FPGA Fails", "fAdcErrorFlag.THcSignalHit.GetData()"}, {"numGoodAdcHits", "Number of Good ADC Hits Per PMT", "fNumGoodAdcHits"}, // Cherenkov occupancy {"totNumGoodAdcHits", "Total Number of Good ADC Hits", "fTotNumGoodAdcHits"}, // Cherenkov multiplicity {"numTracksMatched", "Number of Tracks Matched Per Region", "fNumTracksMatched"}, {"numTracksFired", "Number of Tracks that Fired Per Region", "fNumTracksFired"}, {"totNumTracksMatched", "Total Number of Tracks Matched Per Region", "fTotNumTracksMatched"}, {"totNumTracksFired", "Total Number of Tracks that Fired", "fTotNumTracksFired"}, {"xAtCer", "Track X at Cherenkov mirror", "fXAtCer"}, {"yAtCer", "Track Y at Cherenkov mirror", "fYAtCer"}, {"npe", "Number of PEs", "fNpe"}, {"npeSum", "Total Number of PEs", "fNpeSum"}, {"goodAdcPed", "Good ADC pedestals", "fGoodAdcPed"}, {"goodAdcMult", "Good ADC Multiplicity", "fGoodAdcMult"}, {"goodAdcHitUsed", "Good ADC Hit Used", "fGoodAdcHitUsed"}, {"goodAdcPulseInt", "Good ADC pulse integrals", "fGoodAdcPulseInt"}, {"goodAdcPulseIntRaw", "Good ADC raw pulse integrals", "fGoodAdcPulseIntRaw"}, {"goodAdcPulseAmp", "Good ADC pulse amplitudes", "fGoodAdcPulseAmp"}, {"goodAdcPulseTime", "Good ADC pulse times", "fGoodAdcPulseTime"}, {"goodAdcTdcDiffTime", "Good Hodo Start - ADC pulse times", "fGoodAdcTdcDiffTime"}, { 0 } };
THcDC (THcDC.cxx)
RVarDef vars[] = { { "stubtest", "stub test", "fStubTest" }, { "nhit", "Number of DC hits", "fNhits" }, { "tnhit", "Number of good DC hits", "fNthits" }, { "trawhit", "Number of true raw DC hits", "fN_True_RawHits" }, { "ntrack", "Number of Tracks", "fNDCTracks" }, { "nsp", "Number of Space Points", "fNSp" }, { "track_nsp", "Number of spacepoints in track", "fDCTracks.THcDCTrack.GetNSpacePoints()"}, { "x", "X at focal plane", "fDCTracks.THcDCTrack.GetX()"}, { "y", "Y at focal plane", "fDCTracks.THcDCTrack.GetY()"}, { "xp", "XP at focal plane", "fDCTracks.THcDCTrack.GetXP()"}, { "yp", "YP at focal plane", "fDCTracks.THcDCTrack.GetYP()"}, { "x_fp", "X at focal plane (golden track)", "fX_fp_best"}, { "y_fp", "Y at focal plane( golden track)", "fY_fp_best"}, { "xp_fp", "XP at focal plane (golden track)", "fXp_fp_best"}, { "yp_fp", "YP at focal plane(golden track) ", "fYp_fp_best"}, { "chisq", "chisq/dof (golden track) ", "fChisq_best"}, { "sp1_id", " (golden track) ", "fSp1_ID_best"}, { "sp2_id", " (golden track) ", "fSp2_ID_best"}, { "InsideDipoleExit", " ","fInSideDipoleExit_best"}, { "gtrack_nsp", " Number of space points in golden track ", "fNsp_best"}, { "residual", "Residuals", "fResiduals"}, { "residualExclPlane", "Residuals", "fResidualsExclPlane"}, { "wireHitDid","Wire did have matched track hit", "fWire_hit_did"}, { "wireHitShould", "Wire should have matched track hit", "fWire_hit_should"}, { 0 } };
THcDriftChamber (THcDriftChamber.cxx)
RVarDef vars[] = { { "maxhits", "Maximum hits allowed", "fMaxHits" }, { "spacepoints", "Space points of DC", "fNSpacePoints" }, { "nhit", "Number of DC hits", "fNhits" }, { "trawhit", "Number of True Raw hits", "fN_True_RawHits" }, { "stub_x", "", "fSpacePoints.THcSpacePoint.GetStubX()" }, { "stub_xp", "", "fSpacePoints.THcSpacePoint.GetStubXP()" }, { "stub_y", "", "fSpacePoints.THcSpacePoint.GetStubY()" }, { "stub_yp", "", "fSpacePoints.THcSpacePoint.GetStubYP()" }, { "ncombos", "", "fSpacePoints.THcSpacePoint.GetCombos()" }, { 0 } };
THcDriftChamberPlane (THcDriftChamberPlane.cxx)
RVarDef vars[] = { {"raw.wirenum", "List of TDC wire number of all hits in DC", "fRawHits.THcDCHit.GetWireNum()"}, {"wirenum", "List of TDC wire number (select first hit in TDc window", "fHits.THcDCHit.GetWireNum()"}, {"rawnorefcorrtdc", "Raw TDC Values", "fHits.THcDCHit.GetRawNoRefCorrTime()"}, {"rawtdc", "Raw TDC with reference time subtracted Values", "fHits.THcDCHit.GetRawTime()"}, {"time","Drift times", "fHits.THcDCHit.GetTime()"}, {"dist","Drift distancess", "fHits.THcDCHit.GetDist()"}, {"nhit", "Number of hits", "GetNHits()"}, { 0 } };
THcHallCSpectrometer (THcHallCSpectrometer.cxx)
RVarDef vars[] = { { "tr.betachisq", "Chi2 of beta", "fTracks.THaTrack.GetBetaChi2()"}, { "tr.PruneSelect", "Prune Select ID", "fPruneSelect"}, { "present", "Trigger Type includes this spectrometer", "fPresent"}, { 0 } };
THcHodoscope (THcHodoscope.cxx)
RVarDef vars[] = { // Move these into THcHallCSpectrometer using track fTracks {"beta", "Beta including track info", "fBeta"}, {"betanotrack", "Beta from scintillator hits", "fBetaNoTrk"}, {"betachisqnotrack", "Chi square of beta from scintillator hits", "fBetaNoTrkChiSq"}, {"fpHitsTime", "Time at focal plane from all hits", "fFPTimeAll"}, {"starttime", "Hodoscope Start Time", "fStartTime"}, {"goodstarttime", "Hodoscope Good Start Time (logical flag)", "fGoodStartTime"}, {"goodscinhit", "Hit in fid area", "fGoodScinHits"}, {"TimeHist_Sigma", "", "fTimeHist_Sigma"}, {"TimeHist_Peak", "", "fTimeHist_Peak"}, {"TimeHist_Hits", "", "fTimeHist_Hits"}, { 0 } };
THcPrimaryKine (THcPrimaryKine.cxx)
RVarDef vars[] = { { "Q2", "4-momentum transfer squared (GeV^2)", "fQ2" }, { "omega", "Energy transfer (GeV)", "fOmega" }, { "W2", "Invariant mass (GeV^2) for Mp ", "fW2" }, { "W", "Sqrt(Invariant mass) for Mp ", "fW" }, { "x_bj", "Bjorken x", "fXbj" }, { "scat_ang_rad", "Scattering angle (rad)", "fScatAngle" }, { "scat_ang_deg", "Scattering angle (deg)", "fScatAngle_deg" }, { "epsilon", "Virtual photon polarization factor", "fEpsilon" }, { "q3m", "Magnitude of 3-momentum transfer", "fQ3mag" }, { "th_q", "Theta of 3-momentum vector (rad)", "fThetaQ" }, { "ph_q", "Phi of 3-momentum vector (rad)", "fPhiQ" }, { "nu", "Energy transfer (GeV)", "fOmega" }, { "q_x", "x-cmp of Photon vector in the lab", "fQ.X()" }, { "q_y", "y-cmp of Photon vector in the lab", "fQ.Y()" }, { "q_z", "z-cmp of Photon vector in the lab", "fQ.Z()" }, { 0 } };
THcRaster (THcRaster.cxx)
RVarDef vars[] = { {"frxaRawAdc", "Raster XA raw ADC", "FRXA_rawadc"}, {"fryaRawAdc", "Raster YA raw ADC", "FRYA_rawadc"}, {"frxbRawAdc", "Raster XB raw ADC", "FRXB_rawadc"}, {"frybRawAdc", "Raster YB raw ADC", "FRYB_rawadc"}, {"frxa_adc", "Raster XA ADC", "fXA_ADC"}, {"frya_adc", "Raster YA ADC", "fYA_ADC"}, {"frxb_adc", "Raster XB ADC", "fXB_ADC"}, {"fryb_adc", "Raster YB ADC", "fYB_ADC"}, {"fr_xa", "Raster XA position", "fXA_pos"}, {"fr_ya", "Raster YA position", "fYA_pos"}, {"fr_xb", "Raster XB position", "fXB_pos"}, {"fr_yb", "Raster YB position", "fYB_pos"}, {"fr_xbpm_tar", "X BPM at target (+X is beam right)", "fXbpm_tar"}, {"fr_ybpm_tar", "Y BPM at target (+Y is up)", "fYbpm_tar"}, {"fr_xbpmA", "X BPM at BPMA (+X is beam right)", "fXbpm_A"}, {"fr_ybpmA", "Y BPM at BPMA (+Y is up)", "fYbpm_A"}, {"fr_xbpmB", "X BPM at BPMB (+X is beam right)", "fXbpm_B"}, {"fr_ybpmB", "Y BPM at BPMB (+Y is up)", "fYbpm_B"}, {"fr_xbpmC", "X BPM at BPMC (+X is beam right)", "fXbpm_C"}, {"fr_ybpmC", "Y BPM at BPMC (+Y is up)", "fYbpm_C"}, {"ebeam_epics", "Beam energy of epics variable HALLC:p", "fEbeamEpics"}, { 0 } };
THcScintillatorPlane (THcScintillatorPlane.cxx)
RVarDef vars[] = { {"posAdcErrorFlag", "Error Flag for When FPGA Fails", "frPosAdcErrorFlag.THcSignalHit.GetData()"}, {"negAdcErrorFlag", "Error Flag for When FPGA Fails", "frNegAdcErrorFlag.THcSignalHit.GetData()"}, {"posTdcTimeRaw", "List of positive raw TDC values.", "frPosTdcTimeRaw.THcSignalHit.GetData()"}, {"posAdcPedRaw", "List of positive raw ADC pedestals", "frPosAdcPedRaw.THcSignalHit.GetData()"}, {"posAdcPulseIntRaw", "List of positive raw ADC pulse integrals.", "frPosAdcPulseIntRaw.THcSignalHit.GetData()"}, {"posAdcPulseAmpRaw", "List of positive raw ADC pulse amplitudes.", "frPosAdcPulseAmpRaw.THcSignalHit.GetData()"}, {"posAdcPulseTimeRaw", "List of positive raw ADC pulse times.", "frPosAdcPulseTimeRaw.THcSignalHit.GetData()"}, {"posTdcTime", "List of positive TDC values.", "frPosTdcTime.THcSignalHit.GetData()"}, {"posAdcPed", "List of positive ADC pedestals", "frPosAdcPed.THcSignalHit.GetData()"}, {"posAdcPulseInt", "List of positive ADC pulse integrals.", "frPosAdcPulseInt.THcSignalHit.GetData()"}, {"posAdcPulseAmp", "List of positive ADC pulse amplitudes.", "frPosAdcPulseAmp.THcSignalHit.GetData()"}, {"posAdcPulseTime", "List of positive ADC pulse times.", "frPosAdcPulseTime.THcSignalHit.GetData()"}, {"negTdcTimeRaw", "List of negative raw TDC values.", "frNegTdcTimeRaw.THcSignalHit.GetData()"}, {"negAdcPedRaw", "List of negative raw ADC pedestals", "frNegAdcPedRaw.THcSignalHit.GetData()"}, {"negAdcPulseIntRaw", "List of negative raw ADC pulse integrals.", "frNegAdcPulseIntRaw.THcSignalHit.GetData()"}, {"negAdcPulseAmpRaw", "List of negative raw ADC pulse amplitudes.", "frNegAdcPulseAmpRaw.THcSignalHit.GetData()"}, {"negAdcPulseTimeRaw", "List of negative raw ADC pulse times.", "frNegAdcPulseTimeRaw.THcSignalHit.GetData()"}, {"negTdcTime", "List of negative TDC values.", "frNegTdcTime.THcSignalHit.GetData()"}, {"negAdcPed", "List of negative ADC pedestals", "frNegAdcPed.THcSignalHit.GetData()"}, {"negAdcPulseInt", "List of negative ADC pulse integrals.", "frNegAdcPulseInt.THcSignalHit.GetData()"}, {"negAdcPulseAmp", "List of negative ADC pulse amplitudes.", "frNegAdcPulseAmp.THcSignalHit.GetData()"}, {"negAdcPulseTime", "List of negative ADC pulse times.", "frNegAdcPulseTime.THcSignalHit.GetData()"}, {"totNumPosAdcHits", "Total Number of Positive ADC Hits", "fTotNumPosAdcHits"}, // Hodo+ raw ADC multiplicity Int_t {"totNumNegAdcHits", "Total Number of Negative ADC Hits", "fTotNumNegAdcHits"}, // Hodo- raw ADC multiplicity "" {"totNumAdcHits", "Total Number of PMTs Hit (as measured by ADCs)", "fTotNumAdcHits"}, // Hodo raw ADC multiplicity "" {"totNumPosTdcHits", "Total Number of Positive TDC Hits", "fTotNumPosTdcHits"}, // Hodo+ raw TDC multiplicity "" {"totNumNegTdcHits", "Total Number of Negative TDC Hits", "fTotNumNegTdcHits"}, // Hodo- raw TDC multiplicity "" {"totNumTdcHits", "Total Number of PMTs Hits (as measured by TDCs)", "fTotNumTdcHits"}, // Hodo raw TDC multiplicity "" { 0 } }; RVarDef vars[] = { {"nhits", "Number of paddle hits (passed TDC && ADC Min and Max cuts for either end)", "GetNScinHits() "}, {"posTdcCounter", "List of positive TDC counter numbers.", "frPosTdcTimeRaw.THcSignalHit.GetPaddleNumber()"}, //Hodo+ raw TDC occupancy {"posAdcCounter", "List of positive ADC counter numbers.", "frPosAdcPulseIntRaw.THcSignalHit.GetPaddleNumber()"}, //Hodo+ raw ADC occupancy {"negTdcCounter", "List of negative TDC counter numbers.", "frNegTdcTimeRaw.THcSignalHit.GetPaddleNumber()"}, //Hodo- raw TDC occupancy {"negAdcCounter", "List of negative ADC counter numbers.", "frNegAdcPulseIntRaw.THcSignalHit.GetPaddleNumber()"}, //Hodo- raw ADC occupancy {"fptime", "Time at focal plane", "GetFpTime()"}, {"numGoodPosAdcHits", "Number of Good Positive ADC Hits Per PMT", "fNumGoodPosAdcHits"}, // Hodo+ good ADC occupancy - vector<Int_t> {"numGoodNegAdcHits", "Number of Good Negative ADC Hits Per PMT", "fNumGoodNegAdcHits"}, // Hodo- good ADC occupancy - vector <Int_t> {"numGoodPosTdcHits", "Number of Good Positive TDC Hits Per PMT", "fNumGoodPosTdcHits"}, // Hodo+ good TDC occupancy - vector<Int_t> {"numGoodNegTdcHits", "Number of Good Negative TDC Hits Per PMT", "fNumGoodNegTdcHits"}, // Hodo- good TDC occupancy - vector <Int_t> {"totNumGoodPosAdcHits", "Total Number of Good Positive ADC Hits", "fTotNumGoodPosAdcHits"}, // Hodo+ good ADC multiplicity - Int_t {"totNumGoodNegAdcHits", "Total Number of Good Negative ADC Hits", "fTotNumGoodNegAdcHits"}, // Hodo- good ADC multiplicity - Int_t {"totNumGoodAdcHits", "TotalNumber of Good ADC Hits Per PMT", "fTotNumGoodAdcHits"}, // Hodo good ADC multiplicity - Int_t {"totNumGoodPosTdcHits", "Total Number of Good Positive TDC Hits", "fTotNumGoodPosTdcHits"}, // Hodo+ good TDC multiplicity - Int_t {"totNumGoodNegTdcHits", "Total Number of Good Negative TDC Hits", "fTotNumGoodNegTdcHits"}, // Hodo- good TDC multiplicity - Int_t {"totNumGoodTdcHits", "TotalNumber of Good TDC Hits Per PMT", "fTotNumGoodTdcHits"}, // Hodo good TDC multiplicity - Int_t // {"GoodPaddle", "List of Paddle Numbers (passed TDC && ADC Min and Max cuts for either end)", "fHodoHits.THcHodoHit.GetPaddleNumber()"}, {"GoodPosAdcPed", "List of Positive ADC pedestals (passed TDC && ADC Min and Max cuts for either end)", "fGoodPosAdcPed"}, //vector<Double_t> {"GoodNegAdcPed", "List of Negative ADC pedestals (passed TDC && ADC Min and Max cuts for either end)", "fGoodNegAdcPed"}, //vector<Double_t> {"GoodPosAdcMult", "List of Positive ADC Mult (passed TDC && ADC Min and Max cuts for either end)", "fGoodPosAdcMult"}, //vector<Double_t> {"GoodNegAdcMult", "List of Negative ADC Mult (passed TDC && ADC Min and Max cuts for either end)", "fGoodNegAdcMult"}, //vector<Double_t> {"GoodPosAdcHitUsed", "List of Positive ADC Hit Used (passed TDC && ADC Min and Max cuts for either end)", "fGoodPosAdcHitUsed"}, //vector<Double_t> {"GoodNegAdcHitUsed", "List of Negative ADC Hit Used (passed TDC && ADC Min and Max cuts for either end)", "fGoodNegAdcHitUsed"}, //vector<Double_t> {"GoodNegTdcTimeUnCorr", "List of negative TDC values (passed TDC && ADC Min and Max cuts for either end)", "fGoodNegTdcTimeUnCorr"}, //Units ns {"GoodNegTdcTimeCorr", "List of negative corrected TDC values (corrected for PMT offset and ADC)", "fGoodNegTdcTimeCorr"}, {"GoodNegTdcTimeTOFCorr", "List of negative corrected TDC values (corrected for TOF)", "fGoodNegTdcTimeTOFCorr"}, {"GoodNegTdcTimeWalkCorr", "List of negative corrected TDC values (corrected for Time-Walk)", "fGoodNegTdcTimeWalkCorr"}, {"GoodNegAdcPulseInt", "List of negative ADC values (passed TDC && ADC Min and Max cuts for either end)", "fGoodNegAdcPulseInt"}, {"GoodPosTdcTimeUnCorr", "List of positive TDC values (passed TDC && ADC Min and Max cuts for either end)", "fGoodPosTdcTimeUnCorr"}, {"GoodPosTdcTimeCorr", "List of positive corrected TDC values (corrected for PMT offset and ADC)", "fGoodPosTdcTimeCorr"}, {"GoodPosTdcTimeTOFCorr", "List of positive corrected TDC values (corrected for TOF)", "fGoodPosTdcTimeTOFCorr"}, {"GoodPosTdcTimeWalkCorr", "List of positive corrected TDC values (corrected for Time-Walk)", "fGoodPosTdcTimeWalkCorr"}, {"GoodPosAdcPulseInt", "List of positive ADC values (passed TDC && ADC Min and Max cuts for either end)", "fGoodPosAdcPulseInt"}, {"GoodPosAdcPulseAmp", "List of positive ADC peak amp (passed TDC && ADC Min and Max cuts for either end)", "fGoodPosAdcPulseAmp"}, {"GoodNegAdcPulseAmp", "List of Negative ADC peak amp (passed TDC && ADC Min and Max cuts for either end)", "fGoodNegAdcPulseAmp"}, {"GoodPosAdcPulseTime", "List of positive ADC time (passed TDC && ADC Min and Max cuts for either end)", "fGoodPosAdcPulseTime"}, {"GoodNegAdcPulseTime", "List of Negative ADC time (passed TDC && ADC Min and Max cuts for either end)", "fGoodNegAdcPulseTime"}, {"GoodPosAdcTdcDiffTime", "List of positive TDC - ADC time (passed TDC && ADC Min and Max cuts for either end)", "fGoodPosAdcTdcDiffTime"}, {"GoodNegAdcTdcDiffTime", "List of Negative TDC - ADC time (passed TDC && ADC Min and Max cuts for either end)", "fGoodNegAdcTdcDiffTime"}, {"DiffDisTrack", "Difference between track and scintillator position (cm)", "fHitDistance"}, {"DiffDisTrackCorr", "TW Corrected Dist Difference between track and scintillator position (cm)", "fGoodDiffDistTrack"}, {"TrackXPos", "Track X position at plane (cm)", "fTrackXPosition"}, {"TrackYPos", "Track Y position at plane (cm)", "fTrackYPosition"}, {"NumClus", "Number of clusters", "fNumberClusters"}, {"Clus.Pos", "Position of each paddle clusters", "fCluster.THcScintPlaneCluster.GetClusterPosition()"}, {"Clus.Size", "Size of each paddle clusters", "fCluster.THcScintPlaneCluster.GetClusterSize()"}, {"Clus.Flag", "Flag of each paddle clusters", "fCluster.THcScintPlaneCluster.GetClusterFlag()"}, {"Clus.UsedFlag", "USed Flag of each paddle clusters", "fCluster.THcScintPlaneCluster.GetClusterUsedFlag()"}, //{"ngoodhits", "Number of paddle hits (passed tof tolerance and used to determine the focal plane time )", "GetNGoodHits() "}, { 0 } };
THcSecondaryKine (THcSecondaryKine.cxx)
RVarDef vars[] = { { "th_xq", "Polar angle of detected particle with q (rad)", "fTheta_xq" }, { "ph_xq", "Azimuth of detected particle with scattering plane (rad)", "fPhi_xq" }, { "th_bq", "Polar angle of recoil system with q (rad)", "fTheta_bq" }, { "ph_bq", "Azimuth of recoil system with scattering plane (rad)", "fPhi_bq" }, { "xangle", "Angle of detected particle with scattered electron (rad)", "fXangle" }, { "pmiss", "Missing momentum magnitude (GeV), nuclear physics " "definition (-pB)", "fPmiss" }, { "pmiss_x", "x-component of p_miss wrt q (GeV)", "fPmiss_x" }, { "pmiss_y", "y-component of p_miss wrt q (GeV)", "fPmiss_y" }, { "pmiss_z", "z-component of p_miss, along q (GeV)", "fPmiss_z" }, { "emiss_nuc", "Missing energy (GeV), nuclear physics definition " "omega-Tx-Tb", "fEmiss_nuc" }, { "emiss", "Missing energy (GeV), ENGINE definition " "omega-Mt-Ex", "fEmiss" }, { "Mrecoil", "Invariant mass of recoil system (GeV)", "fMrecoil" }, { "Erecoil", "Total energy of recoil system (GeV)", "fErecoil" }, { "Prec_x", "x-component of recoil system in lab (GeV/c)", "fB.X()" }, { "Prec_y", "y-component of recoil system in lab (GeV/c)", "fB.Y()" }, { "Prec_z", "z-component of recoil system in lab (GeV/c)", "fB.Z()" }, { "tx", "Kinetic energy of detected particle (GeV)", "fTX" }, { "tb", "Kinetic energy of recoil system (GeV)", "fTB" }, { "px_cm", "Magnitude of X momentum in CM system (GeV)", "fPX_cm" }, { "thx_cm", "Polar angle of X in CM system wrt q (rad)", "fTheta_x_cm" }, { "phx_cm", "Azimuth of X in CM system wrt q (rad)", "fPhi_x_cm" }, { "thb_cm", "Polar angle of recoil systm in CM wrt q (rad)", "fTheta_b_cm" }, { "phb_cm", "Azimuth of recoil system in CM wrt q (rad)", "fPhi_b_cm" }, { "tx_cm", "Kinetic energy of X in CM (GeV)", "fTX_cm" }, { "tb_cm", "Kinetic energy of B in CM (GeV)", "fTB_cm" }, { "t_tot_cm", "Total CM kinetic energy", "fTtot_cm" }, { "MandelS", "Mandelstam s for secondary vertex (GeV^2)", "fMandelS" }, { "MandelT", "Mandelstam t for secondary vertex (GeV^2)", "fMandelT" }, { "MandelU", "Mandelstam u for secondary vertex (GeV^2)", "fMandelU" }, { 0 } };
THcShowerArray (THcShowerArray.cxx)
RVarDef vars[] = { {"adcPedRaw", "List of raw ADC pedestals", "frAdcPedRaw.THcSignalHit.GetData()"}, {"adcPulseIntRaw", "List of raw ADC pulse integrals.", "frAdcPulseIntRaw.THcSignalHit.GetData()"}, {"adcPulseAmpRaw", "List of raw ADC pulse amplitudes.", "frAdcPulseAmpRaw.THcSignalHit.GetData()"}, {"adcPulseTimeRaw", "List of raw ADC pulse times.", "frAdcPulseTimeRaw.THcSignalHit.GetData()"}, {"adcPed", "List of ADC pedestals", "frAdcPed.THcSignalHit.GetData()"}, {"adcPulseInt", "List of ADC pulse integrals.", "frAdcPulseInt.THcSignalHit.GetData()"}, {"adcPulseAmp", "List of ADC pulse amplitudes.", "frAdcPulseAmp.THcSignalHit.GetData()"}, {"adcPulseTime", "List of ADC pulse times.", "frAdcPulseTime.THcSignalHit.GetData()"}, { 0 } }; RVarDef vars[] = { //{"adchits", "List of ADC hits", "fADCHits.THcSignalHit.GetPaddleNumber()"}, // appears an empty histogram in the root file {"adcErrorFlag", "Error Flag When FPGA Fails", "frAdcErrorFlag.THcSignalHit.GetData()"}, {"adcCounter", "List of ADC counter numbers.", "frAdcPulseIntRaw.THcSignalHit.GetPaddleNumber()"}, //raw occupancy {"numGoodAdcHits", "Number of Good ADC Hits per PMT", "fNumGoodAdcHits" }, //good occupancy {"totNumAdcHits", "Total Number of ADC Hits", "fTotNumAdcHits" }, // raw multiplicity {"totNumGoodAdcHits", "Total Number of Good ADC Hits", "fTotNumGoodAdcHits" }, // good multiplicity {"goodAdcPulseIntRaw", "Good Raw ADC Pulse Integrals", "fGoodAdcPulseIntRaw"}, //this is defined as pulseIntRaw, NOT ADC Amplitude in FillADC_DynamicPedestal() method {"goodAdcPed", "Good ADC Pedestals", "fGoodAdcPed"}, {"goodAdcMult", "Good ADC Multiplicity", "fGoodAdcMult"}, {"goodAdcPulseInt", "Good ADC Pulse Integrals", "fGoodAdcPulseInt"}, //this is defined as pulseInt, which is the pedestal subtracted pulse integrals, and is defined if threshold is passed {"goodAdcPulseAmp", "Good ADC Pulse Amplitudes", "fGoodAdcPulseAmp"}, {"goodAdcPulseTime", "Good ADC Pulse Times", "fGoodAdcPulseTime"}, //this is defined as pulseInt, which is the pedestal subtracted pulse integrals, and is defined if threshold is passed {"goodAdcTdcDiffTime", "Good Hodo Starttime - ADC Pulse Times", "fGoodAdcTdcDiffTime"}, {"e", "Energy Depositions per block", "fE"}, //defined as fE = fA_p*fGain = pulseInt * Gain {"earray", "Energy Deposition in Shower Array", "fEarray"}, //defined as a Double_t and represents a sum of the total deposited energy in the shower counter {"nclust", "Number of clusters", "fNclust" }, //what is the difference between nclust defined here and that in THcShower.cxx ? {"block_clusterID", "Cluster ID number", "fBlock_ClusterID"}, // im NOT very clear about this. it is histogrammed at wither -1 or 0. {"ntracks", "Number of shower tracks", "fNtracks" }, //number of cluster-to-track associations { 0 } };
THcShower (THcShower.cxx)
RVarDef vars[] = { { "nhits", "Number of hits", "fNhits" }, { "nclust", "Number of layer clusters", "fNclust" }, { "nclusttrack", "Number of layer cluster which matched best track","fNclustTrack" }, { "xclusttrack", "X pos of layer cluster which matched best track","fXclustTrack" }, { "xtrack", "X pos of track which matched layer cluster", "fXTrack" }, { "yclusttrack", "Y pos of layer cluster which matched best track","fYclustTrack" }, { "ytrack", "Y pos of track which matched layer cluster", "fYTrack" }, { "etot", "Total energy", "fEtot" }, { "etotnorm", "Total energy divided by Central Momentum", "fEtotNorm" }, { "etrack", "Track energy", "fEtrack" }, { "etracknorm", "Total energy divided by track momentum", "fEtrackNorm" }, { "eprtrack", "Track Preshower energy", "fEPRtrack" }, { "eprtracknorm", "Preshower energy divided by track momentum", "fEPRtrackNorm" }, { "etottracknorm", "Total energy divided by track momentum", "fETotTrackNorm" }, { "ntracks", "Number of shower tracks", "fNtracks" }, { 0 } };
THcShowerPlane (THcShowerPlane.cxx)
RVarDef vars[] = { {"posAdcPedRaw", "List of positive raw ADC pedestals", "frPosAdcPedRaw.THcSignalHit.GetData()"}, {"posAdcPulseIntRaw", "List of positive raw ADC pulse integrals.", "frPosAdcPulseIntRaw.THcSignalHit.GetData()"}, {"posAdcPulseAmpRaw", "List of positive raw ADC pulse amplitudes.", "frPosAdcPulseAmpRaw.THcSignalHit.GetData()"}, {"posAdcPulseTimeRaw", "List of positive raw ADC pulse times.", "frPosAdcPulseTimeRaw.THcSignalHit.GetData()"}, {"posAdcPed", "List of positive ADC pedestals", "frPosAdcPed.THcSignalHit.GetData()"}, {"posAdcPulseInt", "List of positive ADC pulse integrals.", "frPosAdcPulseInt.THcSignalHit.GetData()"}, {"posAdcPulseAmp", "List of positive ADC pulse amplitudes.", "frPosAdcPulseAmp.THcSignalHit.GetData()"}, {"posAdcPulseTime", "List of positive ADC pulse times.", "frPosAdcPulseTime.THcSignalHit.GetData()"}, {"negAdcPedRaw", "List of negative raw ADC pedestals", "frNegAdcPedRaw.THcSignalHit.GetData()"}, {"negAdcPulseIntRaw", "List of negative raw ADC pulse integrals.", "frNegAdcPulseIntRaw.THcSignalHit.GetData()"}, {"negAdcPulseAmpRaw", "List of negative raw ADC pulse amplitudes.", "frNegAdcPulseAmpRaw.THcSignalHit.GetData()"}, {"negAdcPulseTimeRaw", "List of negative raw ADC pulse times.", "frNegAdcPulseTimeRaw.THcSignalHit.GetData()"}, {"negAdcPed", "List of negative ADC pedestals", "frNegAdcPed.THcSignalHit.GetData()"}, {"negAdcPulseInt", "List of negative ADC pulse integrals.", "frNegAdcPulseInt.THcSignalHit.GetData()"}, {"negAdcPulseAmp", "List of negative ADC pulse amplitudes.", "frNegAdcPulseAmp.THcSignalHit.GetData()"}, {"negAdcPulseTime", "List of negative ADC pulse times.", "frNegAdcPulseTime.THcSignalHit.GetData()"}, { 0 } }; RVarDef vars[] = { {"posAdcErrorFlag", "List of positive raw ADC Error Flags", "frPosAdcErrorFlag.THcSignalHit.GetData()"}, {"negAdcErrorFlag", "List of negative raw ADC Error Flags ", "frNegAdcErrorFlag.THcSignalHit.GetData()"}, {"posAdcCounter", "List of positive ADC counter numbers.", "frPosAdcPulseIntRaw.THcSignalHit.GetPaddleNumber()"}, //PreSh+ raw occupancy {"negAdcCounter", "List of negative ADC counter numbers.", "frNegAdcPulseIntRaw.THcSignalHit.GetPaddleNumber()"}, //PreSh- raw occupancy {"totNumPosAdcHits", "Total Number of Positive ADC Hits", "fTotNumPosAdcHits"}, // PreSh+ raw multiplicity {"totNumNegAdcHits", "Total Number of Negative ADC Hits", "fTotNumNegAdcHits"}, // PreSh+ raw multiplicity {"totnumAdcHits", "Total Number of ADC Hits Per PMT", "fTotNumAdcHits"}, // PreSh raw multiplicity {"numGoodPosAdcHits", "Number of Good Positive ADC Hits Per PMT", "fNumGoodPosAdcHits"}, // PreSh occupancy {"numGoodNegAdcHits", "Number of Good Negative ADC Hits Per PMT", "fNumGoodNegAdcHits"}, // PreSh occupancy {"totNumGoodPosAdcHits", "Total Number of Good Positive ADC Hits", "fTotNumGoodPosAdcHits"}, // PreSh multiplicity {"totNumGoodNegAdcHits", "Total Number of Good Negative ADC Hits", "fTotNumGoodNegAdcHits"}, // PreSh multiplicity {"totnumGoodAdcHits", "TotalNumber of Good ADC Hits Per PMT", "fTotNumGoodAdcHits"}, // PreSh multiplicity {"goodPosAdcPulseIntRaw", "Good Positive Raw ADC Pulse Integrals", "fGoodPosAdcPulseIntRaw"}, {"goodNegAdcPulseIntRaw", "Good Negative Raw ADC Pulse Integrals", "fGoodNegAdcPulseIntRaw"}, {"goodPosAdcPed", "Good Positive ADC pedestals", "fGoodPosAdcPed"}, {"goodPosAdcPulseInt", "Good Positive ADC integrals", "fGoodPosAdcPulseInt"}, {"goodPosAdcPulseAmp", "Good Positive ADC amplitudes", "fGoodPosAdcPulseAmp"}, {"goodPosAdcPulseTime","Good Positive ADC times", "fGoodPosAdcPulseTime"}, {"goodPosAdcTdcDiffTime","Good Positive Hodo Start time-ADC times", "fGoodPosAdcTdcDiffTime"}, {"goodNegAdcPed", "Good Negative ADC pedestals", "fGoodNegAdcPed"}, {"goodNegAdcPulseInt", "Good Negative ADC integrals", "fGoodNegAdcPulseInt"}, {"goodNegAdcPulseAmp", "Good Negative ADC amplitudes", "fGoodNegAdcPulseAmp"}, {"goodNegAdcPulseTime","Good Negative ADC times", "fGoodNegAdcPulseTime"}, {"goodNegAdcTdcDiffTime","Good Negative Hodo Start time-ADC times", "fGoodNegAdcTdcDiffTime"}, {"goodPosAdcMult", "Good Positive ADC Multiplicity", "fGoodPosAdcMult"}, {"goodNegAdcMult", "Good Negative ADC Multiplicity", "fGoodNegAdcMult"}, {"epos", "Energy Depositions from Positive Side PMTs", "fEpos"}, {"eneg", "Energy Depositions from Negative Side PMTs", "fEneg"}, {"emean", "Mean Energy Depositions", "fEmean"}, {"eplane", "Energy Deposition per plane", "fEplane"}, {"eplane_pos", "Energy Deposition per plane from pos. PMTs", "fEplane_pos"}, {"eplane_neg", "Energy Deposition per plane from neg. PMTs", "fEplane_neg"}, { 0 } };
Pol He-3 Farm / Disk Resources
General info
- unix group 'c-polhe3' -- general access control
- If you can't access the Farm, or the disk space below, then email brads or saw to be added to the group!
- Farm/Auger project: c-polhe3 -- run farm jobs using this Project
Disk Resources
- /group/c-polhe3 directory (100GB quota)
- /work/hallc/c-polhe3 directory (1 TB quota)
- /volatile/hallc/c-polhe3 directory (2 TB quota, 1 TB guarantee)
Tape Stubs
- /mss/hallc/c-polhe3/raw tape volume for raw CODA data -- this is where you will find the raw data files
- /mss/hallc/c-polhe3/analysis tape volume for analysis output -- this is where you can store personal/analysis output
Calibrations
I expect to break each detector/calibration out into its own wiki page as they mature, but for now I think it is best to work on this single (big) page until we have settled on a "good" template.
Basic Template for each Detector/Calibration Procedure
For each detector subsystem we would like to capture/document the following information:
- A list of all (or at least the most useful) ROOT tree variables associated with this detector
- Description of the calibration algorithm (That is, how is it supposed to work -- what is the logic behind it?)
- Files involved in the calibration
- THc* or THa* modules that are needed/used
- Database files that will be modified
- Scripts that will be used
- Dependencies of this calibration
- Reference time cuts should be verified
- FADC 'hit selection' timing cuts should be verified
- Calorimeter calibration relies on good optics calibration for momentum determination
- If tight timing cuts are used, then the hodoscopes may need to be calibrated first, etc
- ... etc
- Provide a step-by-step "Howto" that shows
- What commands/scripts need to be run, in what order.
- How do you verify that various cuts (ref times, trigger types, etc) are correct before you run the script(s)?
- What do you look for to verify that the code has run correctly after you run the script(s)?
- Common Pitfalls / Things to watch for
- I have found it useful in the past to provide a list of common symptoms and solutions that people may run into.
Drift Chambers
Hodoscopes
- The hodoscope calibration scripts are in
hallc_replay/CALIBRATION/hms_hodo_calib
andhallc_replay/CALIBRATION/shms_hodo_calib
- Carlos Yero wrote a pretty thorough guide to the calibration procedure on DocDB as well as some nice slides from the 2018 analysis workshop
- Here are the steps for the HMS. The procedure is the same for the SHMS.
- Set the flag
htofusinginvadc = 0
to NOT use the hodo parameters from the previous hodoscope calibration procedure. This flag is found onhallc_replay/PARAM/HMS/HODO/
directory. - Replay a run with 1–2 million events.
- In the directory
hallc_replay/CALIBRATION/hms_hodo_calib/
, run the following code:-
root -l timeWalkHistos.C(<run_num>)
- This script takes as input the ROOTfile replayed and creates another ROOTfile with histogram objects that are used to perform the time-walk correction.
-
- To do the time-walk corrections, run the following code:
-
root -l timeWalkCalib.C(<run_num>)
- This script takes as input the ROOTfile containing the histogram objects produced by the previous script. A parameter file containing the time-walk parameters will be produced at
-
hallc_replay/PARAM/HMS/HODO/hhodo_TWcalib_runNUM.param
-
- Rename this file
hhodo_TWcalib.param
-
- Replay the raw data file, once again (1 - 2 M events), with the updated time-walk parameters.
- In the hodoscopoe calibration directory, run the following code:
-
root -l fitHodoCalib.C
- The first part of this script performs a linear fit on the time-walk corrected time vs. hodoscope track to determine the propagation velocity and the cable time difference across each paddle.
- The second part of this code solves a matrix equation for the lambda parameters mentioned in Carlos's guide.
- A parameter file containing the time-walk parameters will be produced at
-
hallc_replay/PARAM/HMS/HODO/hhodo_Vpcalib_runNUM.param
-
- Rename this file
hhodo_Vpcalib.param
-
- Replay the raw data one last time, and check the hodoscope beta distribution.
- You may have to apply a calorimeter cut (for example,
H.cal.etottracknorm>0.7
) to get a clean sample. A good calibration should have beta centered at 1.
- You may have to apply a calorimeter cut (for example,
Calorimeter
- Simona's slides on calorimeter analysis/calibration: [5]
- The calorimeter calibration scripts are in
hallc_replay/CALIBRATION/hms_cal_calib
andhallc_replay/CALIBRATION/shms_cal_calib
- Slides from the 2017 and 2018 analysis workshops are here [6], [7]
How to perform calibration
- Replay a run with HCANA and include the following branches
- HMS
- H.cal.1pr.goodNegAdcPulseInt
- H.cal.1pr.goodPosAdcPulseInt
- H.cal.2ta.goodNegAdcPulseInt
- H.cal.2ta.goodPosAdcPulseInt
- H.cal.3ta.goodNegAdcPulseInt
- H.cal.3ta.goodPosAdcPulseInt
- H.cal.4ta.goodNegAdcPulseInt
- H.cal.4ta.goodPosAdcPulseInt
- H.cal.nclust
- H.dc.ntrack
- H.dc.x_fp
- H.dc.y_fp
- H.dc.xp_fp
- H.dc.yp_fp
- H.gtr.p
- H.gtr.dp
- H.cer.npeSum
- H.hod.beta
- HMS
- SHMS
- P.cal.pr.goodNegAdcPulseInt
- P.cal.pr.goodPosAdcPulseInt
- P.cal.fly.goodAdcPulseInt
- P.dc.x_fp
- P.dc.y_fp
- P.dc.xp_fp
- P.dc.yp_fp
- P.dc.ntrack
- P.gtr.p
- P.gtr.dp
- P.hgcer.npeSum
- P.ngcer.npeSum
- P.hod.beta
- P.cal.nclust
- P.cal.ntracks
- P.cal.fly.nclust
- P.cal.fly.ntracks
- SHMS
- Create a ROOTfiles directory in the calibration directory (hms_cal_calib or shms_cal_calib)
- Modify the input file to select cuts (beta, delta, cherenkov)
- Run the calibration script from HCANA
.x cal_calib.cpp+("prefix_root_file")
Gas Cerenkovs
ROOT Tree Variables
SHMS Heavy Gas Cherenkov (HGC or "hgcer") and Noble Gas Cherenkov (NGC or "ngcer")
- P.h(n)gcer.npeSum
- P.h(n)gcer.totNumAdcHits
- P.h(n)gcer.totNumGoodAdcHits
- P.h(n)gcer.totNumTracksFired
- P.h(n)gcer.totNumTracksMatched
- P.h(n)gcer.xAtCer
- P.h(n)gcer.yAtCer
- T.shms.pH(N)GCER_adcMultiplicity
- T.shms.pH(N)GCER_adcPed
- T.shms.pH(N)GCER_adcPedRaw
- T.shms.pH(N)GCER_adcPulseAmp
- T.shms.pH(N)GCER_adcPulseAmpRaw
- T.shms.pH(N)GCER_adcPulseInt
- T.shms.pH(N)GCER_adcPulseIntRaw
- T.shms.pH(N)GCER_adcPulseTime
- T.shms.pH(N)GCER_adcPulseTimeRaw
- T.shms.pH(N)GCER_tdcMultiplicity
- T.shms.pH(N)GCER_tdcTime
- T.shms.pH(N)GCER_tdcTimeRaw
- Ndata.P.h(n)gcer.adcCounter
- P.h(n)gcer.adcCounter
- Ndata.P.h(n)gcer.adcErrorFlag
- P.h(n)gcer.adcErrorFlag
- Ndata.P.h(n)gcer.adcPed
- P.h(n)gcer.adcPed
- Ndata.P.h(n)gcer.adcPedRaw
- P.h(n)gcer.adcPedRaw
- Ndata.P.h(n)gcer.adcPulseAmp
- P.h(n)gcer.adcPulseAmp
- Ndata.P.h(n)gcer.adcPulseAmpRaw
- P.h(n)gcer.adcPulseAmpRaw
- Ndata.P.h(n)gcer.adcPulseInt
- P.h(n)gcer.adcPulseInt
- Ndata.P.h(n)gcer.adcPulseIntRaw
- P.h(n)gcer.adcPulseIntRaw
- Ndata.P.h(n)gcer.adcPulseTime
- P.h(n)gcer.adcPulseTime
- Ndata.P.h(n)gcer.adcPulseTimeRaw
- P.h(n)gcer.adcPulseTimeRaw
- Ndata.P.h(n)gcer.goodAdcHitUsed
- P.h(n)gcer.goodAdcHitUsed
- Ndata.P.h(n)gcer.goodAdcMult
- P.h(n)gcer.goodAdcMult
- Ndata.P.h(n)gcer.goodAdcPed
- P.h(n)gcer.goodAdcPed
- Ndata.P.h(n)gcer.goodAdcPulseAmp
- P.h(n)gcer.goodAdcPulseAmp
- Ndata.P.h(n)gcer.goodAdcPulseInt
- P.h(n)gcer.goodAdcPulseAmp
- Ndata.P.h(n)gcer.goodAdcPulseIntRaw
- P.h(n)gcer.goodAdcPulseInt
- Ndata.P.h(n)gcer.goodAdcPulseTime
- P.h(n)gcer.goodAdcPulseTime
- Ndata.P.h(n)gcer.goodAdcTdcDiffTime
- P.h(n)gcer.goodAdcTdcDiffTime
- Ndata.P.h(n)gcer.npe
- P.h(n)gcer.npe
- Ndata.P.h(n)gcer.numAdcHits
- P.h(n)gcer.numAdcHits
- Ndata.P.h(n)gcer.numGoodAdcHits
- P.h(n)gcer.numGoodAdcHits
- Ndata.P.h(n)gcer.numTracksFired
- P.h(n)gcer.numGoodAdcHits
- Ndata.P.h(n)gcer.numTracksMatched
- P.h(n)gcer.numTracksMatched
Calibration Algorithm
- There are two methods used to calibrate the gas Cherenkovs:
- The first - most straightforward - method is to identify the single photo-electron (SPE) peak from the ADC readout (and the oscilloscope). The pulse amplitudes of the PMTs are read out using FADCs and integrated to produce the pulse integrals. These histograms are then fitted along the range of the SPE signal to find the mean, which gives the number of picocoulombs for 1 photo-electron. This is the "adc_to_npe" calibration coefficient, which is then manually added to the parameter files located in
hallc_replay/PARAM/HMS/CER/hcer_calib.param
for the HMS andhallc_replay/PARAM/SHMS/HGCER/phgcer_calib.param
for the SHMS HGC- Identifying SPE signals requires only very little light, so beam isn't needed. These calibrations are done using cosmics
- See Simona Malace's elog entry on an HMS cherenkov calibration
- Clear SPE spectra hasn't been attainable with the SHMS NGC, so a second method is used to calibrate it. This is done for each PMT at a time by selecting electrons whose Cherenkov light was reflected on one PMT only. A calorimeter cut, timing cut, graphical X and Y cuts at the mirror planes, and cuts to ensure that very low pulse integrals are seen on all other PMTs (except for the one under calibration) are all needed. Once these are applied, the pulse integral histograms are fitted to get the number of photoelectrons (npe = μ²/σ²) and then the expected integral per single photo-electron (spe = μ/npe), which is the "adc_to_npe" calibration coefficient manually added to the parameter file located in
hallc_replay/PARAM/SHMS/NGCER/pngcer_calib.param
- See Simona Malace's elog entry on an SHMS NGC cherenkov calibration for a more thorough explanation
- See also Burcu Duran's notes on this type of calibration, a student who's done extensive PID studies with the NGC for the J/Psi experiment: SHMS NGCER Calib.pdf
- The first - most straightforward - method is to identify the single photo-electron (SPE) peak from the ADC readout (and the oscilloscope). The pulse amplitudes of the PMTs are read out using FADCs and integrated to produce the pulse integrals. These histograms are then fitted along the range of the SPE signal to find the mean, which gives the number of picocoulombs for 1 photo-electron. This is the "adc_to_npe" calibration coefficient, which is then manually added to the parameter files located in
- Once these calibration constants are found and implemented, replaying the run should result in the npe distribution with the single photo-electron peak centered around 1 (H.cer.npe[0] {H.cer.goodAdcMult[0]==1} for example, in the first elog post above, where indices [0] and [1] correspond to one of the two PMTs in the HMS cherenkov)
Needed Files
- The calibration scripts for the gas cherenkovs are located in:
hallc_replay/hms_cer_calib
for the HMS gas cherenkov andhallc_replay/shms_hgcer_calib
for the SHMS heavy gas cherenkov. - You will need to have replayed either the HMS or SHMS run, depending on which calibration you're doing, so that the appropriate root file has been generated.
- If the
-all
option was used, then the file will be in the form of:(s)hms_replay_production_all_XXXX_-1.root
whereXXXX
is the run number - If a certain number of events was chosen, then the file will be in the form of:
(s)hms_replay_production_XXXX__XXXX.root
with the run number and number of events
- If the
How to Run the Calibration
- First, always remember to load the Pol He3 software to properly set your environment:
source /group/c-polhe3/software/setup.sh
- For the HMS gas cherenkov calibration, go to
/hallc_replay/CALIBRATION/hms_cer_calib
and typeroot -l "run_cal.C(RunNum,NumEvents)"
where-1
is an option for NumEvents if a full replay was done- You will be prompted to enter 1 if it was a coincidence run. For our experiments, it won't be. Enter 0.
- Enter
showall
when prompted to "enter options for calibration." - The ADC-to-NPE conversion value will be outputted to the terminal for PMT 1 and PMT 2, and can be seen as the mean displayed in the Pulse Integral histograms.
- You'll be asked if you want to update the calibration constants with the better estimate. If you type "y," then a new parameters file called
hcer_calib_XXXX.param
for that specific run number will be generated and stored inhallc_replay/PARAM/HMS/CER