From 088a2e57335bf0aa4fd292f08cfde564735c9887 Mon Sep 17 00:00:00 2001 From: ehrlich-uva Date: Thu, 3 Oct 2024 22:47:32 -0500 Subject: [PATCH 1/4] updated CRV EWM/time simulation --- CRVResponse/fcl/prolog_v11.fcl | 18 +-- CRVResponse/src/CrvPhotonGenerator_module.cc | 101 +++++++-------- .../src/CrvSiPMChargeGenerator_module.cc | 121 +++++++++++------- .../src/CrvWaveformsGenerator_module.cc | 110 ++++++++++------ .../test/wideband/wideband4modules.fcl | 2 +- 5 files changed, 200 insertions(+), 152 deletions(-) diff --git a/CRVResponse/fcl/prolog_v11.fcl b/CRVResponse/fcl/prolog_v11.fcl index 65a37268d6..d98c50406d 100644 --- a/CRVResponse/fcl/prolog_v11.fcl +++ b/CRVResponse/fcl/prolog_v11.fcl @@ -9,6 +9,11 @@ #include "Offline/CommonMC/fcl/prolog.fcl" BEGIN_PROLOG + DigitizationRange: + { + digitizationStart : 175.0 //ns after EWM (375ns...400ns after POT) + digitizationEnd : 1495.0 //ns after EWM (1695ns...1720ns after POT) + } CrvSteps: { module_type : CrvStepsFromStepPointMCs @@ -85,17 +90,15 @@ BEGIN_PROLOG photonYieldVariationCutoffLow :-0.2 //the photon yield variation is cut off at 20% below the mean photonYieldVariationCutoffHigh : 0.2 //the photon yield variation is cut off at 20% above the mean //note: if measured deviations are used, the cutoffs should be set to the maximum values - digitizationStart : 400.0 //400ns - digitizationEnd : 1695.0 //1695ns - digitizationStartMargin : 50.0 //50ns + digitizationRange : @local::DigitizationRange + digitizationStartMargin : 50.0 //ns start recording earlier to account for photon travel times and electronics response times } CrvSiPMCharges: { module_type : CrvSiPMChargeGenerator crvPhotonsModuleLabel : "CrvPhotons" - digitizationStart : 400.0 //400ns - digitizationEnd : 1695.0 //1695ns - digitizationStartMargin : 50.0 //50ns + digitizationRange : @local::DigitizationRange + digitizationStartMargin : 50.0 //ns start recording earlier to account for electronics response times nPixelsX : 40 nPixelsY : 40 @@ -126,8 +129,7 @@ BEGIN_PROLOG { module_type : CrvWaveformsGenerator crvSiPMChargesModuleLabel : "CrvSiPMCharges" - digitizationStart : 400.0 //400ns - digitizationEnd : 1695.0 //1695ns + digitizationRange : @local::DigitizationRange singlePEWaveformFileName : "Offline/CRVResponse/data/singlePEWaveform_v3.txt" singlePEWaveformPrecision : 0.5 //0.5 ns singlePEWaveformStretchFactor: 1.047 //1.047 for singlePEWaveform_v3.txt //from comparison with testbeam data diff --git a/CRVResponse/src/CrvPhotonGenerator_module.cc b/CRVResponse/src/CrvPhotonGenerator_module.cc index 50600f746b..e9690ab802 100644 --- a/CRVResponse/src/CrvPhotonGenerator_module.cc +++ b/CRVResponse/src/CrvPhotonGenerator_module.cc @@ -56,6 +56,11 @@ namespace mu2e public: using Name=fhicl::Name; using Comment=fhicl::Comment; + struct DigitizationRangeStruct + { + fhicl::Atom digitizationStart{ Name("digitizationStart"), Comment("start of digitization after EWM")}; + fhicl::Atom digitizationEnd{ Name("digitizationEnd"), Comment("end of digitization after EWM")}; + }; struct Config { fhicl::Atom debug{ Name("debugLevel"),Comment("Debug Level"), 0}; @@ -69,8 +74,7 @@ namespace mu2e fhicl::Atom photonYieldVariationScale{ Name("photonYieldVariationScale"),Comment("scale factor of the photon yield variation")}; fhicl::Atom photonYieldVariationCutoffLow{ Name("photonYieldVariationCutoffLow"),Comment("lower cutoff at photon yield variation")}; fhicl::Atom photonYieldVariationCutoffHigh{ Name("photonYieldVariationCutoffHigh"),Comment("upper cutoff at photon yield variation")}; - fhicl::Atom digitizationStart{ Name("digitizationStart"), Comment("start of digitization")}; - fhicl::Atom digitizationEnd{ Name("digitizationEnd"), Comment("end of digitization")}; + fhicl::Table digitizationRange{ Name("digitizationRange"), Comment("start/end of digitization after EWM")}; fhicl::Atom digitizationStartMargin{ Name("digitizationStartMargin"), Comment("time window before digitization starts to account for photon travel time and electronics response.")}; fhicl::Atom eventWindowMarkerTag{ Name("eventWindowMarkerTag"), Comment("EventWindowMarker producer"),"EWMProducer" }; @@ -82,7 +86,6 @@ namespace mu2e void beginRun(art::Run& r); private: - int _debug; std::vector _moduleLabels; std::vector _processNames; @@ -102,39 +105,36 @@ namespace mu2e double _photonYieldVariationCutoffHigh; //On-spill + //-Event length: 1695ns (microbunch period) //-Digitization window - //---needs to start about 100ns before the tracker digitization - // to catch cosmic ray muons which may cause signals in the tracker. - //---nominal: 400ns ... 1750ns (in proton time frame) - //---gets adjusted for jitter + //---EWM arrives between 200ns and 225ns after protons + // (200ns after first clock tick after arrival of protons on target) + // (25ns jitter due to DAQ clock period) + // event window length varies between 1675ns and 1700ns + //---start recording at 400ns (--> 400ns-225ns=175ns after EWM) + //---end recording at the next microbunch at 1695ns (--> 1695ns-200ns=1495ns after EWM) //-CrvSteps - //---start recording CrvSteps 50ns before digitzation window (i.e. at 350ns) + //---start recording CrvSteps 50ns before digitzation window (--> 125ns after EWM) // to account for photon travel time and electroncs response time. - //---stop recording CrvSteps at end of digitization window (i.e. at 1750ns). - //---these digitization windows are repeated with the microbunch period (1695ns). - //---therefore, the times when CrvSteps should be recorded are - // 350ns+n*1695ns ... 1750ns+i*1695ns with i being an integer. - //---this gives blind times of 1750ns+(i-1)*1695 ... 350ns+i*1695ns - // where CrvSteps should not be recorded. - //---for simplicity only apply one blind time for i=0: 55ns ... 350ns. + //---stop recording CrvSteps at end of digitization window (--> 1495ns after EWM) + //---events are repeated with the microbunch period of 1695ns, but for simplicity, + // CrvSteps outside the digitization window are removed only in the first event //-CrvPhotons //---photons get time wrapped modulus microbunch period (1695ns). - //---photons before the blind time (digitization end - microbunch period = 55ns) - // get move the to the time interval between the end of the microbunch - // period (1695ns) and the end the of the digitization period (1750ns). - //---all other photons before digitization start will be removed. + //---no further consideration of the digitization window for the photons; + // this will be done at the digitization step. // //Off-spill + //-Event length: 100000ns + //-Digitization window + //---full event length //-CrvSteps - //---start recording CrvSteps 50ns before event window start - // to account for photon travel time. - //---stop recording CrvSteps at event window end. + //---record all CrvSteps within event window //-CrvPhotons //---no time wrapping - //---photons outside the event window will be removed. - double _digitizationStart; //400ns - double _digitizationEnd; //1750ns + double _digitizationStart; //175ns after EWM + double _digitizationEnd; //1495ns after EWM double _digitizationStartMargin; //50ns (used to account for photon travel time and electronics response time) art::InputTag _eventWindowMarkerTag; art::InputTag _protonBunchTimeMCTag; @@ -159,8 +159,8 @@ namespace mu2e _photonYieldVariationScale(conf().photonYieldVariationScale()), _photonYieldVariationCutoffLow(conf().photonYieldVariationCutoffLow()), _photonYieldVariationCutoffHigh(conf().photonYieldVariationCutoffHigh()), - _digitizationStart(conf().digitizationStart()), - _digitizationEnd(conf().digitizationEnd()), + _digitizationStart(conf().digitizationRange().digitizationStart()), + _digitizationEnd(conf().digitizationRange().digitizationEnd()), _digitizationStartMargin(conf().digitizationStartMargin()), _eventWindowMarkerTag(conf().eventWindowMarkerTag()), _protonBunchTimeMCTag(conf().protonBunchTimeMCTag()), @@ -256,19 +256,25 @@ namespace mu2e art::Handle eventWindowMarker; event.getByLabel(_eventWindowMarkerTag,eventWindowMarker); EventWindowMarker::SpillType spillType = eventWindowMarker->spillType(); - double eventWindowLength = eventWindowMarker->eventLength(); + //double eventWindowLength = eventWindowMarker->eventLength(); //onspill: 1675ns/1700ns, offspill: 100000ns art::Handle protonBunchTimeMC; event.getByLabel(_protonBunchTimeMCTag, protonBunchTimeMC); - double eventWindowStart = -protonBunchTimeMC->pbtime_; - double eventWindowEnd = eventWindowStart + eventWindowLength; + double EWMarrival = -protonBunchTimeMC->pbtime_; //between 200ns and 225ns (only for onspill) ProditionsHandle eventTimingHandle; - const EventTiming &eventTiming = eventTimingHandle.get(event.id()); - double jitter = eventWindowStart - eventTiming.timeFromProtonsToDRMarker(); + double earliestEWMarrival = eventTimingHandle.get(event.id()).timeFromProtonsToDRMarker(); //always 200ns (only for onspill) - double digitizationStart=_digitizationStart+jitter; - double digitizationEnd=_digitizationEnd+jitter; + //offspill + double startTime=0; + //double endTime=eventWindowLength; + + //onspill + if(spillType==EventWindowMarker::SpillType::onspill) + { + startTime=EWMarrival+_digitizationStart-_digitizationStartMargin; //325ns...350ns + //endTime=EWMarrival+_digitizationEnd; //1695ns...1720ns + } for(size_t j=0; j<_selectors.size(); ++j) { @@ -284,18 +290,8 @@ namespace mu2e double t2 = step.endTime(); if(isnan(t1) || isnan(t2)) continue; //This situation was observed once. Not sure how it happened. - //see explanation above - //On-spill: Ignore CrvSteps between digitizationEnd-microBunchPeriod (i.e. 1750ns-1695ns=55ns) - // and digitizationStart-digitizationStartMargin (i.e. 400ns-50ns=350ns). - //Off-spill: Ignore CrvSteps outside of eventwindowStart-digitizationStartMargin and eventWindowEnd. - if(spillType==EventWindowMarker::SpillType::onspill) - { - if(t1>digitizationEnd-_microBunchPeriod && t2eventWindowEnd) continue; - } + if(t2eventWindowEnd) continue; + timeTmp = fmod(timeTmp-earliestEWMarrival,_microBunchPeriod)+earliestEWMarrival; //time wrap around earliest EWM arrival time } photons.emplace_back(timeTmp,crvStepPtr); } diff --git a/CRVResponse/src/CrvSiPMChargeGenerator_module.cc b/CRVResponse/src/CrvSiPMChargeGenerator_module.cc index 1e821e9380..8e841c1b71 100644 --- a/CRVResponse/src/CrvSiPMChargeGenerator_module.cc +++ b/CRVResponse/src/CrvSiPMChargeGenerator_module.cc @@ -11,7 +11,6 @@ #include "Offline/ConditionsService/inc/ConditionsHandle.hh" #include "Offline/ProditionsService/inc/ProditionsHandle.hh" -#include "Offline/DAQConditions/inc/EventTiming.hh" #include "Offline/DataProducts/inc/EventWindowMarker.hh" #include "Offline/ConfigTools/inc/ConfigFileLookupPolicy.hh" #include "Offline/GeometryService/inc/DetectorSystem.hh" @@ -40,9 +39,42 @@ namespace mu2e { class CrvSiPMChargeGenerator : public art::EDProducer { - public: - explicit CrvSiPMChargeGenerator(fhicl::ParameterSet const& pset); + using Name=fhicl::Name; + using Comment=fhicl::Comment; + struct DigitizationRangeStruct + { + fhicl::Atom digitizationStart{Name("digitizationStart"), Comment("start of digitization after EWM")}; //175.0ns after EWM (375ns...400ns after POT) + fhicl::Atom digitizationEnd{Name("digitizationEnd"), Comment("end of digitization after EWM")}; //1495.0ns after EWM (1695ns...1720ns after POT) + }; + struct Config + { + fhicl::Atom crvPhotonsModuleLabel{Name("crvPhotonsModuleLabel")}; + fhicl::Atom nPixelsX{Name("nPixelsX")}; //40 + fhicl::Atom nPixelsY{Name("nPixelsY")}; //40 + fhicl::Atom overvoltage{Name("overvoltage")}; //3.0V + fhicl::Atom timeConstant{Name("timeConstant")}; //12.0ns + fhicl::Atom capacitance{Name("capacitance")}; //8.84e-14F (per pixel) + fhicl::Table digitizationRange{Name("digitizationRange"), Comment("start/end of digitization after EWM")}; + fhicl::Atom digitizationStartMargin{Name("digitizationStartMargin"), + Comment("time window before digitization starts to account for photon travel time and electronics response.")}; + //50.0ns start recording earlier to account for electronics response times + fhicl::Atom eventWindowMarkerTag{Name("eventWindowMarkerTag"), Comment("EventWindowMarker producer"),"EWMProducer" }; + fhicl::Atom protonBunchTimeMCTag{Name("protonBunchTimeMCTag"), Comment("ProtonBunchTimeMC producer"),"EWMProducer" }; + fhicl::Atom useSipmStatusDB{Name("useSipmStatusDB")}; //false (all channels will be simulated. channels with status bit 1 can be ignored in reco) + fhicl::Sequence > inactivePixels{Name("inactivePixels")}; //{18,18},....,{21,21} + fhicl::Atom photonMapFileName{Name("photonMapFileName")}; + fhicl::Atom avalancheProbParam1{Name("AvalancheProbParam1")}; //0.65 + fhicl::Atom avalancheProbParam2{Name("AvalancheProbParam2")}; //2.7 + fhicl::Atom trapType0Prob{Name("TrapType0Prob")}; //0 + fhicl::Atom trapType1Prob{Name("TrapType1Prob")}; //0 + fhicl::Atom trapType0Lifetime{Name("TrapType0Lifetime")}; //5ns + fhicl::Atom trapType1Lifetime{Name("TrapType1Lifetime")}; //50ns + fhicl::Atom thermalRate{Name("ThermalRate")}; //3.0e-4 ns^-1 300MHz for entire SiPM + fhicl::Atom crossTalkProb{Name("CrossTalkProb")}; //0.04 + }; + using Parameters = art::EDProducer::Table; + explicit CrvSiPMChargeGenerator(const Parameters& conf); void produce(art::Event& e); void beginRun(art::Run &run); @@ -54,8 +86,8 @@ namespace mu2e double _timeConstant; double _capacitance; double _digitizationStart, _digitizationEnd, _digitizationStartMargin; - std::string _eventWindowMarkerLabel; - std::string _protonBunchTimeMCLabel; + art::InputTag _eventWindowMarkerTag; + art::InputTag _protonBunchTimeMCTag; mu2e::ProditionsHandle _sipmStatus; bool _useSipmStatusDB; @@ -73,35 +105,40 @@ namespace mu2e ConfigFileLookupPolicy _resolveFullPath; }; - CrvSiPMChargeGenerator::CrvSiPMChargeGenerator(fhicl::ParameterSet const& pset) : - EDProducer{pset}, - _crvPhotonsModuleLabel(pset.get("crvPhotonsModuleLabel")), - _nPixelsX(pset.get("nPixelsX")), //40 - _nPixelsY(pset.get("nPixelsY")), //40 - _overvoltage(pset.get("overvoltage")), //3.0V - _timeConstant(pset.get("timeConstant")), //12.0ns - _capacitance(pset.get("capacitance")), //8.84e-14F (per pixel) - _digitizationStart(pset.get("digitizationStart")), //400ns - _digitizationEnd(pset.get("digitizationEnd")), //1750ns - _digitizationStartMargin(pset.get("digitizationStartMargin")), //50ns - _eventWindowMarkerLabel(pset.get("eventWindowMarker","EWMProducer")), - _protonBunchTimeMCLabel(pset.get("protonBunchTimeMC","EWMProducer")), - _useSipmStatusDB(pset.get("useSipmStatusDB")), //false (all channels will be simulated. channels with status bit 1 can be ignored in reco) - _inactivePixels(pset.get > >("inactivePixels")), //{18,18},....,{21,21} + CrvSiPMChargeGenerator::CrvSiPMChargeGenerator(const Parameters& conf) : + art::EDProducer{conf}, + _crvPhotonsModuleLabel(conf().crvPhotonsModuleLabel()), + _nPixelsX(conf().nPixelsX()), + _nPixelsY(conf().nPixelsY()), + _overvoltage(conf().overvoltage()), + _timeConstant(conf().timeConstant()), + _capacitance(conf().capacitance()), + _digitizationStart(conf().digitizationRange().digitizationStart()), + _digitizationEnd(conf().digitizationRange().digitizationEnd()), + _digitizationStartMargin(conf().digitizationStartMargin()), + _eventWindowMarkerTag(conf().eventWindowMarkerTag()), + _protonBunchTimeMCTag(conf().protonBunchTimeMCTag()), + _useSipmStatusDB(conf().useSipmStatusDB()), _engine{createEngine(art::ServiceHandle()->getSeed())}, _randFlat{_engine}, _randPoissonQ{_engine}, - _photonMapFileName(pset.get("photonMapFileName")) + _photonMapFileName(conf().photonMapFileName()) { produces(); - _probabilities._avalancheProbParam1 = pset.get("AvalancheProbParam1"); //0.65 - _probabilities._avalancheProbParam2 = pset.get("AvalancheProbParam2"); //2.7 - _probabilities._trapType0Prob = pset.get("TrapType0Prob"); //0 - _probabilities._trapType1Prob = pset.get("TrapType1Prob"); //0 - _probabilities._trapType0Lifetime = pset.get("TrapType0Lifetime"); //5.0ns - _probabilities._trapType1Lifetime = pset.get("TrapType1Lifetime"); //50.0ns - _probabilities._thermalRate = pset.get("ThermalRate"); //3.0e-4 ns^-1 300MHz for entire SiPM - _probabilities._crossTalkProb = pset.get("CrossTalkProb"); //0.05 + const auto inactivePixelsTmp = conf().inactivePixels(); + _inactivePixels.resize(inactivePixelsTmp.size()); + for(size_t i=0; i(inactivePixelsTmp.at(i).at(0),inactivePixelsTmp.at(i).at(1)); + } + _probabilities._avalancheProbParam1=conf().avalancheProbParam1(); //0.65 + _probabilities._avalancheProbParam2=conf().avalancheProbParam2(); //2.7 + _probabilities._trapType0Prob=conf().trapType0Prob(); //0 + _probabilities._trapType1Prob=conf().trapType1Prob(); //0 + _probabilities._trapType0Lifetime=conf().trapType0Lifetime(); //5.0ns + _probabilities._trapType1Lifetime=conf().trapType1Lifetime(); //50.0ns + _probabilities._thermalRate=conf().thermalRate(); //3.0e-4 ns^-1 300MHz for entire SiPM + _probabilities._crossTalkProb=conf().crossTalkProb(); //0.05 std::string fullPhotonMapFileName(_resolveFullPath(_photonMapFileName)); _makeCrvSiPMCharges = boost::shared_ptr(new mu2eCrv::MakeCrvSiPMCharges(_randFlat, _randPoissonQ, fullPhotonMapFileName)); @@ -117,29 +154,27 @@ namespace mu2e std::unique_ptr crvSiPMChargesCollection(new CrvSiPMChargesCollection); art::Handle crvPhotonsCollection; - event.getByLabel(_crvPhotonsModuleLabel,"",crvPhotonsCollection); + event.getByLabel(_crvPhotonsModuleLabel,crvPhotonsCollection); art::Handle eventWindowMarker; - event.getByLabel(_eventWindowMarkerLabel,"",eventWindowMarker); + event.getByLabel(_eventWindowMarkerTag,eventWindowMarker); EventWindowMarker::SpillType spillType = eventWindowMarker->spillType(); + double eventWindowLength = eventWindowMarker->eventLength(); //onspill: 1675ns/1700ns, offspill: 100000ns art::Handle protonBunchTimeMC; - event.getByLabel(_protonBunchTimeMCLabel, protonBunchTimeMC); - double TDC0time = -protonBunchTimeMC->pbtime_; + event.getByLabel(_protonBunchTimeMCTag,protonBunchTimeMC); + double EWMarrival = -protonBunchTimeMC->pbtime_; //between 200ns and 225ns (only for onspill) - ProditionsHandle eventTimingHandle; - const EventTiming &eventTiming = eventTimingHandle.get(event.id()); - double jitter = TDC0time - eventTiming.timeFromProtonsToDRMarker(); + //offspill + double startTime=0; + double endTime=eventWindowLength; - double startTime=_digitizationStart+jitter; - double endTime=_digitizationEnd+jitter; - if(spillType!=EventWindowMarker::SpillType::onspill) + //onspill + if(spillType==EventWindowMarker::SpillType::onspill) { - double eventWindowLength = eventWindowMarker->eventLength(); - startTime = TDC0time; - endTime = startTime + eventWindowLength; + startTime=EWMarrival+_digitizationStart-_digitizationStartMargin; //325ns...350ns + endTime=EWMarrival+_digitizationEnd; //1695ns...1720ns } - startTime -= _digitizationStartMargin; auto const& sipmStatus = _sipmStatus.get(event.id()); diff --git a/CRVResponse/src/CrvWaveformsGenerator_module.cc b/CRVResponse/src/CrvWaveformsGenerator_module.cc index a769858804..29d915b1c9 100644 --- a/CRVResponse/src/CrvWaveformsGenerator_module.cc +++ b/CRVResponse/src/CrvWaveformsGenerator_module.cc @@ -15,7 +15,6 @@ #include "Offline/ProditionsService/inc/ProditionsHandle.hh" #include "Offline/ConfigTools/inc/ConfigFileLookupPolicy.hh" -#include "Offline/DAQConditions/inc/EventTiming.hh" #include "Offline/GeometryService/inc/DetectorSystem.hh" #include "Offline/GeometryService/inc/GeomHandle.hh" #include "Offline/GeometryService/inc/GeometryService.hh" @@ -43,15 +42,43 @@ namespace mu2e { public: - explicit CrvWaveformsGenerator(fhicl::ParameterSet const& pset); + using Name=fhicl::Name; + using Comment=fhicl::Comment; + struct DigitizationRangeStruct + { + fhicl::Atom digitizationStart{Name("digitizationStart"), Comment("start of digitization after EWM")}; //175.0ns after EWM (375ns...400ns after POT) + fhicl::Atom digitizationEnd{Name("digitizationEnd"), Comment("end of digitization after EWM")}; //1495.0ns after EWM (1695ns...1720ns after POT) + }; + struct Config + { + fhicl::Atom crvSiPMChargesModuleLabel{Name("crvSiPMChargesModuleLabel")}; + fhicl::Atom singlePEWaveformFileName{Name("singlePEWaveformFileName")}; + fhicl::Table digitizationRange{Name("digitizationRange"), Comment("start/end of digitization after EWM")}; + fhicl::Atom eventWindowMarkerTag{Name("eventWindowMarkerTag"), Comment("EventWindowMarker producer"),"EWMProducer" }; + fhicl::Atom protonBunchTimeMCTag{Name("protonBunchTimeMCTag"), Comment("ProtonBunchTimeMC producer"),"EWMProducer" }; + fhicl::Atom minVoltage{Name("minVoltage")}; //0.022V (corresponds to 3.5PE) + fhicl::Atom noise{Name("noise")}; + fhicl::Atom timeOffsetScale{Name("timeOffsetScale")}; // 1.0ns (scale factor applied to the database values) + fhicl::Atom timeOffsetCutoffLow{Name("timeOffsetCutoffLow")}; //-3.0ns + fhicl::Atom timeOffsetCutoffHigh{Name("timeOffsetCutoffHigh")}; // 3.0ns + //note: if measured time offsets are used, + //the cutoffs should be set to the maximum values + fhicl::Atom useTimeOffsetDB{Name("useTimeOffsetDB")}; //false, will be applied at reco + fhicl::Atom singlePEWaveformMaxTime{Name("singlePEWaveformMaxTime")}; //100ns + fhicl::Atom singlePEWaveformPrecision{Name("singlePEWaveformPrecision")}; //1.0 ns + fhicl::Atom singlePEWaveformStretchFactor{Name("singlePEWaveformStretchFactor")}; //1.047 + fhicl::Atom singlePEReferenceCharge{Name("singlePEReferenceCharge")}; //2.652e-13 C (the charge which was used to generate the above 1PE waveform) + }; + using Parameters = art::EDProducer::Table; + explicit CrvWaveformsGenerator(const Parameters& conf); void produce(art::Event& e) override; void beginRun(art::Run &run) override; private: std::string _crvSiPMChargesModuleLabel; std::string _singlePEWaveformFileName; - std::string _eventWindowMarkerLabel; - std::string _protonBunchTimeMCLabel; + art::InputTag _eventWindowMarkerTag; + art::InputTag _protonBunchTimeMCTag; boost::shared_ptr _makeCrvWaveforms; @@ -84,28 +111,28 @@ namespace mu2e bool SingleWaveformStart(std::vector &fullWaveform, size_t i); }; - CrvWaveformsGenerator::CrvWaveformsGenerator(fhicl::ParameterSet const& pset) : - EDProducer{pset}, - _crvSiPMChargesModuleLabel(pset.get("crvSiPMChargesModuleLabel")), - _singlePEWaveformFileName(pset.get("singlePEWaveformFileName")), - _eventWindowMarkerLabel(pset.get("eventWindowMarker","EWMProducer")), - _protonBunchTimeMCLabel(pset.get("protonBunchTimeMC","EWMProducer")), - _digitizationStart(pset.get("digitizationStart")), //400ns - _digitizationEnd(pset.get("digitizationEnd")), //1750ns - _minVoltage(pset.get("minVoltage")), //0.022V (corresponds to 3.5PE) - _noise(pset.get("noise")), - _timeOffsetScale(pset.get("timeOffsetScale")), //1.0 (scale factor applied to the database values) - _timeOffsetCutoffLow(pset.get("timeOffsetCutoffLow")), - _timeOffsetCutoffHigh(pset.get("timeOffsetCutoffHigh")), - _useTimeOffsetDB(pset.get("useTimeOffsetDB")), //false, will be applied at reco - _singlePEWaveformMaxTime(pset.get("singlePEWaveformMaxTime")), //100ns + CrvWaveformsGenerator::CrvWaveformsGenerator(const Parameters& conf) : + art::EDProducer{conf}, + _crvSiPMChargesModuleLabel(conf().crvSiPMChargesModuleLabel()), + _singlePEWaveformFileName(conf().singlePEWaveformFileName()), + _eventWindowMarkerTag(conf().eventWindowMarkerTag()), + _protonBunchTimeMCTag(conf().protonBunchTimeMCTag()), + _digitizationStart(conf().digitizationRange().digitizationStart()), + _digitizationEnd(conf().digitizationRange().digitizationEnd()), + _minVoltage(conf().minVoltage()), + _noise(conf().noise()), + _timeOffsetScale(conf().timeOffsetScale()), + _timeOffsetCutoffLow(conf().timeOffsetCutoffLow()), + _timeOffsetCutoffHigh(conf().timeOffsetCutoffHigh()), + _useTimeOffsetDB(conf().useTimeOffsetDB()), + _singlePEWaveformMaxTime(conf().singlePEWaveformMaxTime()), _engine{createEngine(art::ServiceHandle()->getSeed())}, _randFlat{_engine}, _randGaussQ{_engine} { - double singlePEWaveformPrecision(pset.get("singlePEWaveformPrecision")); //1.0 ns - double singlePEWaveformStretchFactor(pset.get("singlePEWaveformStretchFactor")); //1.047 - double singlePEReferenceCharge(pset.get("singlePEReferenceCharge")); //2.652e-13 C (the charge which was used to generate the above 1PE waveform) + double singlePEWaveformPrecision(conf().singlePEWaveformPrecision()); + double singlePEWaveformStretchFactor(conf().singlePEWaveformStretchFactor()); + double singlePEReferenceCharge(conf().singlePEReferenceCharge()); ConfigFileLookupPolicy configFile; _singlePEWaveformFileName = configFile(_singlePEWaveformFileName); _makeCrvWaveforms = boost::shared_ptr(new mu2eCrv::MakeCrvWaveforms()); @@ -121,24 +148,23 @@ namespace mu2e void CrvWaveformsGenerator::produce(art::Event& event) { art::Handle eventWindowMarker; - event.getByLabel(_eventWindowMarkerLabel,"",eventWindowMarker); + event.getByLabel(_eventWindowMarkerTag,eventWindowMarker); EventWindowMarker::SpillType spillType = eventWindowMarker->spillType(); + double eventWindowLength = eventWindowMarker->eventLength(); //onspill: 1675ns/1700ns, offspill: 100000ns art::Handle protonBunchTimeMC; - event.getByLabel(_protonBunchTimeMCLabel, protonBunchTimeMC); - double TDC0time = -protonBunchTimeMC->pbtime_; + event.getByLabel(_protonBunchTimeMCTag, protonBunchTimeMC); + double EWMarrival = -protonBunchTimeMC->pbtime_; //between 200ns and 225ns (only for onspill) - ProditionsHandle eventTimingHandle; - const EventTiming &eventTiming = eventTimingHandle.get(event.id()); - double jitter = TDC0time - eventTiming.timeFromProtonsToDRMarker(); + //offspill + double digitizationStart=0; + double digitizationEnd=eventWindowLength; - double digitizationStart=_digitizationStart+jitter; - double digitizationEnd=_digitizationEnd+jitter; - if(spillType!=EventWindowMarker::SpillType::onspill) + //onspill + if(spillType==EventWindowMarker::SpillType::onspill) { - double eventWindowLength = eventWindowMarker->eventLength(); - digitizationStart = TDC0time; - digitizationEnd = digitizationStart + eventWindowLength; + digitizationStart=EWMarrival+_digitizationStart; //375ns...400ns + digitizationEnd=EWMarrival+_digitizationEnd; //1695ns...1720ns } auto const& calib = _calib.get(event.id()); @@ -186,10 +212,10 @@ namespace mu2e std::vector chargeClusters; FindChargeClusters(timesAndCharges, chargeClusters, timeOffset); - //need to find where this FEB's TDC=0 is located with respect to the global time + //need to find where this FEB's TDC=0 (first point after the EWM arrival) is located with respect to the global time //can be anywhere within the digitization period double digitizationPointShiftFEB=_digitizationPointShiftFEBs[FEB]; - double TDC0timeAdjusted=TDC0time+digitizationPointShiftFEB; //that's the time when TDC=0 for this FEB + double TDC0time=EWMarrival+digitizationPointShiftFEB; //that's the time when TDC=0 for this FEB for(size_t iCluster=0; iCluster fullWaveform; _makeCrvWaveforms->MakeWaveform(chargeClusters[iCluster].timesAndCharges, - fullWaveform, TDCstartTimeAdjusted, CRVDigitizationPeriod); + fullWaveform, TDCstartTime, CRVDigitizationPeriod); _makeCrvWaveforms->AddElectronicNoise(fullWaveform, _noise, _randGaussQ); //break the waveform apart into short pieces (CrvDigiMC::NSamples) and apply the zero suppression @@ -214,7 +240,7 @@ namespace mu2e if(SingleWaveformStart(fullWaveform, i)) //acts as a zero suppression { //start new single waveform - double digiStartTime=TDCstartTimeAdjusted+i*CRVDigitizationPeriod; + double digiStartTime=TDCstartTime+i*CRVDigitizationPeriod; if(digiStartTimedigitizationEnd) continue; //digis cannot start after the digitization interval // if(digiStartTime+(CrvDigiMC::NSamples-1)*CRVDigitizationPeriod>digitizationEnd) continue; //digis cannot end after the digitization interval @@ -223,7 +249,7 @@ namespace mu2e std::array voltages{0}; for(size_t singleWaveformIndex=0; singleWaveformIndexemplace_back(voltages, stepVector, simParticle, digiStartTime, TDC0timeAdjusted, barIndex, SiPM); + crvDigiMCCollection->emplace_back(voltages, stepVector, simParticle, digiStartTime, TDC0time, barIndex, SiPM); } } } diff --git a/CRVResponse/test/wideband/wideband4modules.fcl b/CRVResponse/test/wideband/wideband4modules.fcl index f6e8ce6968..af091efef0 100644 --- a/CRVResponse/test/wideband/wideband4modules.fcl +++ b/CRVResponse/test/wideband/wideband4modules.fcl @@ -9,7 +9,7 @@ services: @local::Services.SimAndReco physics: { producers : { - @table::CommonMC.producers + @table::CommonMC.DigiProducers @table::Common.producers @table::Primary.producers cosmicTimeOffset : @local::Cosmic.cosmicTimeOffset From 20692cdb23b0dc2f2fef44951a6b6669eaa10f50 Mon Sep 17 00:00:00 2001 From: ehrlich-uva Date: Sat, 5 Oct 2024 00:30:37 -0500 Subject: [PATCH 2/4] more changes to CRV timing --- CRVReco/src/CrvRecoPulsesFinder_module.cc | 25 ++++++-- CRVResponse/fcl/prolog_v11.fcl | 12 ++-- CRVResponse/src/CrvPhotonGenerator_module.cc | 60 +++++++++---------- .../src/CrvSiPMChargeGenerator_module.cc | 30 +++++----- .../src/CrvWaveformsGenerator_module.cc | 36 ++++++----- 5 files changed, 85 insertions(+), 78 deletions(-) diff --git a/CRVReco/src/CrvRecoPulsesFinder_module.cc b/CRVReco/src/CrvRecoPulsesFinder_module.cc index c3c99cd44d..9c5815d6a8 100644 --- a/CRVReco/src/CrvRecoPulsesFinder_module.cc +++ b/CRVReco/src/CrvRecoPulsesFinder_module.cc @@ -7,7 +7,9 @@ #include "Offline/CRVReco/inc/MakeCrvRecoPulses.hh" #include "Offline/CosmicRayShieldGeom/inc/CosmicRayShield.hh" +#include "Offline/DAQConditions/inc/EventTiming.hh" #include "Offline/DataProducts/inc/CRSScintillatorBarIndex.hh" +#include "Offline/DataProducts/inc/EventWindowMarker.hh" #include "Offline/CRVConditions/inc/CRVDigitizationPeriod.hh" #include "Offline/CRVConditions/inc/CRVCalib.hh" @@ -60,7 +62,8 @@ namespace mu2e fhicl::Atom pulseThreshold{Name("pulseThreshold"), Comment("fraction of ADC peak used as threshold to determine the pulse time interval for the no-fit option")}; //0.5 fhicl::Atom pulseAreaThreshold{Name("pulseAreaThreshold"), Comment("threshold to determine the pulse area for the the no-fit option")}; //5 fhicl::Atom doublePulseSeparation{Name("doublePulseSeparation"), Comment("fraction of both peaks at which double pulses can be separated in the no-fit option")}; //0.25 - fhicl::Atom protonBunchTimeTag{ Name("protonBunchTimeTag"), Comment("ProtonBunchTime producer"),"EWMProducer" }; + fhicl::Atom eventWindowMarkerTag{Name("eventWindowMarkerTag"), Comment("EventWindowMarker producer"),"EWMProducer"}; + fhicl::Atom protonBunchTimeTag{Name("protonBunchTimeTag"), Comment("ProtonBunchTime producer"),"EWMProducer"}; fhicl::Atom timeOffsetScale{Name("timeOffsetScale"), Comment("scale factor for time offsets from database (use 1.0, if measured values)")}; //1.0 fhicl::Atom timeOffsetCutoffLow{Name("timeOffsetCutoffLow"), Comment("lower cutoff of time offsets (for random values - otherwise set to minimum value)")}; //-3.0ns fhicl::Atom timeOffsetCutoffHigh{Name("timeOffsetCutoffHigh"), Comment("upper cutoff of time offsets (for random values - otherwise set to maximum value)")}; //+3.0ns @@ -80,6 +83,7 @@ namespace mu2e boost::shared_ptr _makeCrvRecoPulses; std::string _crvDigiModuleLabel; + art::InputTag _eventWindowMarkerTag; art::InputTag _protonBunchTimeTag; float _timeOffsetScale; @@ -97,6 +101,7 @@ namespace mu2e CrvRecoPulsesFinder::CrvRecoPulsesFinder(const Parameters& conf) : art::EDProducer(conf), _crvDigiModuleLabel(conf().crvDigiModuleLabel()), + _eventWindowMarkerTag(conf().eventWindowMarkerTag()), _protonBunchTimeTag(conf().protonBunchTimeTag()), _timeOffsetScale(conf().timeOffsetScale()), _timeOffsetCutoffLow(conf().timeOffsetCutoffLow()), @@ -135,9 +140,21 @@ namespace mu2e std::unique_ptr crvRecoPulseCollection(new CrvRecoPulseCollection); double TDC0time = 0; - art::Handle protonBunchTime; - event.getByLabel(_protonBunchTimeTag, protonBunchTime); - if(protonBunchTime.isValid()) TDC0time = -protonBunchTime->pbtime_; + + art::Handle eventWindowMarker; + event.getByLabel(_eventWindowMarkerTag,eventWindowMarker); + EventWindowMarker::SpillType spillType = eventWindowMarker->spillType(); + if(spillType==EventWindowMarker::SpillType::onspill) + { + art::Handle protonBunchTime; + event.getByLabel(_protonBunchTimeTag, protonBunchTime); + if(protonBunchTime.isValid()) + { + ProditionsHandle eventTimingHandle; + const EventTiming &eventTiming = eventTimingHandle.get(event.id()); + TDC0time = -protonBunchTime->pbtime_ - eventTiming.timeFromProtonsToDRMarker(); //0ns...25ns (only for onspill) + } + } art::Handle crvDigiCollection; event.getByLabel(_crvDigiModuleLabel,"",crvDigiCollection); diff --git a/CRVResponse/fcl/prolog_v11.fcl b/CRVResponse/fcl/prolog_v11.fcl index d98c50406d..8a2a522686 100644 --- a/CRVResponse/fcl/prolog_v11.fcl +++ b/CRVResponse/fcl/prolog_v11.fcl @@ -9,11 +9,7 @@ #include "Offline/CommonMC/fcl/prolog.fcl" BEGIN_PROLOG - DigitizationRange: - { - digitizationStart : 175.0 //ns after EWM (375ns...400ns after POT) - digitizationEnd : 1495.0 //ns after EWM (1695ns...1720ns after POT) - } + DigitizationStart: 400.0 //ns after event window start (i.e. 400ns after first clock tick after DR marker) --> 400ns...425ns after DR marker CrvSteps: { module_type : CrvStepsFromStepPointMCs @@ -90,14 +86,14 @@ BEGIN_PROLOG photonYieldVariationCutoffLow :-0.2 //the photon yield variation is cut off at 20% below the mean photonYieldVariationCutoffHigh : 0.2 //the photon yield variation is cut off at 20% above the mean //note: if measured deviations are used, the cutoffs should be set to the maximum values - digitizationRange : @local::DigitizationRange + digitizationStart : @local::DigitizationStart digitizationStartMargin : 50.0 //ns start recording earlier to account for photon travel times and electronics response times } CrvSiPMCharges: { module_type : CrvSiPMChargeGenerator crvPhotonsModuleLabel : "CrvPhotons" - digitizationRange : @local::DigitizationRange + digitizationStart : @local::DigitizationStart digitizationStartMargin : 50.0 //ns start recording earlier to account for electronics response times nPixelsX : 40 @@ -129,7 +125,7 @@ BEGIN_PROLOG { module_type : CrvWaveformsGenerator crvSiPMChargesModuleLabel : "CrvSiPMCharges" - digitizationRange : @local::DigitizationRange + digitizationStart : @local::DigitizationStart singlePEWaveformFileName : "Offline/CRVResponse/data/singlePEWaveform_v3.txt" singlePEWaveformPrecision : 0.5 //0.5 ns singlePEWaveformStretchFactor: 1.047 //1.047 for singlePEWaveform_v3.txt //from comparison with testbeam data diff --git a/CRVResponse/src/CrvPhotonGenerator_module.cc b/CRVResponse/src/CrvPhotonGenerator_module.cc index e9690ab802..15ce810fe7 100644 --- a/CRVResponse/src/CrvPhotonGenerator_module.cc +++ b/CRVResponse/src/CrvPhotonGenerator_module.cc @@ -56,11 +56,6 @@ namespace mu2e public: using Name=fhicl::Name; using Comment=fhicl::Comment; - struct DigitizationRangeStruct - { - fhicl::Atom digitizationStart{ Name("digitizationStart"), Comment("start of digitization after EWM")}; - fhicl::Atom digitizationEnd{ Name("digitizationEnd"), Comment("end of digitization after EWM")}; - }; struct Config { fhicl::Atom debug{ Name("debugLevel"),Comment("Debug Level"), 0}; @@ -74,7 +69,7 @@ namespace mu2e fhicl::Atom photonYieldVariationScale{ Name("photonYieldVariationScale"),Comment("scale factor of the photon yield variation")}; fhicl::Atom photonYieldVariationCutoffLow{ Name("photonYieldVariationCutoffLow"),Comment("lower cutoff at photon yield variation")}; fhicl::Atom photonYieldVariationCutoffHigh{ Name("photonYieldVariationCutoffHigh"),Comment("upper cutoff at photon yield variation")}; - fhicl::Table digitizationRange{ Name("digitizationRange"), Comment("start/end of digitization after EWM")}; + fhicl::Atom digitizationStart{ Name("digitizationStart"), Comment("start of digitization after DAQ event window start")}; fhicl::Atom digitizationStartMargin{ Name("digitizationStartMargin"), Comment("time window before digitization starts to account for photon travel time and electronics response.")}; fhicl::Atom eventWindowMarkerTag{ Name("eventWindowMarkerTag"), Comment("EventWindowMarker producer"),"EWMProducer" }; @@ -107,18 +102,20 @@ namespace mu2e //On-spill //-Event length: 1695ns (microbunch period) //-Digitization window - //---EWM arrives between 200ns and 225ns after protons - // (200ns after first clock tick after arrival of protons on target) - // (25ns jitter due to DAQ clock period) - // event window length varies between 1675ns and 1700ns - //---start recording at 400ns (--> 400ns-225ns=175ns after EWM) - //---end recording at the next microbunch at 1695ns (--> 1695ns-200ns=1495ns after EWM) + //---first DAQ clock tick after DR marker occurs between 0ns and 25ns after protons. + // 25ns jitter is due to the microbunch period not being an integer multiple of the DAQ clock period. + //---these first DAQ clock ticks define the event window. + // due to the above variations, the event window length varies between 1675ns and 1700ns. + //---digitization start: 400ns after event window start (--> 400ns...425ns after DR marker) + //---digitization end: at the end of the event window (i.e. first DAQ clock after the next DR marker), + // which is 1675ns or 1700ns after the event window start //-CrvSteps - //---start recording CrvSteps 50ns before digitzation window (--> 125ns after EWM) + //---start recording CrvSteps 50ns before digitzation window (=350ns after event window start) // to account for photon travel time and electroncs response time. - //---stop recording CrvSteps at end of digitization window (--> 1495ns after EWM) - //---events are repeated with the microbunch period of 1695ns, but for simplicity, - // CrvSteps outside the digitization window are removed only in the first event + //---stop recording CrvSteps at end of digitization window. + //---CrvSteps before 50ns before the digitization window are removed (dead time). + //---CrvSteps after the end of the event window belong to the next event(s). + // for simplicity, no time wrapping and removal of CrvSteps that occur in the dead time will be done. //-CrvPhotons //---photons get time wrapped modulus microbunch period (1695ns). //---no further consideration of the digitization window for the photons; @@ -133,8 +130,7 @@ namespace mu2e //-CrvPhotons //---no time wrapping - double _digitizationStart; //175ns after EWM - double _digitizationEnd; //1495ns after EWM + double _digitizationStart; //400ns after event window start (400ns...425ns after DR marker) double _digitizationStartMargin; //50ns (used to account for photon travel time and electronics response time) art::InputTag _eventWindowMarkerTag; art::InputTag _protonBunchTimeMCTag; @@ -159,8 +155,7 @@ namespace mu2e _photonYieldVariationScale(conf().photonYieldVariationScale()), _photonYieldVariationCutoffLow(conf().photonYieldVariationCutoffLow()), _photonYieldVariationCutoffHigh(conf().photonYieldVariationCutoffHigh()), - _digitizationStart(conf().digitizationRange().digitizationStart()), - _digitizationEnd(conf().digitizationRange().digitizationEnd()), + _digitizationStart(conf().digitizationStart()), _digitizationStartMargin(conf().digitizationStartMargin()), _eventWindowMarkerTag(conf().eventWindowMarkerTag()), _protonBunchTimeMCTag(conf().protonBunchTimeMCTag()), @@ -256,24 +251,24 @@ namespace mu2e art::Handle eventWindowMarker; event.getByLabel(_eventWindowMarkerTag,eventWindowMarker); EventWindowMarker::SpillType spillType = eventWindowMarker->spillType(); - //double eventWindowLength = eventWindowMarker->eventLength(); //onspill: 1675ns/1700ns, offspill: 100000ns - - art::Handle protonBunchTimeMC; - event.getByLabel(_protonBunchTimeMCTag, protonBunchTimeMC); - double EWMarrival = -protonBunchTimeMC->pbtime_; //between 200ns and 225ns (only for onspill) - - ProditionsHandle eventTimingHandle; - double earliestEWMarrival = eventTimingHandle.get(event.id()).timeFromProtonsToDRMarker(); //always 200ns (only for onspill) + double eventWindowLength = eventWindowMarker->eventLength(); //onspill: 1675ns/1700ns, offspill: 100000ns //offspill + double eventWindowStart=0; double startTime=0; - //double endTime=eventWindowLength; + double endTime=eventWindowLength; //onspill if(spillType==EventWindowMarker::SpillType::onspill) { - startTime=EWMarrival+_digitizationStart-_digitizationStartMargin; //325ns...350ns - //endTime=EWMarrival+_digitizationEnd; //1695ns...1720ns + art::Handle protonBunchTimeMC; + event.getByLabel(_protonBunchTimeMCTag, protonBunchTimeMC); + ProditionsHandle eventTimingHandle; + const EventTiming &eventTiming = eventTimingHandle.get(event.id()); + eventWindowStart = -protonBunchTimeMC->pbtime_ - eventTiming.timeFromProtonsToDRMarker(); //0ns...25ns (only for onspill) + + startTime=eventWindowStart+_digitizationStart-_digitizationStartMargin; //350ns...375ns + endTime=eventWindowStart+eventWindowLength; //up to ~1720ns } for(size_t j=0; j<_selectors.size(); ++j) @@ -347,7 +342,8 @@ namespace mu2e double timeTmp=times[itime]; if(spillType==EventWindowMarker::SpillType::onspill) { - timeTmp = fmod(timeTmp-earliestEWMarrival,_microBunchPeriod)+earliestEWMarrival; //time wrap around earliest EWM arrival time + //time wrap around endTime to avoid breaking pulses apart inside the digi window + timeTmp = fmod(timeTmp-(endTime-_microBunchPeriod),_microBunchPeriod)+(endTime-_microBunchPeriod); } photons.emplace_back(timeTmp,crvStepPtr); } diff --git a/CRVResponse/src/CrvSiPMChargeGenerator_module.cc b/CRVResponse/src/CrvSiPMChargeGenerator_module.cc index 8e841c1b71..47f07db647 100644 --- a/CRVResponse/src/CrvSiPMChargeGenerator_module.cc +++ b/CRVResponse/src/CrvSiPMChargeGenerator_module.cc @@ -7,6 +7,7 @@ #include "Offline/CRVConditions/inc/CRVStatus.hh" #include "Offline/CRVResponse/inc/MakeCrvSiPMCharges.hh" #include "Offline/CosmicRayShieldGeom/inc/CosmicRayShield.hh" +#include "Offline/DAQConditions/inc/EventTiming.hh" #include "Offline/DataProducts/inc/CRSScintillatorBarIndex.hh" #include "Offline/ConditionsService/inc/ConditionsHandle.hh" @@ -42,11 +43,6 @@ namespace mu2e public: using Name=fhicl::Name; using Comment=fhicl::Comment; - struct DigitizationRangeStruct - { - fhicl::Atom digitizationStart{Name("digitizationStart"), Comment("start of digitization after EWM")}; //175.0ns after EWM (375ns...400ns after POT) - fhicl::Atom digitizationEnd{Name("digitizationEnd"), Comment("end of digitization after EWM")}; //1495.0ns after EWM (1695ns...1720ns after POT) - }; struct Config { fhicl::Atom crvPhotonsModuleLabel{Name("crvPhotonsModuleLabel")}; @@ -55,7 +51,9 @@ namespace mu2e fhicl::Atom overvoltage{Name("overvoltage")}; //3.0V fhicl::Atom timeConstant{Name("timeConstant")}; //12.0ns fhicl::Atom capacitance{Name("capacitance")}; //8.84e-14F (per pixel) - fhicl::Table digitizationRange{Name("digitizationRange"), Comment("start/end of digitization after EWM")}; + fhicl::Atom digitizationStart{Name("digitizationStart"), + Comment("start of digitization after DAQ event window start")}; + //400ns (400ns...425ns after DR marker) fhicl::Atom digitizationStartMargin{Name("digitizationStartMargin"), Comment("time window before digitization starts to account for photon travel time and electronics response.")}; //50.0ns start recording earlier to account for electronics response times @@ -85,7 +83,7 @@ namespace mu2e double _overvoltage; double _timeConstant; double _capacitance; - double _digitizationStart, _digitizationEnd, _digitizationStartMargin; + double _digitizationStart, _digitizationStartMargin; art::InputTag _eventWindowMarkerTag; art::InputTag _protonBunchTimeMCTag; @@ -113,8 +111,7 @@ namespace mu2e _overvoltage(conf().overvoltage()), _timeConstant(conf().timeConstant()), _capacitance(conf().capacitance()), - _digitizationStart(conf().digitizationRange().digitizationStart()), - _digitizationEnd(conf().digitizationRange().digitizationEnd()), + _digitizationStart(conf().digitizationStart()), _digitizationStartMargin(conf().digitizationStartMargin()), _eventWindowMarkerTag(conf().eventWindowMarkerTag()), _protonBunchTimeMCTag(conf().protonBunchTimeMCTag()), @@ -161,19 +158,22 @@ namespace mu2e EventWindowMarker::SpillType spillType = eventWindowMarker->spillType(); double eventWindowLength = eventWindowMarker->eventLength(); //onspill: 1675ns/1700ns, offspill: 100000ns - art::Handle protonBunchTimeMC; - event.getByLabel(_protonBunchTimeMCTag,protonBunchTimeMC); - double EWMarrival = -protonBunchTimeMC->pbtime_; //between 200ns and 225ns (only for onspill) - //offspill + double eventWindowStart=0; double startTime=0; double endTime=eventWindowLength; //onspill if(spillType==EventWindowMarker::SpillType::onspill) { - startTime=EWMarrival+_digitizationStart-_digitizationStartMargin; //325ns...350ns - endTime=EWMarrival+_digitizationEnd; //1695ns...1720ns + art::Handle protonBunchTimeMC; + event.getByLabel(_protonBunchTimeMCTag, protonBunchTimeMC); + ProditionsHandle eventTimingHandle; + const EventTiming &eventTiming = eventTimingHandle.get(event.id()); + eventWindowStart = -protonBunchTimeMC->pbtime_ - eventTiming.timeFromProtonsToDRMarker(); //0ns...25ns (only for onspill) + + startTime=eventWindowStart+_digitizationStart-_digitizationStartMargin; //350ns...375ns + endTime=eventWindowStart+eventWindowLength; //up to ~1720ns } auto const& sipmStatus = _sipmStatus.get(event.id()); diff --git a/CRVResponse/src/CrvWaveformsGenerator_module.cc b/CRVResponse/src/CrvWaveformsGenerator_module.cc index 29d915b1c9..a4f54ec40b 100644 --- a/CRVResponse/src/CrvWaveformsGenerator_module.cc +++ b/CRVResponse/src/CrvWaveformsGenerator_module.cc @@ -9,6 +9,7 @@ #include "Offline/CRVConditions/inc/CRVCalib.hh" #include "Offline/CRVConditions/inc/CRVDigitizationPeriod.hh" #include "Offline/CRVConditions/inc/CRVOrdinal.hh" +#include "Offline/DAQConditions/inc/EventTiming.hh" #include "Offline/DataProducts/inc/CRSScintillatorBarIndex.hh" #include "Offline/DataProducts/inc/CRVId.hh" #include "Offline/DataProducts/inc/EventWindowMarker.hh" @@ -44,20 +45,15 @@ namespace mu2e public: using Name=fhicl::Name; using Comment=fhicl::Comment; - struct DigitizationRangeStruct - { - fhicl::Atom digitizationStart{Name("digitizationStart"), Comment("start of digitization after EWM")}; //175.0ns after EWM (375ns...400ns after POT) - fhicl::Atom digitizationEnd{Name("digitizationEnd"), Comment("end of digitization after EWM")}; //1495.0ns after EWM (1695ns...1720ns after POT) - }; struct Config { fhicl::Atom crvSiPMChargesModuleLabel{Name("crvSiPMChargesModuleLabel")}; fhicl::Atom singlePEWaveformFileName{Name("singlePEWaveformFileName")}; - fhicl::Table digitizationRange{Name("digitizationRange"), Comment("start/end of digitization after EWM")}; + fhicl::Atom digitizationStart{Name("digitizationStart"), Comment("start of digitization after DAQ event window start")}; //400ns (400ns...425ns after DR marker) fhicl::Atom eventWindowMarkerTag{Name("eventWindowMarkerTag"), Comment("EventWindowMarker producer"),"EWMProducer" }; fhicl::Atom protonBunchTimeMCTag{Name("protonBunchTimeMCTag"), Comment("ProtonBunchTimeMC producer"),"EWMProducer" }; - fhicl::Atom minVoltage{Name("minVoltage")}; //0.022V (corresponds to 3.5PE) - fhicl::Atom noise{Name("noise")}; + fhicl::Atom minVoltage{Name("minVoltage")}; //0.022V (corresponds to 3.5PE) + fhicl::Atom noise{Name("noise")}; //4.0e-4V fhicl::Atom timeOffsetScale{Name("timeOffsetScale")}; // 1.0ns (scale factor applied to the database values) fhicl::Atom timeOffsetCutoffLow{Name("timeOffsetCutoffLow")}; //-3.0ns fhicl::Atom timeOffsetCutoffHigh{Name("timeOffsetCutoffHigh")}; // 3.0ns @@ -82,7 +78,7 @@ namespace mu2e boost::shared_ptr _makeCrvWaveforms; - double _digitizationStart, _digitizationEnd; + double _digitizationStart; double _minVoltage; double _noise; double _timeOffsetScale; @@ -117,8 +113,7 @@ namespace mu2e _singlePEWaveformFileName(conf().singlePEWaveformFileName()), _eventWindowMarkerTag(conf().eventWindowMarkerTag()), _protonBunchTimeMCTag(conf().protonBunchTimeMCTag()), - _digitizationStart(conf().digitizationRange().digitizationStart()), - _digitizationEnd(conf().digitizationRange().digitizationEnd()), + _digitizationStart(conf().digitizationStart()), _minVoltage(conf().minVoltage()), _noise(conf().noise()), _timeOffsetScale(conf().timeOffsetScale()), @@ -152,19 +147,22 @@ namespace mu2e EventWindowMarker::SpillType spillType = eventWindowMarker->spillType(); double eventWindowLength = eventWindowMarker->eventLength(); //onspill: 1675ns/1700ns, offspill: 100000ns - art::Handle protonBunchTimeMC; - event.getByLabel(_protonBunchTimeMCTag, protonBunchTimeMC); - double EWMarrival = -protonBunchTimeMC->pbtime_; //between 200ns and 225ns (only for onspill) - //offspill + double eventWindowStart=0; double digitizationStart=0; double digitizationEnd=eventWindowLength; //onspill if(spillType==EventWindowMarker::SpillType::onspill) { - digitizationStart=EWMarrival+_digitizationStart; //375ns...400ns - digitizationEnd=EWMarrival+_digitizationEnd; //1695ns...1720ns + art::Handle protonBunchTimeMC; + event.getByLabel(_protonBunchTimeMCTag, protonBunchTimeMC); + ProditionsHandle eventTimingHandle; + const EventTiming &eventTiming = eventTimingHandle.get(event.id()); + eventWindowStart = -protonBunchTimeMC->pbtime_ - eventTiming.timeFromProtonsToDRMarker(); //0ns...25ns (only for onspill) + + digitizationStart=eventWindowStart+_digitizationStart; //400ns...425ns + digitizationEnd=eventWindowStart+eventWindowLength; //up to ~1720ns } auto const& calib = _calib.get(event.id()); @@ -212,10 +210,10 @@ namespace mu2e std::vector chargeClusters; FindChargeClusters(timesAndCharges, chargeClusters, timeOffset); - //need to find where this FEB's TDC=0 (first point after the EWM arrival) is located with respect to the global time + //need to find where this FEB's TDC=0 (first point after the event window start, i.e. first clock tick after DR marker) is located with respect to the global time //can be anywhere within the digitization period double digitizationPointShiftFEB=_digitizationPointShiftFEBs[FEB]; - double TDC0time=EWMarrival+digitizationPointShiftFEB; //that's the time when TDC=0 for this FEB + double TDC0time=eventWindowStart+digitizationPointShiftFEB; //that's the time when TDC=0 for this FEB for(size_t iCluster=0; iCluster Date: Sat, 5 Oct 2024 01:02:24 -0500 Subject: [PATCH 3/4] more changes to CRV timing --- CRVResponse/fcl/prolog_v11.fcl | 2 +- CRVResponse/src/CrvPhotonGenerator_module.cc | 8 ++++---- CRVResponse/src/CrvSiPMChargeGenerator_module.cc | 2 +- CRVResponse/src/CrvWaveformsGenerator_module.cc | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/CRVResponse/fcl/prolog_v11.fcl b/CRVResponse/fcl/prolog_v11.fcl index 8a2a522686..a42dcd826a 100644 --- a/CRVResponse/fcl/prolog_v11.fcl +++ b/CRVResponse/fcl/prolog_v11.fcl @@ -9,7 +9,7 @@ #include "Offline/CommonMC/fcl/prolog.fcl" BEGIN_PROLOG - DigitizationStart: 400.0 //ns after event window start (i.e. 400ns after first clock tick after DR marker) --> 400ns...425ns after DR marker + DigitizationStart: 400.0 //ns after event window start (i.e. 400ns after first clock tick after POT) --> 400ns...425ns after POT CrvSteps: { module_type : CrvStepsFromStepPointMCs diff --git a/CRVResponse/src/CrvPhotonGenerator_module.cc b/CRVResponse/src/CrvPhotonGenerator_module.cc index 15ce810fe7..97891bef6b 100644 --- a/CRVResponse/src/CrvPhotonGenerator_module.cc +++ b/CRVResponse/src/CrvPhotonGenerator_module.cc @@ -102,12 +102,12 @@ namespace mu2e //On-spill //-Event length: 1695ns (microbunch period) //-Digitization window - //---first DAQ clock tick after DR marker occurs between 0ns and 25ns after protons. + //---first DAQ clock tick after POT occurs between 0ns and 25ns after protons. // 25ns jitter is due to the microbunch period not being an integer multiple of the DAQ clock period. //---these first DAQ clock ticks define the event window. // due to the above variations, the event window length varies between 1675ns and 1700ns. - //---digitization start: 400ns after event window start (--> 400ns...425ns after DR marker) - //---digitization end: at the end of the event window (i.e. first DAQ clock after the next DR marker), + //---digitization start: 400ns after event window start (--> 400ns...425ns after POT) + //---digitization end: at the end of the event window (i.e. first DAQ clock after the next POT), // which is 1675ns or 1700ns after the event window start //-CrvSteps //---start recording CrvSteps 50ns before digitzation window (=350ns after event window start) @@ -130,7 +130,7 @@ namespace mu2e //-CrvPhotons //---no time wrapping - double _digitizationStart; //400ns after event window start (400ns...425ns after DR marker) + double _digitizationStart; //400ns after event window start (400ns...425ns after POT) double _digitizationStartMargin; //50ns (used to account for photon travel time and electronics response time) art::InputTag _eventWindowMarkerTag; art::InputTag _protonBunchTimeMCTag; diff --git a/CRVResponse/src/CrvSiPMChargeGenerator_module.cc b/CRVResponse/src/CrvSiPMChargeGenerator_module.cc index 47f07db647..1a1718b7f1 100644 --- a/CRVResponse/src/CrvSiPMChargeGenerator_module.cc +++ b/CRVResponse/src/CrvSiPMChargeGenerator_module.cc @@ -53,7 +53,7 @@ namespace mu2e fhicl::Atom capacitance{Name("capacitance")}; //8.84e-14F (per pixel) fhicl::Atom digitizationStart{Name("digitizationStart"), Comment("start of digitization after DAQ event window start")}; - //400ns (400ns...425ns after DR marker) + //400ns (400ns...425ns after POT) fhicl::Atom digitizationStartMargin{Name("digitizationStartMargin"), Comment("time window before digitization starts to account for photon travel time and electronics response.")}; //50.0ns start recording earlier to account for electronics response times diff --git a/CRVResponse/src/CrvWaveformsGenerator_module.cc b/CRVResponse/src/CrvWaveformsGenerator_module.cc index a4f54ec40b..a6a3e56e36 100644 --- a/CRVResponse/src/CrvWaveformsGenerator_module.cc +++ b/CRVResponse/src/CrvWaveformsGenerator_module.cc @@ -49,7 +49,7 @@ namespace mu2e { fhicl::Atom crvSiPMChargesModuleLabel{Name("crvSiPMChargesModuleLabel")}; fhicl::Atom singlePEWaveformFileName{Name("singlePEWaveformFileName")}; - fhicl::Atom digitizationStart{Name("digitizationStart"), Comment("start of digitization after DAQ event window start")}; //400ns (400ns...425ns after DR marker) + fhicl::Atom digitizationStart{Name("digitizationStart"), Comment("start of digitization after DAQ event window start")}; //400ns (400ns...425ns after POT) fhicl::Atom eventWindowMarkerTag{Name("eventWindowMarkerTag"), Comment("EventWindowMarker producer"),"EWMProducer" }; fhicl::Atom protonBunchTimeMCTag{Name("protonBunchTimeMCTag"), Comment("ProtonBunchTimeMC producer"),"EWMProducer" }; fhicl::Atom minVoltage{Name("minVoltage")}; //0.022V (corresponds to 3.5PE) @@ -210,7 +210,7 @@ namespace mu2e std::vector chargeClusters; FindChargeClusters(timesAndCharges, chargeClusters, timeOffset); - //need to find where this FEB's TDC=0 (first point after the event window start, i.e. first clock tick after DR marker) is located with respect to the global time + //need to find where this FEB's TDC=0 (first point after the event window start, i.e. first clock tick after POT) is located with respect to the global time //can be anywhere within the digitization period double digitizationPointShiftFEB=_digitizationPointShiftFEBs[FEB]; double TDC0time=eventWindowStart+digitizationPointShiftFEB; //that's the time when TDC=0 for this FEB From d659d447e8bb358a441b906c1913ad54b54cff4e Mon Sep 17 00:00:00 2001 From: ehrlich-uva Date: Sat, 5 Oct 2024 23:54:06 -0500 Subject: [PATCH 4/4] removed files that don't belong to this PR --- CRVConditions/data/wideband4modules2sides.txt | 1025 ----------------- .../geom/geom_Wideband4modules2sides_v15.txt | 646 ----------- 2 files changed, 1671 deletions(-) delete mode 100644 CRVConditions/data/wideband4modules2sides.txt delete mode 100644 Mu2eG4/geom/geom_Wideband4modules2sides_v15.txt diff --git a/CRVConditions/data/wideband4modules2sides.txt b/CRVConditions/data/wideband4modules2sides.txt deleted file mode 100644 index 1f3914d278..0000000000 --- a/CRVConditions/data/wideband4modules2sides.txt +++ /dev/null @@ -1,1025 +0,0 @@ -Channel ROC FEB FEBchannel -0 1 0 63 -1 1 8 63 -2 1 0 62 -3 1 8 62 -4 1 0 61 -5 1 8 61 -6 1 0 60 -7 1 8 60 -8 1 0 59 -9 1 8 59 -10 1 0 58 -11 1 8 58 -12 1 0 57 -13 1 8 57 -14 1 0 56 -15 1 8 56 -16 1 0 55 -17 1 8 55 -18 1 0 54 -19 1 8 54 -20 1 0 53 -21 1 8 53 -22 1 0 52 -23 1 8 52 -24 1 0 51 -25 1 8 51 -26 1 0 50 -27 1 8 50 -28 1 0 49 -29 1 8 49 -30 1 0 48 -31 1 8 48 -32 1 0 47 -33 1 8 47 -34 1 0 46 -35 1 8 46 -36 1 0 45 -37 1 8 45 -38 1 0 44 -39 1 8 44 -40 1 0 43 -41 1 8 43 -42 1 0 42 -43 1 8 42 -44 1 0 41 -45 1 8 41 -46 1 0 40 -47 1 8 40 -48 1 0 39 -49 1 8 39 -50 1 0 38 -51 1 8 38 -52 1 0 37 -53 1 8 37 -54 1 0 36 -55 1 8 36 -56 1 0 35 -57 1 8 35 -58 1 0 34 -59 1 8 34 -60 1 0 33 -61 1 8 33 -62 1 0 32 -63 1 8 32 -64 1 0 31 -65 1 8 31 -66 1 0 30 -67 1 8 30 -68 1 0 29 -69 1 8 29 -70 1 0 28 -71 1 8 28 -72 1 0 27 -73 1 8 27 -74 1 0 26 -75 1 8 26 -76 1 0 25 -77 1 8 25 -78 1 0 24 -79 1 8 24 -80 1 0 23 -81 1 8 23 -82 1 0 22 -83 1 8 22 -84 1 0 21 -85 1 8 21 -86 1 0 20 -87 1 8 20 -88 1 0 19 -89 1 8 19 -90 1 0 18 -91 1 8 18 -92 1 0 17 -93 1 8 17 -94 1 0 16 -95 1 8 16 -96 1 0 15 -97 1 8 15 -98 1 0 14 -99 1 8 14 -100 1 0 13 -101 1 8 13 -102 1 0 12 -103 1 8 12 -104 1 0 11 -105 1 8 11 -106 1 0 10 -107 1 8 10 -108 1 0 9 -109 1 8 9 -110 1 0 8 -111 1 8 8 -112 1 0 7 -113 1 8 7 -114 1 0 6 -115 1 8 6 -116 1 0 5 -117 1 8 5 -118 1 0 4 -119 1 8 4 -120 1 0 3 -121 1 8 3 -122 1 0 2 -123 1 8 2 -124 1 0 1 -125 1 8 1 -126 1 0 0 -127 1 8 0 -128 1 1 63 -129 1 9 63 -130 1 1 62 -131 1 9 62 -132 1 1 61 -133 1 9 61 -134 1 1 60 -135 1 9 60 -136 1 1 59 -137 1 9 59 -138 1 1 58 -139 1 9 58 -140 1 1 57 -141 1 9 57 -142 1 1 56 -143 1 9 56 -144 1 1 55 -145 1 9 55 -146 1 1 54 -147 1 9 54 -148 1 1 53 -149 1 9 53 -150 1 1 52 -151 1 9 52 -152 1 1 51 -153 1 9 51 -154 1 1 50 -155 1 9 50 -156 1 1 49 -157 1 9 49 -158 1 1 48 -159 1 9 48 -160 1 1 47 -161 1 9 47 -162 1 1 46 -163 1 9 46 -164 1 1 45 -165 1 9 45 -166 1 1 44 -167 1 9 44 -168 1 1 43 -169 1 9 43 -170 1 1 42 -171 1 9 42 -172 1 1 41 -173 1 9 41 -174 1 1 40 -175 1 9 40 -176 1 1 39 -177 1 9 39 -178 1 1 38 -179 1 9 38 -180 1 1 37 -181 1 9 37 -182 1 1 36 -183 1 9 36 -184 1 1 35 -185 1 9 35 -186 1 1 34 -187 1 9 34 -188 1 1 33 -189 1 9 33 -190 1 1 32 -191 1 9 32 -192 1 1 31 -193 1 9 31 -194 1 1 30 -195 1 9 30 -196 1 1 29 -197 1 9 29 -198 1 1 28 -199 1 9 28 -200 1 1 27 -201 1 9 27 -202 1 1 26 -203 1 9 26 -204 1 1 25 -205 1 9 25 -206 1 1 24 -207 1 9 24 -208 1 1 23 -209 1 9 23 -210 1 1 22 -211 1 9 22 -212 1 1 21 -213 1 9 21 -214 1 1 20 -215 1 9 20 -216 1 1 19 -217 1 9 19 -218 1 1 18 -219 1 9 18 -220 1 1 17 -221 1 9 17 -222 1 1 16 -223 1 9 16 -224 1 1 15 -225 1 9 15 -226 1 1 14 -227 1 9 14 -228 1 1 13 -229 1 9 13 -230 1 1 12 -231 1 9 12 -232 1 1 11 -233 1 9 11 -234 1 1 10 -235 1 9 10 -236 1 1 9 -237 1 9 9 -238 1 1 8 -239 1 9 8 -240 1 1 7 -241 1 9 7 -242 1 1 6 -243 1 9 6 -244 1 1 5 -245 1 9 5 -246 1 1 4 -247 1 9 4 -248 1 1 3 -249 1 9 3 -250 1 1 2 -251 1 9 2 -252 1 1 1 -253 1 9 1 -254 1 1 0 -255 1 9 0 -256 1 2 63 -257 1 10 63 -258 1 2 62 -259 1 10 62 -260 1 2 61 -261 1 10 61 -262 1 2 60 -263 1 10 60 -264 1 2 59 -265 1 10 59 -266 1 2 58 -267 1 10 58 -268 1 2 57 -269 1 10 57 -270 1 2 56 -271 1 10 56 -272 1 2 55 -273 1 10 55 -274 1 2 54 -275 1 10 54 -276 1 2 53 -277 1 10 53 -278 1 2 52 -279 1 10 52 -280 1 2 51 -281 1 10 51 -282 1 2 50 -283 1 10 50 -284 1 2 49 -285 1 10 49 -286 1 2 48 -287 1 10 48 -288 1 2 47 -289 1 10 47 -290 1 2 46 -291 1 10 46 -292 1 2 45 -293 1 10 45 -294 1 2 44 -295 1 10 44 -296 1 2 43 -297 1 10 43 -298 1 2 42 -299 1 10 42 -300 1 2 41 -301 1 10 41 -302 1 2 40 -303 1 10 40 -304 1 2 39 -305 1 10 39 -306 1 2 38 -307 1 10 38 -308 1 2 37 -309 1 10 37 -310 1 2 36 -311 1 10 36 -312 1 2 35 -313 1 10 35 -314 1 2 34 -315 1 10 34 -316 1 2 33 -317 1 10 33 -318 1 2 32 -319 1 10 32 -320 1 2 31 -321 1 10 31 -322 1 2 30 -323 1 10 30 -324 1 2 29 -325 1 10 29 -326 1 2 28 -327 1 10 28 -328 1 2 27 -329 1 10 27 -330 1 2 26 -331 1 10 26 -332 1 2 25 -333 1 10 25 -334 1 2 24 -335 1 10 24 -336 1 2 23 -337 1 10 23 -338 1 2 22 -339 1 10 22 -340 1 2 21 -341 1 10 21 -342 1 2 20 -343 1 10 20 -344 1 2 19 -345 1 10 19 -346 1 2 18 -347 1 10 18 -348 1 2 17 -349 1 10 17 -350 1 2 16 -351 1 10 16 -352 1 2 15 -353 1 10 15 -354 1 2 14 -355 1 10 14 -356 1 2 13 -357 1 10 13 -358 1 2 12 -359 1 10 12 -360 1 2 11 -361 1 10 11 -362 1 2 10 -363 1 10 10 -364 1 2 9 -365 1 10 9 -366 1 2 8 -367 1 10 8 -368 1 2 7 -369 1 10 7 -370 1 2 6 -371 1 10 6 -372 1 2 5 -373 1 10 5 -374 1 2 4 -375 1 10 4 -376 1 2 3 -377 1 10 3 -378 1 2 2 -379 1 10 2 -380 1 2 1 -381 1 10 1 -382 1 2 0 -383 1 10 0 -384 1 3 63 -385 1 11 63 -386 1 3 62 -387 1 11 62 -388 1 3 61 -389 1 11 61 -390 1 3 60 -391 1 11 60 -392 1 3 59 -393 1 11 59 -394 1 3 58 -395 1 11 58 -396 1 3 57 -397 1 11 57 -398 1 3 56 -399 1 11 56 -400 1 3 55 -401 1 11 55 -402 1 3 54 -403 1 11 54 -404 1 3 53 -405 1 11 53 -406 1 3 52 -407 1 11 52 -408 1 3 51 -409 1 11 51 -410 1 3 50 -411 1 11 50 -412 1 3 49 -413 1 11 49 -414 1 3 48 -415 1 11 48 -416 1 3 47 -417 1 11 47 -418 1 3 46 -419 1 11 46 -420 1 3 45 -421 1 11 45 -422 1 3 44 -423 1 11 44 -424 1 3 43 -425 1 11 43 -426 1 3 42 -427 1 11 42 -428 1 3 41 -429 1 11 41 -430 1 3 40 -431 1 11 40 -432 1 3 39 -433 1 11 39 -434 1 3 38 -435 1 11 38 -436 1 3 37 -437 1 11 37 -438 1 3 36 -439 1 11 36 -440 1 3 35 -441 1 11 35 -442 1 3 34 -443 1 11 34 -444 1 3 33 -445 1 11 33 -446 1 3 32 -447 1 11 32 -448 1 3 31 -449 1 11 31 -450 1 3 30 -451 1 11 30 -452 1 3 29 -453 1 11 29 -454 1 3 28 -455 1 11 28 -456 1 3 27 -457 1 11 27 -458 1 3 26 -459 1 11 26 -460 1 3 25 -461 1 11 25 -462 1 3 24 -463 1 11 24 -464 1 3 23 -465 1 11 23 -466 1 3 22 -467 1 11 22 -468 1 3 21 -469 1 11 21 -470 1 3 20 -471 1 11 20 -472 1 3 19 -473 1 11 19 -474 1 3 18 -475 1 11 18 -476 1 3 17 -477 1 11 17 -478 1 3 16 -479 1 11 16 -480 1 3 15 -481 1 11 15 -482 1 3 14 -483 1 11 14 -484 1 3 13 -485 1 11 13 -486 1 3 12 -487 1 11 12 -488 1 3 11 -489 1 11 11 -490 1 3 10 -491 1 11 10 -492 1 3 9 -493 1 11 9 -494 1 3 8 -495 1 11 8 -496 1 3 7 -497 1 11 7 -498 1 3 6 -499 1 11 6 -500 1 3 5 -501 1 11 5 -502 1 3 4 -503 1 11 4 -504 1 3 3 -505 1 11 3 -506 1 3 2 -507 1 11 2 -508 1 3 1 -509 1 11 1 -510 1 3 0 -511 1 11 0 -512 1 4 63 -513 1 12 63 -514 1 4 62 -515 1 12 62 -516 1 4 61 -517 1 12 61 -518 1 4 60 -519 1 12 60 -520 1 4 59 -521 1 12 59 -522 1 4 58 -523 1 12 58 -524 1 4 57 -525 1 12 57 -526 1 4 56 -527 1 12 56 -528 1 4 55 -529 1 12 55 -530 1 4 54 -531 1 12 54 -532 1 4 53 -533 1 12 53 -534 1 4 52 -535 1 12 52 -536 1 4 51 -537 1 12 51 -538 1 4 50 -539 1 12 50 -540 1 4 49 -541 1 12 49 -542 1 4 48 -543 1 12 48 -544 1 4 47 -545 1 12 47 -546 1 4 46 -547 1 12 46 -548 1 4 45 -549 1 12 45 -550 1 4 44 -551 1 12 44 -552 1 4 43 -553 1 12 43 -554 1 4 42 -555 1 12 42 -556 1 4 41 -557 1 12 41 -558 1 4 40 -559 1 12 40 -560 1 4 39 -561 1 12 39 -562 1 4 38 -563 1 12 38 -564 1 4 37 -565 1 12 37 -566 1 4 36 -567 1 12 36 -568 1 4 35 -569 1 12 35 -570 1 4 34 -571 1 12 34 -572 1 4 33 -573 1 12 33 -574 1 4 32 -575 1 12 32 -576 1 4 31 -577 1 12 31 -578 1 4 30 -579 1 12 30 -580 1 4 29 -581 1 12 29 -582 1 4 28 -583 1 12 28 -584 1 4 27 -585 1 12 27 -586 1 4 26 -587 1 12 26 -588 1 4 25 -589 1 12 25 -590 1 4 24 -591 1 12 24 -592 1 4 23 -593 1 12 23 -594 1 4 22 -595 1 12 22 -596 1 4 21 -597 1 12 21 -598 1 4 20 -599 1 12 20 -600 1 4 19 -601 1 12 19 -602 1 4 18 -603 1 12 18 -604 1 4 17 -605 1 12 17 -606 1 4 16 -607 1 12 16 -608 1 4 15 -609 1 12 15 -610 1 4 14 -611 1 12 14 -612 1 4 13 -613 1 12 13 -614 1 4 12 -615 1 12 12 -616 1 4 11 -617 1 12 11 -618 1 4 10 -619 1 12 10 -620 1 4 9 -621 1 12 9 -622 1 4 8 -623 1 12 8 -624 1 4 7 -625 1 12 7 -626 1 4 6 -627 1 12 6 -628 1 4 5 -629 1 12 5 -630 1 4 4 -631 1 12 4 -632 1 4 3 -633 1 12 3 -634 1 4 2 -635 1 12 2 -636 1 4 1 -637 1 12 1 -638 1 4 0 -639 1 12 0 -640 1 5 63 -641 1 13 63 -642 1 5 62 -643 1 13 62 -644 1 5 61 -645 1 13 61 -646 1 5 60 -647 1 13 60 -648 1 5 59 -649 1 13 59 -650 1 5 58 -651 1 13 58 -652 1 5 57 -653 1 13 57 -654 1 5 56 -655 1 13 56 -656 1 5 55 -657 1 13 55 -658 1 5 54 -659 1 13 54 -660 1 5 53 -661 1 13 53 -662 1 5 52 -663 1 13 52 -664 1 5 51 -665 1 13 51 -666 1 5 50 -667 1 13 50 -668 1 5 49 -669 1 13 49 -670 1 5 48 -671 1 13 48 -672 1 5 47 -673 1 13 47 -674 1 5 46 -675 1 13 46 -676 1 5 45 -677 1 13 45 -678 1 5 44 -679 1 13 44 -680 1 5 43 -681 1 13 43 -682 1 5 42 -683 1 13 42 -684 1 5 41 -685 1 13 41 -686 1 5 40 -687 1 13 40 -688 1 5 39 -689 1 13 39 -690 1 5 38 -691 1 13 38 -692 1 5 37 -693 1 13 37 -694 1 5 36 -695 1 13 36 -696 1 5 35 -697 1 13 35 -698 1 5 34 -699 1 13 34 -700 1 5 33 -701 1 13 33 -702 1 5 32 -703 1 13 32 -704 1 5 31 -705 1 13 31 -706 1 5 30 -707 1 13 30 -708 1 5 29 -709 1 13 29 -710 1 5 28 -711 1 13 28 -712 1 5 27 -713 1 13 27 -714 1 5 26 -715 1 13 26 -716 1 5 25 -717 1 13 25 -718 1 5 24 -719 1 13 24 -720 1 5 23 -721 1 13 23 -722 1 5 22 -723 1 13 22 -724 1 5 21 -725 1 13 21 -726 1 5 20 -727 1 13 20 -728 1 5 19 -729 1 13 19 -730 1 5 18 -731 1 13 18 -732 1 5 17 -733 1 13 17 -734 1 5 16 -735 1 13 16 -736 1 5 15 -737 1 13 15 -738 1 5 14 -739 1 13 14 -740 1 5 13 -741 1 13 13 -742 1 5 12 -743 1 13 12 -744 1 5 11 -745 1 13 11 -746 1 5 10 -747 1 13 10 -748 1 5 9 -749 1 13 9 -750 1 5 8 -751 1 13 8 -752 1 5 7 -753 1 13 7 -754 1 5 6 -755 1 13 6 -756 1 5 5 -757 1 13 5 -758 1 5 4 -759 1 13 4 -760 1 5 3 -761 1 13 3 -762 1 5 2 -763 1 13 2 -764 1 5 1 -765 1 13 1 -766 1 5 0 -767 1 13 0 -768 1 6 63 -769 1 14 63 -770 1 6 62 -771 1 14 62 -772 1 6 61 -773 1 14 61 -774 1 6 60 -775 1 14 60 -776 1 6 59 -777 1 14 59 -778 1 6 58 -779 1 14 58 -780 1 6 57 -781 1 14 57 -782 1 6 56 -783 1 14 56 -784 1 6 55 -785 1 14 55 -786 1 6 54 -787 1 14 54 -788 1 6 53 -789 1 14 53 -790 1 6 52 -791 1 14 52 -792 1 6 51 -793 1 14 51 -794 1 6 50 -795 1 14 50 -796 1 6 49 -797 1 14 49 -798 1 6 48 -799 1 14 48 -800 1 6 47 -801 1 14 47 -802 1 6 46 -803 1 14 46 -804 1 6 45 -805 1 14 45 -806 1 6 44 -807 1 14 44 -808 1 6 43 -809 1 14 43 -810 1 6 42 -811 1 14 42 -812 1 6 41 -813 1 14 41 -814 1 6 40 -815 1 14 40 -816 1 6 39 -817 1 14 39 -818 1 6 38 -819 1 14 38 -820 1 6 37 -821 1 14 37 -822 1 6 36 -823 1 14 36 -824 1 6 35 -825 1 14 35 -826 1 6 34 -827 1 14 34 -828 1 6 33 -829 1 14 33 -830 1 6 32 -831 1 14 32 -832 1 6 31 -833 1 14 31 -834 1 6 30 -835 1 14 30 -836 1 6 29 -837 1 14 29 -838 1 6 28 -839 1 14 28 -840 1 6 27 -841 1 14 27 -842 1 6 26 -843 1 14 26 -844 1 6 25 -845 1 14 25 -846 1 6 24 -847 1 14 24 -848 1 6 23 -849 1 14 23 -850 1 6 22 -851 1 14 22 -852 1 6 21 -853 1 14 21 -854 1 6 20 -855 1 14 20 -856 1 6 19 -857 1 14 19 -858 1 6 18 -859 1 14 18 -860 1 6 17 -861 1 14 17 -862 1 6 16 -863 1 14 16 -864 1 6 15 -865 1 14 15 -866 1 6 14 -867 1 14 14 -868 1 6 13 -869 1 14 13 -870 1 6 12 -871 1 14 12 -872 1 6 11 -873 1 14 11 -874 1 6 10 -875 1 14 10 -876 1 6 9 -877 1 14 9 -878 1 6 8 -879 1 14 8 -880 1 6 7 -881 1 14 7 -882 1 6 6 -883 1 14 6 -884 1 6 5 -885 1 14 5 -886 1 6 4 -887 1 14 4 -888 1 6 3 -889 1 14 3 -890 1 6 2 -891 1 14 2 -892 1 6 1 -893 1 14 1 -894 1 6 0 -895 1 14 0 -896 1 7 63 -897 1 15 63 -898 1 7 62 -899 1 15 62 -900 1 7 61 -901 1 15 61 -902 1 7 60 -903 1 15 60 -904 1 7 59 -905 1 15 59 -906 1 7 58 -907 1 15 58 -908 1 7 57 -909 1 15 57 -910 1 7 56 -911 1 15 56 -912 1 7 55 -913 1 15 55 -914 1 7 54 -915 1 15 54 -916 1 7 53 -917 1 15 53 -918 1 7 52 -919 1 15 52 -920 1 7 51 -921 1 15 51 -922 1 7 50 -923 1 15 50 -924 1 7 49 -925 1 15 49 -926 1 7 48 -927 1 15 48 -928 1 7 47 -929 1 15 47 -930 1 7 46 -931 1 15 46 -932 1 7 45 -933 1 15 45 -934 1 7 44 -935 1 15 44 -936 1 7 43 -937 1 15 43 -938 1 7 42 -939 1 15 42 -940 1 7 41 -941 1 15 41 -942 1 7 40 -943 1 15 40 -944 1 7 39 -945 1 15 39 -946 1 7 38 -947 1 15 38 -948 1 7 37 -949 1 15 37 -950 1 7 36 -951 1 15 36 -952 1 7 35 -953 1 15 35 -954 1 7 34 -955 1 15 34 -956 1 7 33 -957 1 15 33 -958 1 7 32 -959 1 15 32 -960 1 7 31 -961 1 15 31 -962 1 7 30 -963 1 15 30 -964 1 7 29 -965 1 15 29 -966 1 7 28 -967 1 15 28 -968 1 7 27 -969 1 15 27 -970 1 7 26 -971 1 15 26 -972 1 7 25 -973 1 15 25 -974 1 7 24 -975 1 15 24 -976 1 7 23 -977 1 15 23 -978 1 7 22 -979 1 15 22 -980 1 7 21 -981 1 15 21 -982 1 7 20 -983 1 15 20 -984 1 7 19 -985 1 15 19 -986 1 7 18 -987 1 15 18 -988 1 7 17 -989 1 15 17 -990 1 7 16 -991 1 15 16 -992 1 7 15 -993 1 15 15 -994 1 7 14 -995 1 15 14 -996 1 7 13 -997 1 15 13 -998 1 7 12 -999 1 15 12 -1000 1 7 11 -1001 1 15 11 -1002 1 7 10 -1003 1 15 10 -1004 1 7 9 -1005 1 15 9 -1006 1 7 8 -1007 1 15 8 -1008 1 7 7 -1009 1 15 7 -1010 1 7 6 -1011 1 15 6 -1012 1 7 5 -1013 1 15 5 -1014 1 7 4 -1015 1 15 4 -1016 1 7 3 -1017 1 15 3 -1018 1 7 2 -1019 1 15 2 -1020 1 7 1 -1021 1 15 1 -1022 1 7 0 -1023 1 15 0 diff --git a/Mu2eG4/geom/geom_Wideband4modules2sides_v15.txt b/Mu2eG4/geom/geom_Wideband4modules2sides_v15.txt deleted file mode 100644 index 346d75426c..0000000000 --- a/Mu2eG4/geom/geom_Wideband4modules2sides_v15.txt +++ /dev/null @@ -1,646 +0,0 @@ -// Use with Offline/CRVResponse/test/wideband/widebandCRYconfig_v1.txt -#include "Offline/Mu2eG4/geom/geom_common.txt" - -bool hasSTM = false; //to prevent errors from the Offline environment - -string crs.name = "wideband4modules2sides"; // same as channelMap name - -int crs.nSectors = 4; -int crs.nLayers = 4; - -vector crs.sectorNames = {"W1","W2","W3","W4"}; - - -double crs.scintillatorBarThickness = 19.78; //mm -double crs.scintillatorBarWidth = 51.34; //mm -double crs.layerOffset = 42.0; //mm -double crs.gapLarge = 0.2; //mm //0.366 according to crv_parameters.xlsx //previously 0.5 -double crs.gapSmall = 0.0; //mm //previously 0.0875 -double crs.gapBetweenModules = 3.0; //mm -vector crs.gapBetweenLayers = {9.525, 9.525, 9.525}; //mm -double crs.aluminumSheetThickness = 3.175; //mm -double crs.strongBackThickness = 12.7; //mm - -double crs.scintillatorBarLengthW1 = 6000; -double crs.scintillatorBarLengthW2 = 6000; -double crs.scintillatorBarLengthW3 = 6000; -double crs.scintillatorBarLengthW4 = 6000; - -int crs.nModulesW1 = 1; -int crs.nModulesW2 = 1; -int crs.nModulesW3 = 1; -int crs.nModulesW4 = 1; - -int crs.nCountersPerModuleW1 = 16; //per layer -int crs.nCountersPerModuleW2 = 16; -int crs.nCountersPerModuleW3 = 16; -int crs.nCountersPerModuleW4 = 16; - -vector crs.firstCounterW1 = {-3904.0, 0.0, 20000.0}; -vector crs.firstCounterW2 = {-3904.0, -225.25, 20000.0}; -vector crs.firstCounterW3 = {-3904.0, -450.50, 20000.0}; -vector crs.firstCounterW4 = {-3904.0, -675.75, 20000.0}; - -vector crs.layerDirectionW1 = {0, 1, 0}; -vector crs.layerDirectionW2 = {0, 1, 0}; -vector crs.layerDirectionW3 = {0, 1, 0}; -vector crs.layerDirectionW4 = {0, 1, 0}; - -vector crs.offsetDirectionW1 = {0, 0, 1}; -vector crs.offsetDirectionW2 = {0, 0, 1}; -vector crs.offsetDirectionW3 = {0, 0, 1}; -vector crs.offsetDirectionW4 = {0, 0, 1}; - -vector crs.gapDirectionW1 = {0, 0, 1}; -vector crs.gapDirectionW2 = {0, 0, 1}; -vector crs.gapDirectionW3 = {0, 0, 1}; -vector crs.gapDirectionW4 = {0, 0, 1}; - -int crs.precedingSectorForW1 = -1; //no preceding sector -int crs.precedingSectorForW2 = -1; -int crs.precedingSectorForW3 = -1; -int crs.precedingSectorForW4 = -1; - -int crs.sectorTypeW1 = 1; -int crs.sectorTypeW2 = 2; -int crs.sectorTypeW3 = 3; -int crs.sectorTypeW4 = 4; - -bool crs.sipmsAtSide0W1 = true; -bool crs.sipmsAtSide0W2 = true; -bool crs.sipmsAtSide0W3 = true; -bool crs.sipmsAtSide0W4 = true; - -bool crs.sipmsAtSide1W1 = true; -bool crs.sipmsAtSide1W2 = true; -bool crs.sipmsAtSide1W3 = true; -bool crs.sipmsAtSide1W4 = true; - -int crs.FEBBoxesAtSide0W1 = 0; -int crs.FEBBoxesAtSide0W2 = 0; -int crs.FEBBoxesAtSide0W3 = 0; -int crs.FEBBoxesAtSide0W4 = 0; - -int crs.FEBBoxesAtSide1W1 = 0; -int crs.FEBBoxesAtSide1W2 = 0; -int crs.FEBBoxesAtSide1W3 = 0; -int crs.FEBBoxesAtSide1W4 = 0; - -//bool g4.doSurfaceCheck = true; -int g4.nSurfaceCheckPointsPercmsq = 1; -int g4.minSurfaceCheckPoints = 100; // per volume -int g4.maxSurfaceCheckPoints = 10000000; // per volume - -//remove all concrete and replace it with air -string building.escape.hatch.S.material = "G4_AIR"; -string building.tsArea.W.material = "G4_AIR"; -string building.dsArea.alcove1.ceiling.material = "G4_AIR"; -string building.dsArea.downstreamCeiling.vslab1.material = "G4_AIR"; -string building.dsArea.upper.material = "G4_AIR"; -string building.remote.handling.Interior.Wall.6.material = "G4_AIR"; -string building.remote.handling.ceiling.Sliver.material = "G4_AIR"; -string building.beamline.block.wall.E.material = "G4_AIR"; -string building.psAreaCF3.material = "G4_AIR"; -string building.psArea.upper2.N.material = "G4_AIR"; -string building.psArea.hatch.lower.material = "G4_AIR"; -string building.island.S.upper.material = "G4_AIR"; -string building.foundation.extMonPSarea.1.material = "G4_AIR"; -string building.tsArea.stairwell.material = "G4_AIR"; -string building.beamline.foundation.upper.material = "G4_AIR"; -string building.beamline.material = "G4_AIR"; -string building.firstFloor.wall.material = "G4_AIR"; -string building.escape.stair.wall.W02.material = "G4_AIR"; -string building.foundation.extMonPSarea.11.material = "G4_AIR"; -string building.foundation.N.material = "G4_AIR"; -string building.exteriorWall.N.material = "G4_AIR"; -string building.escape.stair.brick.material = "G4_AIR"; -string building.beamline.foundation.s03.material = "G4_AIR"; -string building.escape.stair.wall.E02.material = "G4_AIR"; -string building.radiation.slabne3.material = "G4_AIR"; -string building.remote.handling.door.frame.material = "G4_AIR"; -string building.tsArea.upper2.W.material = "G4_AIR"; -string building.island.S.material = "G4_AIR"; -string building.psArea.ceiling.material = "G4_AIR"; -string building.escape.stair.05.material = "G4_AIR"; -string building.remote.handling.Interior.Wall.1.material = "G4_AIR"; -string building.psAreaCF2.material = "G4_AIR"; -string building.beamline.upper.S.material = "G4_AIR"; -string building.extMon.exteriorWall.material = "G4_AIR"; -string building.foundation.extMonPSarea.2.material = "G4_AIR"; -string building.radiation.slab3.material = "G4_AIR"; -string building.escape.stair.02.material = "G4_AIR"; -string building.psArea.hatch.block.material = "G4_AIR"; -string building.radiation.slab3.material = "G4_AIR"; -string building.beamline.escape.door.header.material = "G4_AIR"; -string building.radiation.slabne1.material = "G4_AIR"; -string building.escape.stair.foundation.03.material = "G4_AIR"; -string building.foundation.extMon.material = "G4_AIR"; -string building.psArea.ceiling.SW.material = "G4_AIR"; -string building.remote.handling.ceiling.strip.material = "G4_AIR"; -string building.psArea.ceiling.E.material = "G4_AIR"; -string building.dsArea.hatchwledge.material = "G4_AIR"; -string building.psArea.upper.S.material = "G4_AIR"; -string building.psArea.ShieldingBlock.material = "G4_AIR"; -string building.foundation.Sd.material = "G4_AIR"; -string building.backfill.TSarea-W.1UpperNotch2.material = "G4_AIR"; -string building.escape.stair.foundation.01.material = "G4_AIR"; -string building.floor.Sd.material = "G4_AIR"; -string building.tsArea.alcove.vertical.S.material = "G4_AIR"; -string building.tsArea.upper.W.material = "G4_AIR"; -string building.foundation.Su.material = "G4_AIR"; -string building.island.N.material = "G4_AIR"; -string building.island.N.upper.material = "G4_AIR"; -string building.dsArea.elevator.interior.material = "G4_AIR"; -string building.remote.handling.Interior.Wall.7.material = "G4_AIR"; -string building.remote.handling.hatch.block.material = "G4_AIR"; -string building.remote.handling.ceiling.material = "G4_AIR"; -string building.dsArea.firstFloor.S.material = "G4_AIR"; -string building.foundation.extMon.material = "G4_AIR"; -string building.escape.stair.wall.W03.material = "G4_AIR"; -string building.foundation.extMonPSarea.material = "G4_AIR"; -string building.psArea.hatch.lip.N.material = "G4_AIR"; -string building.W.TSareaCF2notch.material = "G4_AIR"; -string building.beamline.upper.material = "G4_AIR"; -string building.dsArea.alcove5.ceiling.material = "G4_AIR"; -string building.psArea.upperNotch.material = "G4_AIR"; -string building.radiation.slabne5.material = "G4_AIR"; -string building.escape.stair.foundation.04.material = "G4_AIR"; -string building.escape.stair.12.material = "G4_AIR"; -string building.foundation.N.material = "G4_AIR"; -string building.psWall.upper.material = "G4_AIR"; -string building.W.TSareaCF1.material = "G4_AIR"; -string building.radiation.slab1.material = "G4_AIR"; -string building.floor.remote.material = "G4_AIR"; -string building.remote.handling.Interior.Beam.material = "G4_AIR"; -string building.radiation.slabne4.material = "G4_AIR"; -string building.floor.Su.material = "G4_AIR"; -string building.dsArea.downstreamCeiling.vslab4.material = "G4_AIR"; -string building.tsArea.alcove.vertical.N.material = "G4_AIR"; -string building.dsArea.downstreamCeiling.vslab2.material = "G4_AIR"; -string building.beamline.material = "G4_AIR"; -string building.floor.Sd.material = "G4_AIR"; -string building.beamline.ceiling.material = "G4_AIR"; -string building.escape.stair.13.material = "G4_AIR"; -string building.radiation.slabne2.material = "G4_AIR"; -string building.tsArea.hatcheledge.material = "G4_AIR"; -//string building.dsArea.hatchblock.material = "G4_AIR"; -string building.floor.N.material = "G4_AIR"; -string building.psAreaCF2.material = "G4_AIR"; -string building.tsDsArea.wallinsert.N.material = "G4_AIR"; -string building.remote.handling.Interior.WallNotch.1.material = "G4_AIR"; -string building.escape.stair.wall.E03.material = "G4_AIR"; -string building.tsArea.alcove.lowerRoof.material = "G4_AIR"; -string building.foundation.extMonPSarea.5.material = "G4_AIR"; -string building.island.N.upper.material = "G4_AIR"; -string building.escape.stair.11.material = "G4_AIR"; -string building.N.retaining.Wall.aboveRH.material = "G4_AIR"; -string building.escape.stair.07.material = "G4_AIR"; -string building.W.TSareaCFbeam.material = "G4_AIR"; -string building.psArea.hatch.upper.material = "G4_AIR"; -string building.radiation.slab2.material = "G4_AIR"; -string building.beamline.upper.material = "G4_AIR"; -string building.psArea.material = "G4_AIR"; -string building.remote.handling.material = "G4_AIR"; -string building.W.TSareaCF1notch.material = "G4_AIR"; -string building.tsDsArea.firstFloorEdge.N.material = "G4_AIR"; -string building.passage.W.material = "G4_AIR"; -string building.beamline.foundation.s06.material = "G4_AIR"; -string building.escape.stair.08.material = "G4_AIR"; -string building.remote.handling.Hatch.Upper.material = "G4_AIR"; -string building.extMon.ceiling.material = "G4_AIR"; -string building.dsArea.trench.floor.material = "G4_AIR"; -string building.psArea.upper.S.material = "G4_AIR"; -string building.escape.ceiling.W.material = "G4_AIR"; -string building.psAreaCF1.material = "G4_AIR"; -string building.psArea.ceiling.N.material = "G4_AIR"; -string building.escape.stair.wall.E01.material = "G4_AIR"; -string building.extMon.bit.S.material = "G4_AIR"; -string building.psArea.hatch.block.material = "G4_AIR"; -string building.dsArea.material = "G4_AIR"; -string building.dsArea.alcove4.ceiling.material = "G4_AIR"; -string building.dsArea.elevator.ceiling.material = "G4_AIR"; -string building.exteriorWall.S.material = "G4_AIR"; -string building.escape.stair.04.material = "G4_AIR"; -string building.beamline.foundation.s05.material = "G4_AIR"; -string building.psArea.hatch.lid.material = "G4_AIR"; -string building.floor.remote.material = "G4_AIR"; -string building.exteriorWall.E.material = "G4_AIR"; -string building.dsArea.alcove2.ceiling.material = "G4_AIR"; -string building.dsArea.hatchnledge.material = "G4_AIR"; -string building.escape.stair.03.material = "G4_AIR"; -string building.dsArea.hatchsledge.material = "G4_AIR"; -string building.escape.ceiling.E.material = "G4_AIR"; -string building.beamline.upper.NW.material = "G4_AIR"; -string building.escape.stair.09.material = "G4_AIR"; -string building.exteriorWall.N.material = "G4_AIR"; -string building.dsArea.upstreamCeiling.material = "G4_AIR"; -string building.S.retaining.Wall.material = "G4_AIR"; -string building.tsDsArea.wallinsert.N.material = "G4_AIR"; -string building.extMon.upper.material = "G4_AIR"; -string building.floor.N.material = "G4_AIR"; -string building.foundation.extMonPSarea.10.material = "G4_AIR"; -string building.psArea.ceiling.material = "G4_AIR"; -string building.psAreaCF1.material = "G4_AIR"; -string building.N.retaining.Wall.W.extension.material = "G4_AIR"; -string building.psArea.material = "G4_AIR"; -string building.escape.stair.10.material = "G4_AIR"; -string building.remote.handling.Hatch.Lower.material = "G4_AIR"; -string building.tsArea.hatchblock.northBot.material = "G4_AIR"; -string building.W.TSareaCF2.material = "G4_AIR"; -string building.escape.hatch.lid.material = "G4_AIR"; -string building.radiation.slab2.material = "G4_AIR"; -string building.escape.stair.06.material = "G4_AIR"; -string building.remote.handling.ceiling.material = "G4_AIR"; -string building.psArea.hatch.lip.S.material = "G4_AIR"; -string building.psWall.upper.material = "G4_AIR"; -string building.remote.handling.Hatch.Lid.material = "G4_AIR"; -string building.extMon.bit.N.material = "G4_AIR"; -string building.foundation.extMonPSarea.4.material = "G4_AIR"; -string building.foundation.extMonPSarea.9.material = "G4_AIR"; -string building.extMon.ceiling.material = "G4_AIR"; -string building.escape.stair.foundation.02.material = "G4_AIR"; -string building.beamline.block.wall.S.material = "G4_AIR"; -string building.dsArea.downstreamUpstairs.floor.material = "G4_AIR"; -string building.dsArea.downstreamCeiling.vslab6.material = "G4_AIR"; -string building.foundation.extMonPSarea.8.material = "G4_AIR"; -string building.beamline.NW.material = "G4_AIR"; -//string building.dsArea.downstreamCeiling.material = "G4_AIR"; -string building.remote.handling.Interior.Wall.5.material = "G4_AIR"; -string building.remote.handling.ceiling.material = "G4_AIR"; -string building.psArea.remote.handling.wall.material = "G4_AIR"; -string building.tsArea.hatchblock.northTop.material = "G4_AIR"; -string building.floor.passage.material = "G4_AIR"; -string building.dsArea.elevator.upper.material = "G4_AIR"; -string building.escape.stair.wall.W01.material = "G4_AIR"; -string building.tsDsArea.firstFloorEdge.N.material = "G4_AIR"; -string building.dsArea.downstreamCeiling.vslab3.material = "G4_AIR"; -string building.tsArea.trench.floor.material = "G4_AIR"; -string building.psArea.upper.N.material = "G4_AIR"; -string building.remote.handling.material = "G4_AIR"; -string building.remote.handling.Interior.Wall.2.material = "G4_AIR"; -string building.passage.ceiling.material = "G4_AIR"; -string building.dsArea.hatcheledge.material = "G4_AIR"; -string building.passage.E.material = "G4_AIR"; -string building.beamline.foundation.s04.material = "G4_AIR"; -string building.firstFloor.wall.material = "G4_AIR"; -string building.dsArea.hatchsedge.material = "G4_AIR"; -string building.radiation.slab1.material = "G4_AIR"; -string building.beamline.foundation.s02.material = "G4_AIR"; -string building.beamline.ceiling.E.material = "G4_AIR"; -string building.beamline.upper.E.material = "G4_AIR"; -string building.radiation.slab4.material = "G4_AIR"; -string building.tsArea.hatchblock.southTop.material = "G4_AIR"; -string building.extMon.exteriorWall.material = "G4_AIR"; -string building.foundation.extMonPSarea.6.material = "G4_AIR"; -string building.beamline.ceiling.material = "G4_AIR"; -string building.foundation.extMonPSarea.7.material = "G4_AIR"; -string building.tsArea.stairwell.ceiling.material = "G4_AIR"; -string building.firstFloor.wall.extension.material = "G4_AIR"; -string building.N.retaining.Wall.extension.foot.1.material = "G4_AIR"; -string building.escape.stair.wall.E04.material = "G4_AIR"; -string building.tsArea.hatchwedge.material = "G4_AIR"; -string building.psArea.ceiling.material = "G4_AIR"; -string building.dsArea.alcove3.ceiling.material = "G4_AIR"; -string building.psArea.hatch.block.material = "G4_AIR"; -string building.beamline.block.wall.top.material = "G4_AIR"; -string building.tsArea.hatchwledge.material = "G4_AIR"; -string building.dsArea.downstreamCeiling.vslab5.material = "G4_AIR"; -string building.foundation.Smid.material = "G4_AIR"; -string building.escape.wall.E.material = "G4_AIR"; -string building.tsArea.hatchblock.southBot.material = "G4_AIR"; -string building.escape.stair.01.material = "G4_AIR"; -string building.beamline.foundation.s01.material = "G4_AIR"; -string building.foundation.extMonPSarea.3.material = "G4_AIR"; -string building.psAreaCF4.material = "G4_AIR"; -string building.beamline.lower.south.material = "G4_AIR"; -string building.remote.handling.ceiling.Sliver.material = "G4_AIR"; -string building.escape.hatch.N.material = "G4_AIR"; -string building.remote.handling.Interior.Wall.4.material = "G4_AIR"; -string building.remote.handling.Interior.Wall.3.material = "G4_AIR"; -string building.extMon.upper.material = "G4_AIR"; -string building.psArea.ShieldingBlock.material = "G4_AIR"; -string building.dsArea.firstfloor.hatchgap.material = "G4_AIR"; -string building.beamline.upper.N.material = "G4_AIR"; -string building.dsArea.hatchnedge.material = "G4_AIR"; -string building.S.retaining.Wall.Foot.material = "G4_AIR"; -string building.dsArea.elevator.interior.lower.material = "G4_AIR"; -string building.tsArea.upper2.W.material = "G4_AIR"; -string building.escape.stair.wall.W04.material = "G4_AIR"; -string building.N.retaining.Wall.W.extension.material = "G4_AIR"; -string building.remote.handling.hatch.block.material = "G4_AIR"; -string building.psArea.upper.N.material = "G4_AIR"; -string building.remote.handling.Interior.WallNotch.2.material = "G4_AIR"; -string ExtShieldDownstream.materialType1 = "G4_AIR"; -string ExtShieldDownstream.materialType2 = "G4_AIR"; -string ExtShieldDownstream.materialType6 = "G4_AIR"; -string ExtShieldDownstream.materialType7 = "G4_AIR"; -string ExtShieldDownstream.materialType8 = "G4_AIR"; -string ExtShieldDownstream.materialType10 = "G4_AIR"; -string ExtShieldDownstream.materialType11 = "G4_AIR"; -string ExtShieldDownstream.materialType12 = "G4_AIR"; -string ExtShieldDownstream.materialType13 = "G4_AIR"; -string ExtShieldDownstream.materialType14 = "G4_AIR";// ec floor -string ExtShieldDownstream.materialType16 = "G4_AIR"; -string ExtShieldDownstream.materialType17 = "G4_AIR"; -string ExtShieldDownstream.materialType18 = "G4_AIR"; -string ExtShieldDownstream.materialType19 = "G4_AIR"; -string ExtShieldDownstream.materialType20 = "G4_AIR"; -string ExtShieldDownstream.materialType1 = "G4_AIR"; -string ExtShieldDownstream.materialType2 = "G4_AIR"; -string ExtShieldDownstream.materialType6 = "G4_AIR"; -string ExtShieldDownstream.materialType7 = "G4_AIR"; -string ExtShieldDownstream.materialType8 = "G4_AIR"; -string ExtShieldDownstream.materialType10 = "G4_AIR"; -string ExtShieldDownstream.materialType11 = "G4_AIR"; -string ExtShieldDownstream.materialType12 = "G4_AIR"; -string ExtShieldDownstream.materialType13 = "G4_AIR"; -string ExtShieldDownstream.materialType14 = "G4_AIR";// ec floor -string ExtShieldDownstream.materialType16 = "G4_AIR"; -string ExtShieldDownstream.materialType17 = "G4_AIR"; -string ExtShieldDownstream.materialType18 = "G4_AIR"; -string ExtShieldDownstream.materialType19 = "G4_AIR"; -string ExtShieldDownstream.materialType20 = "G4_AIR"; -string ExtShieldDownstream.materialType1 = "G4_AIR"; -string ExtShieldDownstream.materialType2 = "G4_AIR"; -string ExtShieldDownstream.materialType3 = "G4_AIR"; -string ExtShieldDownstream.materialType4 = "G4_AIR"; -string ExtShieldDownstream.materialType5 = "G4_AIR"; -string ExtShieldDownstream.materialType6 = "G4_AIR"; -string ExtShieldDownstream.materialType7 = "G4_AIR"; -string ExtShieldDownstream.materialType8 = "G4_AIR"; -string ExtShieldDownstream.materialType9 = "G4_AIR"; -string ExtShieldDownstream.materialType10 = "G4_AIR"; -string ExtShieldDownstream.materialType11 = "G4_AIR"; -string ExtShieldDownstream.materialType12 = "G4_AIR"; -string ExtShieldDownstream.materialType13 = "G4_AIR"; -string ExtShieldDownstream.materialType14 = "G4_AIR";// ec floor -string ExtShieldDownstream.materialType15 = "G4_AIR"; -string ExtShieldDownstream.materialType16 = "G4_AIR"; -string ExtShieldDownstream.materialType17 = "G4_AIR"; -string ExtShieldDownstream.materialType18 = "G4_AIR"; -string ExtShieldDownstream.materialType19 = "G4_AIR"; -string ExtShieldDownstream.materialType20 = "G4_AIR"; -string ExtShieldDownstream.materialType24 = "G4_AIR"; -string ExtShieldDownstream.materialType1 = "G4_AIR"; -string ExtShieldDownstream.materialType2 = "G4_AIR"; -string ExtShieldDownstream.materialType3 = "G4_AIR"; -string ExtShieldDownstream.materialType4 = "G4_AIR"; -string ExtShieldDownstream.materialType6 = "G4_AIR"; -string ExtShieldDownstream.materialType7 = "G4_AIR"; -string ExtShieldDownstream.materialType8 = "G4_AIR"; -string ExtShieldDownstream.materialType9 = "G4_AIR"; -string ExtShieldDownstream.materialType10 = "G4_AIR"; -string ExtShieldDownstream.materialType11 = "G4_AIR"; -string ExtShieldDownstream.materialType12 = "G4_AIR"; -string ExtShieldDownstream.materialType13 = "G4_AIR"; -string ExtShieldDownstream.materialType14 = "G4_AIR";// ec floor -string ExtShieldDownstream.materialType15 = "G4_AIR"; -string ExtShieldDownstream.materialType16 = "G4_AIR"; -string ExtShieldDownstream.materialType17 = "G4_AIR"; -string ExtShieldDownstream.materialType18 = "G4_AIR"; -string ExtShieldDownstream.materialType19 = "G4_AIR"; -string ExtShieldDownstream.materialType20 = "G4_AIR"; -string ExtShieldDownstream.materialType24 = "G4_AIR"; -string ExtShieldDownstream.materialType1 = "G4_AIR"; -string ExtShieldDownstream.materialType2 = "G4_AIR"; -string ExtShieldDownstream.materialType6 = "G4_AIR"; -string ExtShieldDownstream.materialType7 = "G4_AIR"; -string ExtShieldDownstream.materialType8 = "G4_AIR"; -string ExtShieldDownstream.materialType10 = "G4_AIR"; -string ExtShieldDownstream.materialType11 = "G4_AIR"; -string ExtShieldDownstream.materialType12 = "G4_AIR"; -string ExtShieldDownstream.materialType13 = "G4_AIR"; -string ExtShieldDownstream.materialType14 = "G4_AIR";// ec floor -string ExtShieldDownstream.materialType16 = "G4_AIR"; -string ExtShieldDownstream.materialType17 = "G4_AIR"; -string ExtShieldDownstream.materialType18 = "G4_AIR"; -string ExtShieldDownstream.materialType19 = "G4_AIR"; -string ExtShieldDownstream.materialType20 = "G4_AIR"; -string ExtShieldDownstream.materialType22 = "G4_AIR"; -string ExtShieldDownstream.materialType23 = "G4_AIR"; -string ExtShieldDownstream.materialType24 = "G4_AIR"; -string ExtShieldDownstream.materialType25 = "G4_AIR"; -string ExtShieldDownstream.materialType1 = "G4_AIR"; -string ExtShieldDownstream.materialType2 = "G4_AIR"; -string ExtShieldDownstream.materialType3 = "G4_AIR"; -string ExtShieldDownstream.materialType4 = "G4_AIR"; -string ExtShieldDownstream.materialType5 = "G4_AIR"; -string ExtShieldDownstream.materialType6 = "G4_AIR"; -string ExtShieldDownstream.materialType7 = "G4_AIR"; -string ExtShieldDownstream.materialType8 = "G4_AIR"; -string ExtShieldDownstream.materialType9 = "G4_AIR"; -string ExtShieldDownstream.materialType10 = "G4_AIR"; -string ExtShieldDownstream.materialType11 = "G4_AIR"; -string ExtShieldDownstream.materialType12 = "G4_AIR"; -string ExtShieldDownstream.materialType13 = "G4_AIR"; -string ExtShieldDownstream.materialType14 = "G4_AIR";// ec floor -string ExtShieldDownstream.materialType16 = "G4_AIR"; -string ExtShieldDownstream.materialType17 = "G4_AIR"; -string ExtShieldDownstream.materialType18 = "G4_AIR"; -string ExtShieldDownstream.materialType19 = "G4_AIR"; -string ExtShieldDownstream.materialType20 = "G4_AIR"; -string ExtShieldDownstream.materialType24 = "G4_AIR"; -string ExtShieldDownstream.materialType27 = "G4_AIR"; -string ExtShieldDownstream.materialType28 = "G4_AIR"; -string ExtShieldDownstream.materialType29 = "G4_AIR"; -string ExtShieldDownstream.materialType30 = "G4_AIR"; -string ExtShieldDownstream.materialType1 = "G4_AIR"; -string ExtShieldDownstream.materialType2 = "G4_AIR"; -string ExtShieldDownstream.materialType3 = "G4_AIR"; -string ExtShieldDownstream.materialType4 = "G4_AIR"; -string ExtShieldDownstream.materialType5 = "G4_AIR"; -string ExtShieldDownstream.materialType6 = "G4_AIR"; -string ExtShieldDownstream.materialType7 = "G4_AIR"; -string ExtShieldDownstream.materialType8 = "G4_AIR"; -string ExtShieldDownstream.materialType9 = "G4_AIR"; -string ExtShieldDownstream.materialType10 = "G4_AIR"; -string ExtShieldDownstream.materialType11 = "G4_AIR"; -string ExtShieldDownstream.materialType12 = "G4_AIR"; -string ExtShieldDownstream.materialType13 = "G4_AIR"; -string ExtShieldDownstream.materialType14 = "G4_AIR";// ec floor -string ExtShieldDownstream.materialType15 = "G4_AIR"; -string ExtShieldDownstream.materialType16 = "G4_AIR"; -string ExtShieldDownstream.materialType17 = "G4_AIR"; -string ExtShieldDownstream.materialType18 = "G4_AIR"; -string ExtShieldDownstream.materialType19 = "G4_AIR"; -string ExtShieldDownstream.materialType20 = "G4_AIR"; -string ExtShieldDownstream.materialType21 = "G4_AIR"; -string ExtShieldDownstream.materialType22 = "G4_AIR"; -string ExtShieldDownstream.materialType23 = "G4_AIR"; -string ExtShieldDownstream.materialType24 = "G4_AIR"; -string ExtShieldDownstream.materialType25 = "G4_AIR"; -string ExtShieldDownstream.materialType26 = "G4_AIR"; -string ExtShieldDownstream.materialType27 = "G4_AIR"; -string ExtShieldDownstream.materialType28 = "G4_AIR"; -string ExtShieldDownstream.materialType29 = "G4_AIR"; -string ExtShieldDownstream.materialType30 = "G4_AIR"; -string ExtShieldUpstream.materialType7 = "G4_AIR"; -string ExtShieldUpstream.materialType8 = "G4_AIR"; -string ExtShieldUpstream.materialType7 = "G4_AIR"; -string ExtShieldUpstream.materialType8 = "G4_AIR"; -string ExtShieldUpstream.materialType1 = "G4_AIR"; -string ExtShieldUpstream.materialType2 = "G4_AIR"; -string ExtShieldUpstream.materialType4 = "G4_AIR"; -string ExtShieldUpstream.materialType5 = "G4_AIR"; -string ExtShieldUpstream.materialType6 = "G4_AIR"; -string ExtShieldUpstream.materialType7 = "G4_AIR"; -string ExtShieldUpstream.materialType8 = "G4_AIR"; -string ExtShieldUpstream.materialType11 = "G4_AIR"; -string ExtShieldUpstream.materialType1 = "G4_AIR"; -string ExtShieldUpstream.materialType2 = "G4_AIR"; -string ExtShieldUpstream.materialType4 = "G4_AIR"; -string ExtShieldUpstream.materialType6 = "G4_AIR"; -string ExtShieldUpstream.materialType11 = "G4_AIR"; -string ExtShieldUpstream.materialType1 = "G4_AIR"; -string ExtShieldUpstream.materialType2 = "G4_AIR"; -string ExtShieldUpstream.materialType4 = "G4_AIR"; -string ExtShieldUpstream.materialType5 = "G4_AIR"; -string ExtShieldUpstream.materialType6 = "G4_AIR"; -string ExtShieldUpstream.materialType7 = "G4_AIR"; -string ExtShieldUpstream.materialType8 = "G4_AIR"; -string ExtShieldUpstream.materialType11 = "G4_AIR"; -string ExtShieldUpstream.materialType13 = "G4_AIR"; -string ExtShieldUpstream.materialType1 = "G4_AIR"; -string ExtShieldUpstream.materialType2 = "G4_AIR"; -string ExtShieldUpstream.materialType4 = "G4_AIR"; -string ExtShieldUpstream.materialType5 = "G4_AIR"; -string ExtShieldUpstream.materialType6 = "G4_AIR"; -string ExtShieldUpstream.materialType7 = "G4_AIR"; -string ExtShieldUpstream.materialType8 = "G4_AIR"; -string ExtShieldUpstream.materialType10 = "G4_AIR"; -string ExtShieldUpstream.materialType20 = "G4_AIR"; -string ExtShieldUpstream.materialType1 = "G4_AIR"; -string ExtShieldUpstream.materialType2 = "G4_AIR"; -string ExtShieldUpstream.materialType3 = "G4_AIR"; -string ExtShieldUpstream.materialType4 = "G4_AIR"; -string ExtShieldUpstream.materialType5 = "G4_AIR"; -string ExtShieldUpstream.materialType6 = "G4_AIR"; -string ExtShieldUpstream.materialType7 = "G4_AIR"; -string ExtShieldUpstream.materialType8 = "G4_AIR"; -string ExtShieldUpstream.materialType10 = "G4_AIR"; -string ExtShieldUpstream.materialType11 = "G4_AIR"; -string ExtShieldUpstream.materialType12 = "G4_AIR"; -string ExtShieldUpstream.materialType13 = "G4_AIR"; -string ExtShieldUpstream.materialType14 = "G4_AIR"; -string ExtShieldUpstream.materialType20 = "G4_AIR"; -string mstm.wallUpStr.material = "G4_AIR"; -string mstm.wallDnStr.material = "G4_AIR"; -string mstm.wallBeamLeft.material = "G4_AIR"; -string mstm.wallBeamRight.material = "G4_AIR"; -string mstm.wallCeiling.material = "G4_AIR"; -string hall.wallMaterialName = "G4_AIR"; -string hall.ceilingMaterialName = "G4_AIR"; -string PSExternalShielding.materialName = "G4_AIR"; -string dirt.island.upper.material = "G4_AIR"; -string dirt.dsArea.upper.SE.material = "G4_AIR"; -string dirt.foundation.E.material = "G4_AIR"; -string dirt.beamline.slab2.NW.material = "G4_AIR"; -string dirt.foundation.extMon.material = "G4_AIR"; -string dirt.W.TSareaCF2.material = "G4_AIR"; -string dirt.tsDsArea.firstFloorEdge.N.material = "G4_AIR"; -string dirt.foundation.extMon.material = "G4_AIR"; -string dirt.foundation.extMonPSarea.material = "G4_AIR"; -string dirt.passage.E.material = "G4_AIR"; -string dirt.tsArea.stairwell.material = "G4_AIR"; -string dirt.psArea.W.material = "G4_AIR"; -string dirt.W.TSareaCF2notch.material = "G4_AIR"; -string dirt.beamline.slab.material = "G4_AIR"; -string dirt.dsArea.downstreamCeiling.vslab4.material = "G4_AIR"; -string dirt.dsArea.elevator.material = "G4_AIR"; -string dirt.tempDirt.backfill.psArea.Lower.material = "G4_AIR"; -string dirt.Temp.SofRetWallTop.material = "G4_AIR"; -string dirt.psArea.upper2.sliver.N.material = "G4_AIR"; -string dirt.dsArea.downstreamCeiling.vslab5.material = "G4_AIR"; -string dirt.extMon.material = "G4_AIR"; -string dirt.escape.stair.11.material = "G4_AIR"; -string dirt.escape.ceiling.material = "G4_AIR"; -string dirt.psArea.upper2.N.material = "G4_AIR"; -string dirt.tsArea.W.material = "G4_AIR"; -string dirt.tsArea.W.material = "G4_AIR"; -string dirt.tempDirt.backfill.psArea.RWallFootLevel.material = "G4_AIR"; -string dirt.tsArea.alcove.material = "G4_AIR"; -string dirt.beamline.slab2.NE.material = "G4_AIR"; -string dirt.beamline.ceiling.W.material = "G4_AIR"; -string dirt.beamline.upper.material = "G4_AIR"; -string dirt.psArea.material = "G4_AIR"; -string dirt.beamline.berm.material = "G4_AIR"; -string dirt.island.material = "G4_AIR"; -string dirt.beamline.upper.material = "G4_AIR"; -string dirt.remote.handling.material = "G4_AIR"; -string dirt.tempDirt.backfill.psArea.Lower.material = "G4_AIR"; -string dirt.psArea.dirtSlab2.S.material = "G4_AIR"; -string dirt.dsArea.downstreamCeiling.vslab2.material = "G4_AIR"; -string dirt.dsArea.material = "G4_AIR"; -string dirt.beamline.material = "G4_AIR"; -string dirt.dsArea.downstreamCeiling.vslab1.material = "G4_AIR"; -string dirt.beamline.berm.material = "G4_AIR"; -string dirt.foundation.extMonPSarea.material = "G4_AIR"; -string dirt.psArea.W.material = "G4_AIR"; -string dirt.dsArea.downstreamCeiling.vslab3.material = "G4_AIR"; -string dirt.beamline.slab.material = "G4_AIR"; -string dirt.remote.handling.ceiling.material = "G4_AIR"; -string dirt.retaining.Wall.berm.east.material = "G4_AIR"; -string dirt.beamline.berm.west.material = "G4_AIR"; -string dirt.upToGradeLevel.W.material = "G4_AIR"; -string dirt.beamline.slab2.N.material = "G4_AIR"; -string dirt.beamline.material = "G4_AIR"; -string dirt.psArea.upper.S.material = "G4_AIR"; -string dirt.Temp.SofRetWallTop.material = "G4_AIR"; -string dirt.escape.stair.04.material = "G4_AIR"; -string dirt.beamline.slab2.N.material = "G4_AIR"; -string dirt.S.retaining.Wall.Foot.material = "G4_AIR"; -string dirt.tempDirt.backfill.psArea.baselevel.material = "G4_AIR"; -string dirt.dsArea.alcove3.material = "G4_AIR"; -string dirt.upToGradeLevel.W.material = "G4_AIR"; -string dirt.tempDirt.backfill.psArea.baselevel.material = "G4_AIR"; -string dirt.tsArea.upper2.W.material = "G4_AIR"; -string dirt.extMon.ceiling.material = "G4_AIR"; -string dirt.foundation.N.material = "G4_AIR"; -string dirt.psArea.upper.N.material = "G4_AIR"; -string dirt.WallFill.2.material = "G4_AIR"; -string dirt.extMon.upper.material = "G4_AIR"; -string dirt.psArea.dirtSlab2.N.Beyond.material = "G4_AIR"; -string dirt.escape.stair.07.material = "G4_AIR"; -string dirt.psArea.upper2.N.material = "G4_AIR"; -string dirt.psArea.WLower.material = "G4_AIR"; -string dirt.extMon.upper.material = "G4_AIR"; -string dirt.psArea.dirtSlab2.N.material = "G4_AIR"; -string dirt.dsArea.alcove1.material = "G4_AIR"; -string dirt.psArea.upper.N.material = "G4_AIR"; -string dirt.psWall.upper.sliver.material = "G4_AIR"; -string dirt.psArea.upper.sliver.S.material = "G4_AIR"; -string dirt.tempDirt.backfill.psArea.RWallFootLevel.material = "G4_AIR"; -string dirt.foundation.N.material = "G4_AIR"; -string dirt.beamline.slab.W.material = "G4_AIR"; -string dirt.psWall.upper.material = "G4_AIR"; -string dirt.dsArea.alcove2.material = "G4_AIR"; -string dirt.foundation.Su.material = "G4_AIR"; -string dirt.foundation.Smid.material = "G4_AIR"; -string dirt.tempDirt.backfill.psArea.Inter.material = "G4_AIR"; -string dirt.dsArea.elevator.upper.material = "G4_AIR"; -string dirt.psArea.upper2.sliver.N.material = "G4_AIR"; -string dirt.WallFill.1.material = "G4_AIR"; -string dirt.beamline.slab.E.material = "G4_AIR"; -string dirt.foundation.island.material = "G4_AIR"; -string dirt.retaining.Wall.berm.west.material = "G4_AIR"; -string dirt.remote.handling.material = "G4_AIR"; -string dirt.beamline.slab2.NC.material = "G4_AIR"; -string dirt.beamline.slab.NC.material = "G4_AIR"; -string dirt.tsDsArea.firstFloorEdge.N.material = "G4_AIR"; -string dirt.island.upper.material = "G4_AIR"; -string dirt.dsArea.firstFloor.S.material = "G4_AIR"; -string dirt.W.TSareaCFbeam.material = "G4_AIR"; -string dirt.extMon.material = "G4_AIR"; -string dirt.psArea.dirtSlab.N.material = "G4_AIR"; -string dirt.extMon.ceiling.material = "G4_AIR"; -string dirt.tempDirt.backfill.psArea.Inter.material = "G4_AIR"; -string dirt.tsArea.upper.W.material = "G4_AIR"; -string dirt.beamline.ceiling.E.material = "G4_AIR"; -string dirt.foundation.Sd.material = "G4_AIR"; -string dirt.dsArea.upper.material = "G4_AIR"; -string dirt.beamline.berm.sw.material = "G4_AIR"; -string dirt.beamline.berm.material = "G4_AIR"; -string dirt.dsArea.downstreamCeiling.vslab6.material = "G4_AIR"; -string dirt.overburdenMaterialName = "G4_AIR"; -double building.dsArea.downstreamCeiling.yHalfThickness = 80.0; -double building.dsArea.hatchblock.yHalfThickness = 80.0;