From 023cca566f1dc9148fed67bca8be8dcc5e391423 Mon Sep 17 00:00:00 2001 From: Daniel Torres Valladares <81983942+DanielTorres98@users.noreply.github.com> Date: Mon, 25 Mar 2024 10:33:29 -0500 Subject: [PATCH 01/45] Vpd start mode integrated (#645) # Description StBTofCalibMaker::tofCellResolution function can now use VPD start resolution if UseVpdStart is set to TRUE. Additionally, singleTubeRes was fixed to compute the VPD resolution correctly based on which tubes were used. --------- Co-authored-by: Daniel Torres Valladares --- StRoot/StBTofCalibMaker/StBTofCalibMaker.cxx | 42 ++++++-------------- StRoot/StBTofUtil/StVpdSimConfig.h | 38 ++++++++++++------ 2 files changed, 39 insertions(+), 41 deletions(-) diff --git a/StRoot/StBTofCalibMaker/StBTofCalibMaker.cxx b/StRoot/StBTofCalibMaker/StBTofCalibMaker.cxx index afc052abba5..c82328a3523 100644 --- a/StRoot/StBTofCalibMaker/StBTofCalibMaker.cxx +++ b/StRoot/StBTofCalibMaker/StBTofCalibMaker.cxx @@ -2835,36 +2835,20 @@ void StBTofCalibMaker::writePPPAHistograms() //_____________________________________________________________________________ float StBTofCalibMaker::tofCellResolution(const Int_t itray, const Int_t iModuleChan) { + float resolution(0.013); // 0.013 by default - 1/beta resolution + if (itray<0){return resolution;} - float resolution(0.013); // 0.013 by default - 1/beta resolution - if (itray<0){return resolution;} - - int module = iModuleChan/6 + 1; - int cell = iModuleChan%6 + 1; - // mBTofRes::timeres_tof() reports in picoseconds - float stop_resolution = mBTofRes->timeres_tof(itray, module, cell)/1000.; - -float start_resolution(0); - if (mUseVpdStart){ - - // For VPD timing determine the VPD starttime by combing the resolutions of - // tray == 122 (east) - // mSimParams[singleHit.tubeId-1+19].singleTubeRes - // tray 121 (west) - // mSimParams[singleHit.tubeId-1].singleTubeRes - // - // needs to be implemented - - } - else { - // combine an average BTOF resolution based on NT0 - // more sophisticated: figure out what BTOF cells actually went into the NT0 count. - - // mBTofRes::timeres_tof() reports in picoseconds - start_resolution = mBTofRes->average_timeres_tof()/sqrt(mNTzero)/1000.; - } + int module = iModuleChan/6 + 1; + int cell = iModuleChan%6 + 1; + // mBTofRes::timeres_tof() reports in picoseconds + float stop_resolution = mBTofRes->timeres_tof(itray, module, cell)/1000.; - resolution = sqrt(stop_resolution*stop_resolution + start_resolution*start_resolution); + float start_resolution = 0.0; + if (mUseVpdStart) + start_resolution = mVpdResConfig->singleTubeRes(mVPDHitPatternEast, mVPDHitPatternWest)/1000.; + else + start_resolution = mBTofRes->average_timeres_tof()/sqrt(mNTzero)/1000.; + resolution = sqrt(stop_resolution*stop_resolution + start_resolution*start_resolution); -return resolution; + return resolution; } diff --git a/StRoot/StBTofUtil/StVpdSimConfig.h b/StRoot/StBTofUtil/StVpdSimConfig.h index 26176a355bd..69d6ee0be95 100644 --- a/StRoot/StBTofUtil/StVpdSimConfig.h +++ b/StRoot/StBTofUtil/StVpdSimConfig.h @@ -29,21 +29,35 @@ class StVpdSimConfig : public StMaker { //! structure containing tube parameters struct SingleTubeParams{ float singleTubeRes; //!< Resolution of a particular Vpd tube in ps - int tubeId; //!< Tube Id (number) [0,37] with west Vpd [0,18] and east Vpd [19,37] - int tubeStatusFlag; //!< Status flag for whether tube was active (1) or inactive (0) - int tubeTriggerFlag; //!< Status flag for whether tube was triggered on (1) or not (0) + int tubeId, //!< Tube Id (number) [0,37] with west Vpd [0,18] and east Vpd [19,37] + tubeStatusFlag, //!< Status flag for whether tube was active (1) or inactive (0) + tubeTriggerFlag; //!< Status flag for whether tube was triggered on (1) or not (0) }; -/// calculate correct resolution based on those tubes that were used -double singleTubeRes(UInt_t mVPDHitPatternEast, UInt_t mVPDHitPatternWest){ - double vpdResSumSqr(0.), vpdresolution(0.); - for (int i=0; i<19; i++){ - if (1 << i && mVPDHitPatternEast) vpdResSumSqr += (mSimParams[i].singleTubeRes)*(mSimParams[i].singleTubeRes); - if (1 << i && mVPDHitPatternWest) vpdResSumSqr += (mSimParams[i+19].singleTubeRes)*(mSimParams[i+19].singleTubeRes); + /** + * @brief Calculate correct resolution based on those tubes that were used. + * + * @param mVPDHitPatternEast 9 digit binary number specifying hit pattern of east VPD tubes. + * @param mVPDHitPatternWest 9 digit binary number specifying hit pattern of west VPD tubes. + * @return double vpd resolution. + */ + double singleTubeRes(UInt_t mVPDHitPatternEast, UInt_t mVPDHitPatternWest){ + double vpdResSumSqr(0.), + vpdresolution(0.); + int total_vpd_hits = 0; //Total number of vpd tubes used. + for (int i=0; i<19; i++){ + if (1 << i & mVPDHitPatternEast) { + vpdResSumSqr += (mSimParams[i].singleTubeRes)*(mSimParams[i].singleTubeRes); + total_vpd_hits += 1; + } + if (1 << i & mVPDHitPatternWest) { + vpdResSumSqr += (mSimParams[i+19].singleTubeRes)*(mSimParams[i+19].singleTubeRes); + total_vpd_hits += 1; + } } - vpdresolution = sqrt(vpdResSumSqr); - return vpdresolution; -} + vpdresolution = sqrt(vpdResSumSqr)/total_vpd_hits; + return vpdresolution; + } /** * Calculates the average resolution across all 38 tubes (discounts inactive tubes) From d1fecb6fb6b6a142ed6b0d603f0b551414f65cc4 Mon Sep 17 00:00:00 2001 From: YannickSoehngen <60179883+YannickSoehngen@users.noreply.github.com> Date: Mon, 25 Mar 2024 23:13:50 +0100 Subject: [PATCH 02/45] Match update and event flag fix (#661) Fixed GoodEventFlag, increased granularity from counter to Get4 level, added pulser Flag (previous part of GoodEventFlag) and implementation of Single-Sided-Matches --------- Co-authored-by: Yannick Soehngen Co-authored-by: Yannick Soehngen Co-authored-by: Dmitri Smirnov Co-authored-by: Yannick Soehngen Co-authored-by: Yannick Soehngen Co-authored-by: Yannick Soehngen Co-authored-by: Yannick Soehngen Co-authored-by: Yannick Soehngen Co-authored-by: Yannick Soehngen --- StRoot/StETofCalibMaker/StETofCalibMaker.cxx | 119 +-- StRoot/StETofHitMaker/StETofHitMaker.cxx | 83 +- StRoot/StETofMatchMaker/StETofMatchMaker.cxx | 865 +++++++++++++++++- StRoot/StETofMatchMaker/StETofMatchMaker.h | 17 +- StRoot/StEvent/StETofHeader.cxx | 25 +- StRoot/StEvent/StETofHeader.h | 9 +- StRoot/StMuDSTMaker/COMMON/StMuETofHeader.cxx | 11 +- StRoot/StMuDSTMaker/COMMON/StMuETofHeader.h | 7 +- StRoot/StPicoEvent/StPicoEvent.cxx | 17 +- StRoot/StPicoEvent/StPicoEvent.h | 25 +- 10 files changed, 1055 insertions(+), 123 deletions(-) diff --git a/StRoot/StETofCalibMaker/StETofCalibMaker.cxx b/StRoot/StETofCalibMaker/StETofCalibMaker.cxx index e8ab1b96049..b706e396426 100644 --- a/StRoot/StETofCalibMaker/StETofCalibMaker.cxx +++ b/StRoot/StETofCalibMaker/StETofCalibMaker.cxx @@ -1233,37 +1233,32 @@ StETofCalibMaker::processStEvent() // collect status bit information and fill good event flag for 2020+ data TClass* headerClass = etofHeader->IsA(); if( headerClass->GetClassVersion() > 2 ){ - mNStatusBitsCounter.clear(); - std::vector< Bool_t > vMissmatchVec = etofHeader->missMatchFlagVec(); - int iGet4Id = 0; - for( auto iMissMatchFlag : vMissmatchVec ){ - // From DigiMaker: - // mMissMatchFlagVec.at( 144 * ( sector - 13 ) + 48 * ( zplane -1 ) + 16 * ( counter - 1 ) + 8 * ( side - 1 ) + ( ( strip - 1 ) / 4 ) ) = true; - if (iMissMatchFlag == false) continue; - int iCounter = iGet4Id / 16; - if( mNStatusBitsCounter.count(iCounter) ){ - mNStatusBitsCounter[iCounter]++; - }else{ - mNStatusBitsCounter[iCounter] = 1; - } - } - std::vector goodEventFlagVec; - for( int iCounter = 0; iCounter < 108; iCounter++){ - if ( !(mNPulsersCounter.count(iCounter) ) ){ - goodEventFlagVec.push_back(false); - }else{ - if ( !(mNStatusBitsCounter.count(iCounter)) && mNPulsersCounter[iCounter] == 2){ - goodEventFlagVec.push_back(true); //true when 2 pulser digis and zero status bits are available on this counter - }else{ - goodEventFlagVec.push_back(false); - } - } - } - if (goodEventFlagVec.size() == 108){ - etofHeader->setGoodEventFlagVec(goodEventFlagVec); + std::vector goodEventFlagVec; + std::vector hasPulsersVec; + + //drag along pulser information + for( unsigned int iCounter = 0; iCounter < 108; iCounter++){ + if ( !(mNPulsersCounter.count(iCounter) ) ){ + hasPulsersVec.push_back(false); + }else{ + hasPulsersVec.push_back(mNPulsersCounter[iCounter] == 2); + } + } + if (hasPulsersVec.size() == 108){ + //etofHeader->setHasPulsersVec(hasPulsersVec); // not working but not of relevance at the moment + } + + //fill good event flag into header + for( unsigned int iGet4 = 0; iGet4 < 1728; iGet4++){ + goodEventFlagVec.push_back(!etofHeader->missMatchFlagVec().at(iGet4)); + } + + if (goodEventFlagVec.size() == 1728){ + etofHeader->setGoodEventFlagVec(goodEventFlagVec); } - } + } + /// second loop to apply calibrations to (non-pulser) digis inside the timing window StructStuckFwDigi current = { -1, -1., -1. }; @@ -1368,6 +1363,7 @@ StETofCalibMaker::processMuDst() mResetTime = fmod( resetTime( ( StETofHeader* ) etofHeader ), eTofConst::bTofClockCycle ); std::map< unsigned int, std::vector< unsigned int >> pulserCandMap; + /// first loop over digis to apply hardware mappping and find the pulsers for( size_t i=0; iIsA(); if( headerClass->GetClassVersion() > 2 ){ - mNStatusBitsCounter.clear(); - std::vector< Bool_t > vMissmatchVec = etofHeader->missMatchFlagVec(); - int iGet4Id = 0; - for( auto iMissMatchFlag : vMissmatchVec ){ - // From DigiMaker: - // mMissMatchFlagVec.at( 144 * ( sector - 13 ) + 48 * ( zplane -1 ) + 16 * ( counter - 1 ) + 8 * ( side - 1 ) + ( ( strip - 1 ) / 4 ) ) = true; - if (iMissMatchFlag == false) continue; - int iCounter = iGet4Id / 16; - if( mNStatusBitsCounter.count(iCounter) ){ - mNStatusBitsCounter[iCounter]++; - }else{ - mNStatusBitsCounter[iCounter] = 1; - } - } + + std::vector goodEventFlagVec; + std::vector hasPulsersVec;// + + //drag along pulser information + for( unsigned int iCounter = 0; iCounter < 108; iCounter++){ + if ( !(mNPulsersCounter.count(iCounter) ) ){ + hasPulsersVec.push_back(false); + }else{ + hasPulsersVec.push_back(mNPulsersCounter[iCounter] == 2); + } + } + + if (hasPulsersVec.size() == 108){ + etofHeader->setHasPulsersVec(hasPulsersVec); + } + + //fill good event flag into header + for( unsigned int iGet4 = 0; iGet4 < 1728; iGet4++){ + goodEventFlagVec.push_back(!etofHeader->missMatchFlagVec().at(iGet4)); + } - std::vector goodEventFlagVec; - for( int iCounter = 0; iCounter < 108; iCounter++){ - if ( !(mNPulsersCounter.count(iCounter) ) ){ - goodEventFlagVec.push_back(false); - }else{ - if ( !(mNStatusBitsCounter.count(iCounter)) && mNPulsersCounter[iCounter] == 2){ - goodEventFlagVec.push_back(true); //true when 2 pulser digis and zero status bits are available on this counter - }else{ - goodEventFlagVec.push_back(false); - } - } + if (goodEventFlagVec.size() == 1728){ + etofHeader->setGoodEventFlagVec(goodEventFlagVec); } - if (goodEventFlagVec.size() == 108){ - etofHeader->setGoodEventFlagVec(goodEventFlagVec); - } - } + } /// second loop to apply calibrations to (non-pulser) digis inside the timing window StructStuckFwDigi current = { -1, -1., -1. }; @@ -1470,7 +1466,6 @@ StETofCalibMaker::processMuDst() prev = current; } - /// calculate calibrated time and tot for the digi /// only for digis inside the timing window applyCalibration( aDigi, etofHeader ); @@ -1569,12 +1564,16 @@ StETofCalibMaker::flagPulserDigis( StETofDigi* aDigi, unsigned int index, std::m unsigned int key = aDigi->sector() * 1000 + aDigi->zPlane() * 100 + aDigi->counter() * 10 + aDigi->side(); + // pulser channel if( ( aDigi->strip() == 1 && aDigi->side() == 1 ) || ( aDigi->strip() == 32 && aDigi->side() == 2 ) ) { float timeToTrigger = aDigi->rawTime() - mTriggerTime; + + float totToPeak = aDigi->rawTot() - mPulserPeakTot.at( key ); float totToHalfPeak = aDigi->rawTot() - mPulserPeakTot.at( key ) * 0.5; + if( timeToTrigger > mPulserWindow.at( aDigi->rocId() ).first && timeToTrigger < mPulserWindow.at( aDigi->rocId() ).second ) { if( fabs( totToPeak ) < 25 || fabs( totToHalfPeak ) < 10 ) { isPulserCand = true; @@ -1582,9 +1581,11 @@ StETofCalibMaker::flagPulserDigis( StETofDigi* aDigi, unsigned int index, std::m } } + if( isPulserCand ) { pulserDigiMap[ key ].push_back( index ); } + } diff --git a/StRoot/StETofHitMaker/StETofHitMaker.cxx b/StRoot/StETofHitMaker/StETofHitMaker.cxx index f5c4b7cf612..f32dabff026 100644 --- a/StRoot/StETofHitMaker/StETofHitMaker.cxx +++ b/StRoot/StETofHitMaker/StETofHitMaker.cxx @@ -104,7 +104,7 @@ StETofHitMaker::StETofHitMaker( const char* name ) mMaxYPos( 15. ), mMergingRadius( 1. ), mSigVel(), - mSoftwareDeadTime( 5. ), + mSoftwareDeadTime( 150. ), mDoClockJumpShift( true ), mDoDoubleClockJumpShift( true ), mClockJumpDirection(), @@ -338,13 +338,13 @@ StETofHitMaker::InitRun( Int_t runnumber ) } // -------------------------------------------------------------------------------------------- - for( int i=0; i containedDigiIndices; // double posX = 0.0; double posY = 0.0; double time = 0.0; @@ -992,6 +992,53 @@ StETofHitMaker::matchSides() if( mDoQA && digiVec->size() == 1 ) { mHistograms.at( histNameDigisErased )->Fill( 2 ); } + + + //single sided digi hit building + if( digiVec->size() == 1 ) { + + // create the hit candidate: + StETofDigi* xDigiA = digiVec->at( 0 ); + StETofDigi* xDigiB = digiVec->at( 0 ); + + //get get4flag statistics + // StMuETofHeader* etofHeader = mMuDst->etofHeader(); + // TClass* headerClass = etofHeader->IsA(); + // std::vector< Bool_t > vMissmatchVec = etofHeader->missMatchFlagVec(); + // std::vector< bool > goodEventFlagVec = mMuDst->etofHeader()->goodEventFlagVec(); + + // the "strip" time is the mean time between each end + time = 0.5 * ( xDigiA->calibTime() + xDigiB->calibTime() ); + //TODO: Afterpulse handling: correct hit time by the time difference between the first and second digi on the same side + if(!mIsSim && mApCorr){//merge skip corrections for simulation + time += t_corr_afterpulse; + }//merge + // weight of merging of hits (later) is the total charge => sum of both ends ToT + totSum = xDigiA->calibTot() + xDigiB->calibTot(); + + if(xDigiA->side() == 1){ + posY = 1; + }else{ + posY = -1; + } + + + // use local coordinates... (0,0,0) is in the center of counter + posX = ( -1 * eTofConst::nStrips / 2. + strip - 0.5 ) * eTofConst::stripPitch; + + unsigned int clusterSize = 1000; + + StETofHit* constructedHit = new StETofHit( sector, plane, counter, time, totSum, clusterSize, posX, posY ); + + mStoreHit[ detIndex ].push_back( constructedHit ); + + containedDigiIndices.push_back( mMapDigiIndex.at( xDigiA ) ); + containedDigiIndices.push_back( mMapDigiIndex.at( xDigiB ) ); + + mMapHitDigiIndices[ constructedHit ] = containedDigiIndices; + + } + // loop over digis on the same strip while( digiVec->size() > 1 ) { @@ -1259,7 +1306,7 @@ StETofHitMaker::matchSides() int mode = mModMatrix.at(detIndex); modifyHit(mode, posX , posY , time); } - + StETofHit* constructedHit = new StETofHit( sector, plane, counter, time, totSum, clusterSize, posX, posY ); //Check for "same direction double clockjumps" and update FlagMap @@ -1311,7 +1358,7 @@ StETofHitMaker::matchSides() tof += eTofConst::coarseClockCycle; } } - } + } // push hit into intermediate collection mStoreHit[ detIndex ].push_back( constructedHit ); @@ -1571,10 +1618,15 @@ StETofHitMaker::mergeClusters( const bool isMuDst ) int highestStrip = lowestStrip; bool hasClockJump = false; - if( pHit->clusterSize() > 100 ) { + if( pHit->clusterSize() > 100 && pHit->clusterSize() < 999) { hasClockJump = true; } + bool isSingleSided = false; + if(pHit->clusterSize() > 999){ + isSingleSided = true; + } + unsigned int index = 1; while( hitVec->size() > 1 ) { if( mDebug ) { @@ -1603,10 +1655,19 @@ StETofHitMaker::mergeClusters( const bool isMuDst ) isLowerAdjacentStip = true; } + double MergingRadius = 0; + + // dont merge single sided matches here!! has to happen after matching!! + if(pMergeHit->clusterSize() > 500 || pHit->clusterSize() > 500){ + MergingRadius = 0; + }else{ + MergingRadius = mMergingRadius; + } + // check merging condition: X is not convoluted into the clusterbuilding radius // since it is not supposed to be zero --> check if X position is on a adjacent strip if( ( isHigherAdjacentStip || isLowerAdjacentStip ) && - ( sqrt( timeDiff * timeDiff + posYDiff * posYDiff ) ) < mMergingRadius ) + ( sqrt( timeDiff * timeDiff + posYDiff * posYDiff ) ) < MergingRadius ) // { if( mDebug ) { LOG_DEBUG << "mergeClusters() - merging is going on" << endm; @@ -1633,7 +1694,7 @@ StETofHitMaker::mergeClusters( const bool isMuDst ) weightsTotSum += hitWeight; clusterSize++; - if( pMergeHit->clusterSize() > 100 ) { + if( pMergeHit->clusterSize() > 100 && pMergeHit->clusterSize() < 200) { hasClockJump = true; } @@ -1710,6 +1771,10 @@ StETofHitMaker::mergeClusters( const bool isMuDst ) clusterSize += 100; } + if(isSingleSided){ + clusterSize += 1000; + } + if( mDebug ) { LOG_DEBUG << "mergeClusters() - MERGED HIT: "; LOG_DEBUG << "sector: " << sector << " plane: " << plane << " counter: " << counter << "\n"; diff --git a/StRoot/StETofMatchMaker/StETofMatchMaker.cxx b/StRoot/StETofMatchMaker/StETofMatchMaker.cxx index 7f6e1c47eb1..ac1472fcfa4 100644 --- a/StRoot/StETofMatchMaker/StETofMatchMaker.cxx +++ b/StRoot/StETofMatchMaker/StETofMatchMaker.cxx @@ -86,6 +86,7 @@ #include "StMuDSTMaker/COMMON/StMuETofHit.h" #include "StMuDSTMaker/COMMON/StMuETofPidTraits.h" #include "StMuDSTMaker/COMMON/StMuETofDigi.h" +#include "StMuDSTMaker/COMMON/StMuETofHeader.h" #include "StETofMatchMaker.h" #include "StETofHitMaker/StETofHitMaker.h" @@ -160,9 +161,13 @@ StETofMatchMaker::StETofMatchMaker( const char* name ) mLocalYmax(16.), mClockJumpCand(), mClockJumpDirection(), - mHistFileName( "" ), - mHistograms(), - mHistograms2d() + mHistFileName( "" ), + mHistograms(), + mHistograms2d(), + dx_3sig(2.5), + dy_3sig(4.0), + dt_3sig(0.22), + dy_max(5.0) { mT0corrVec.reserve( 500 ); mTrackCuts.push_back( 0. ); // nHitsFit @@ -171,6 +176,7 @@ StETofMatchMaker::StETofMatchMaker( const char* name ) } + //--------------------------------------------------------------------------- StETofMatchMaker::~StETofMatchMaker() { @@ -267,7 +273,6 @@ StETofMatchMaker::InitRun( Int_t runnumber ) // -------------------------------------------------------------------------------------------- - // -------------------------------------------------------------------------------------------- // initializie etof geometry // -------------------------------------------------------------------------------------------- @@ -498,7 +503,12 @@ StETofMatchMaker::Make() return kStOk; } + + //Single Sided Hit Matching and clustering + eTofHitVec finalMatchVec; + sortandcluster(matchCandVec , detectorHitVec , intersectionVec , finalMatchVec); + //......................................................................... // D. sort matchCand vector and deal with (discard) hits matched by multiple tracks // @@ -506,20 +516,18 @@ StETofMatchMaker::Make() eTofHitVec singleTrackMatchVec; vector< eTofHitVec > multiTrackMatchVec; - sortSingleMultipleHits( matchCandVec, singleTrackMatchVec, multiTrackMatchVec ); + //sortSingleMultipleHits( matchCandVec, singleTrackMatchVec, multiTrackMatchVec ); // old matching procedure - if( singleTrackMatchVec.size() == 0 ) { - //LOG_INFO << "Make() -- event done ... bye-bye" << endm; - - return kStOk; - } + //if( singleTrackMatchVec.size() == 0 ) { + //LOG_INFO << "Make() -- event done ... bye-bye" << endm + // return kStOk; + // } //......................................................................... // E. sort singleTrackMatchVector for multiple hits associated to single tracks and determine the best match // - eTofHitVec finalMatchVec; - - finalizeMatching( singleTrackMatchVec, finalMatchVec ); + + //finalizeMatching( singleTrackMatchVec, finalMatchVec ); // old matching procedure if( finalMatchVec.size() == 0 ) { //LOG_INFO << "Make() -- event done ... bye-bye" << endm; @@ -533,14 +541,14 @@ StETofMatchMaker::Make() //......................................................................... // F. fill ETofPidTraits for global and primary tracks and assign associated track to hits // - fillPidTraits( finalMatchVec ); + fillPidTraits( finalMatchVec ); //......................................................................... // G. calculate pid variables for primary tracks and update PidTraits // - int nPrimaryWithPid = 0; + int nPrimaryWithPid = 0; - calculatePidVariables( finalMatchVec, nPrimaryWithPid ); + calculatePidVariables( finalMatchVec, nPrimaryWithPid ); mHistograms.at( "primaryIntersect_validMatch" )->Fill( nPrimaryWithIntersection, nPrimaryWithPid ); @@ -838,6 +846,10 @@ StETofMatchMaker::readETofDetectorHits( eTofHitVec& detectorHitVec ) detectorHit.index2ETofHit = i; detectorHitVec.push_back( detectorHit ); + + + + } } @@ -1267,8 +1279,10 @@ StETofMatchMaker::matchETofHits( eTofHitVec& detectorHitVec, eTofHitVec& interse bool isMatch = false; // deltaX, deltaY (subtract offset until alignment is done properly) - float deltaX = detHitIter->localX - interIter->localX; - float deltaY = detHitIter->localY - interIter->localY; + float deltaX = detHitIter->localX - interIter->localX; + float deltaY = detHitIter->localY - interIter->localY; + double tstart = startTimeBTof(); //no eToF start time available here! + double deltaT = detHitIter->hitTime - tstart; //basic cut to reject hits far of in time int counterIndex = ( detHitIter->sector - eTofConst::sectorStart ) * eTofConst::nPlanes * eTofConst::nCounters + ( detHitIter->plane - eTofConst::zPlaneStart ) * eTofConst::nCounters @@ -1277,18 +1291,45 @@ StETofMatchMaker::matchETofHits( eTofHitVec& detectorHitVec, eTofHitVec& interse deltaX -= etofProjection::deltaXoffset[ counterIndex ]; deltaY -= etofProjection::deltaYoffset[ counterIndex ]; + bool corrTime=false; // for single sided hit time corr + if( detHitIter->sector == interIter->sector ) { - if( detHitIter->plane == interIter->plane ) { - if( detHitIter->counter == interIter->counter ) { - if( fabs( deltaX ) < mMatchDistX ) { - if( fabs( deltaY ) < mMatchDistY ) { - isMatch = true; - } - } - } - } - } + if( detHitIter->plane == interIter->plane ) { + if( detHitIter->counter == interIter->counter ) { + + if(detHitIter->clusterSize < 999){ + + // if( fabs( deltaX ) < mMatchDistX ) { + // if( fabs( deltaY ) < mMatchDistY ) { + + if( ( ( (deltaY*deltaY) / (mMatchDistY*mMatchDistY) ) + ( (deltaX*deltaX) / (mMatchDistX*mMatchDistX) ) ) < 2. ) { + if( fabs( deltaT ) < mMatchDistT ) { + isMatch = true; + } + } + }else{ + + float mMatchDistYSingleSided = 15; + + + if( fabs( deltaX ) < mMatchDistX ) { + if( fabs( deltaY ) < mMatchDistYSingleSided ) { + if( fabs( deltaT ) < mMatchDistT ) { + + + isMatch = true; + deltaY = 27; // keep SHs out of NHs way while sorting + corrTime = true; + + } + } + } + } + } + } + } + if( isMatch ) { StructETofHit matchCand; @@ -1302,12 +1343,14 @@ StETofMatchMaker::matchETofHits( eTofHitVec& detectorHitVec, eTofHitVec& interse matchCand.tot = detHitIter->tot; matchCand.clusterSize = detHitIter->clusterSize; matchCand.index2ETofHit = detHitIter->index2ETofHit; + matchCand.IdTruthHit = detHitIter->IdTruth; matchCand.globalPos = interIter->globalPos; matchCand.trackId = interIter->trackId; matchCand.theta = interIter->theta; matchCand.pathLength = interIter->pathLength; matchCand.isPrimary = interIter->isPrimary; + matchCand.IdTruth = interIter->IdTruth; matchCand.matchFlag = 0; matchCand.deltaX = deltaX; @@ -1316,6 +1359,36 @@ StETofMatchMaker::matchETofHits( eTofHitVec& detectorHitVec, eTofHitVec& interse matchCand.tof = -999.; matchCand.beta = -999.; + // correct single sided matches + if(corrTime){ + matchCand.localY = interIter->localY; + + // if side A + double corr ; + float tcorr = 0; + if(sector == 15 || sector == 17 || sector == 21 || sector == 22 ){ + tcorr = 16.49; + }else{ + tcorr = 18.23; + } + if(detHitIter->localY < 0){ + matchCand.hitTime = detHitIter->hitTime - (((13.5 + interIter->localY ) / tcorr )) + (13.5/tcorr); + // matchCand.totDiff = 1; + corr = (((13.5 - interIter->localY ) / tcorr )); + // if side B + }else{ + matchCand.hitTime = detHitIter->hitTime - (((13.5 - interIter->localY ) / tcorr )) + (13.5/tcorr); + // matchCand.totDiff = -1; + corr = (((13.5 + interIter->localY ) / tcorr )); + } + + matchCand.totDiff = matchCand.totDiff * corr; + + // cout << "interIter->localY " << interIter->localY<< endl; + // cout << "corr " << corr << endl; + // cin.get(); + + } matchCandVec.push_back( matchCand ); @@ -1954,7 +2027,9 @@ StETofMatchMaker::calculatePidVariables( eTofHitVec& finalMatchVec, int& nPrimar StMuETofPidTraits pidTraits = gTrack->etofPidTraits(); - double tof = timeOfFlight( tstart, aHit->time() ); + //double tof = timeOfFlight( tstart, aHit->time() ); + double tof = timeOfFlight( tstart, matchCand.hitTime ); + // set time-of-flight matchCand.tof = tof; @@ -2016,6 +2091,15 @@ StETofMatchMaker::calculatePidVariables( eTofHitVec& finalMatchVec, int& nPrimar // set beta matchCand.beta = beta; + + if( matchCand.clusterSize > 999 ){ + + mHistograms.at( "AAA_beta_mom_SD")->Fill( pTrack->momentum().mag() , 1/beta ); + + } + + + if( mDebug ) { LOG_INFO << "calculatePidVariables() - pathlength: " << pathLength << " time-of-flight: " << tof << " and beta: " << beta << " are set" << endm; } @@ -2434,6 +2518,7 @@ StETofMatchMaker::expectedTimeOfFlight( const double& pathLength, const double& void StETofMatchMaker::fillQaHistograms( eTofHitVec& finalMatchVec ) { + vector< int > nPidMatches( 36 ); for( auto& matchCand : finalMatchVec ) { @@ -2441,6 +2526,10 @@ StETofMatchMaker::fillQaHistograms( eTofHitVec& finalMatchVec ) int charge; float mom; + // int sector = 0; // + // int plane = 0; // + // int counter = 0; // + float dEdx = -999.; float nSigmaPion = -999; @@ -2474,6 +2563,10 @@ StETofMatchMaker::fillQaHistograms( eTofHitVec& finalMatchVec ) StMuTrack* pTrack = aHit->primaryTrack(); if( !pTrack ) continue; + //sector = aHit->sector(); + //plane = aHit->zPlane(); + //counter = aHit->counter(); + charge = pTrack->charge(); mom = pTrack->momentum().mag(); @@ -2517,6 +2610,7 @@ StETofMatchMaker::fillQaHistograms( eTofHitVec& finalMatchVec ) mHistograms.at( "matchCand_m2_mom" )->Fill( mom, m2 ); mHistograms.at( "matchCand_m2_signmom" )->Fill( sign * mom, m2 ); + // plots per counter std::string histName_beta_mom = "matchCand_beta_mom_s" + std::to_string( matchCand.sector ) + "m" + std::to_string( matchCand.plane ) + "c" + std::to_string( matchCand.counter ); @@ -2723,6 +2817,22 @@ StETofMatchMaker::bookHistograms() for( int sector = eTofConst::sectorStart; sector <= eTofConst::sectorStop; sector++ ) { for( int plane = eTofConst::zPlaneStart; plane <= eTofConst::zPlaneStop; plane++ ) { for( int counter = eTofConst::counterStart; counter <= eTofConst::counterStop; counter++ ) { + + //single sided matching qa + std::string histName_t0corr_mom_zoom = "matched_t0corr_mom_zoom_s" + std::to_string( sector ) + "m" + std::to_string( plane ) + "c" + std::to_string( counter ); + + mHistograms2d[ histName_t0corr_mom_zoom ] = new TH2F( Form( "T_matched_t0corr_mom_zoom_s%dm%dc%d", sector, plane, counter ), Form( "measured tof - tof_{#pi} vs. momentum in sector %d module %d counter %d;mom (GeV/c);#Delta time (ns)", sector, plane, counter ), 200, 0., 3., 500, -5., 5. ); + + + std::string histName_t0corr_mom_zoom_SD = "matched_t0corr_mom_zoom_SD_s" + std::to_string( sector ) + "m" + std::to_string( plane ) + "c" + std::to_string( counter ); + + mHistograms2d[ histName_t0corr_mom_zoom_SD ] = new TH2F( Form( "T_matched_t0corr_mom_zoom_SD_s%dm%dc%d", sector, plane, counter ), Form( "measured tof - tof_{#pi} vs. momentum in sector %d module %d counter %d;mom (GeV/c);#Delta time (ns)", sector, plane, counter ), 200, 0., 3., 500, -5., 5. ); + + + + + + std::string histName_hit_localXY = "eTofHits_localXY_s" + std::to_string( sector ) + "m" + std::to_string( plane ) + "c" + std::to_string( counter ); std::string histName_hit_globalXY = "eTofHits_globalXY_s" + std::to_string( sector ) + "m" + std::to_string( plane ) + "c" + std::to_string( counter ); std::string histName_hit_eta_phi = "eTofHits_phi_eta_s" + std::to_string( sector ) + "m" + std::to_string( plane ) + "c" + std::to_string( counter ); @@ -3120,3 +3230,700 @@ void StETofMatchMaker::checkClockJumps() mETofHitMaker->updateClockJumpMap( mClockJumpDirection ); } } + +//--------------------------------------------------------------------------- +void +StETofMatchMaker::sortMatchCases( eTofHitVec inputVec , std::map< Int_t, eTofHitVec >& outputMap ) +{ + + + // sort & flag Match candidates + + // define temporary vectors for iterating through matchCandVec + eTofHitVec tempVec = inputVec; + eTofHitVec erasedVec = tempVec; + eTofHitVec tempMMVec; + tempMMVec.clear(); + std::map< Int_t, eTofHitVec > MMMap; + MMMap.clear(); + + eTofHitVec ssVec; + + // get multi Hit sets + // int deltaSize = 0; + + eTofHitVecIter tempIter = tempVec.begin(); + eTofHitVecIter erasedIter = erasedVec.begin(); + + + if(tempVec.size() < 1 ) return; + + while( tempVec.size() != 0 ) { + + tempIter = tempVec.begin(); + erasedIter = erasedVec.begin(); + + + tempMMVec.push_back(*tempIter); + erasedVec.erase( erasedIter ); + + // int sizeOld = tempMMVec.size(); + int count =0; + int countwhile = 0; + + for(unsigned int s =0; s < tempMMVec.size(); s++){ + + count++; + + erasedIter = erasedVec.begin(); + + if(erasedVec.size() <= 0 ) continue; + + countwhile = 0; + + while( erasedIter != erasedVec.end() ) { + + countwhile++; + + if(tempMMVec.at(s).trackId == erasedIter->trackId && tempMMVec.at(s).index2ETofHit == erasedIter->index2ETofHit){ + + erasedVec.erase( erasedIter ); + erasedIter++; + continue;} + if(tempMMVec.at(s).trackId == erasedIter->trackId || tempMMVec.at(s).index2ETofHit == erasedIter->index2ETofHit){ + if(!mIsSim){ + // erasedIter->matchFlag = 0; + } + tempMMVec.push_back(*erasedIter); + + erasedVec.erase( erasedIter ); + + } + if( erasedVec.size() <= 0 ) break; + if( erasedIter == erasedVec.end()) break; + erasedIter++; + + } //while inner + + }// for + + // deltaSize = sizeOld - tempMMVec.size(); + + MMMap[tempMMVec.begin()->trackId] = tempMMVec; + tempMMVec.clear(); + + tempVec = erasedVec; + } + + + outputMap = MMMap; + + +} +//--------------------------------------------------------------------------- +void +StETofMatchMaker::sortandcluster(eTofHitVec& matchCandVec , eTofHitVec& detectorHitVec , eTofHitVec& intersectionVec , eTofHitVec& finalMatchVec){ + + + //flag Overlap-Hits ------------------------------------------------------------------- + std::map< Int_t, eTofHitVec > overlapHitMap; + eTofHitVec overlapHitVec; + eTofHitVec tempVecOL = matchCandVec; + eTofHitVecIter detHitIter; + eTofHitVecIter detHitIter2; + + for( auto detHitIter = tempVecOL.begin(); detHitIter != tempVecOL.end(); ) { + + detHitIter = tempVecOL.begin(); + detHitIter2 = tempVecOL.begin(); + + bool isOverlap = false; + int counterId1 = (detHitIter->sector*100) + (detHitIter->plane*10) + (detHitIter->counter); + + for( auto detHitIter2 = tempVecOL.begin(); detHitIter2 != tempVecOL.end(); ) { + + int counterId2 = (detHitIter2->sector*100) + (detHitIter2->plane*10) + (detHitIter2->counter); + + if(counterId1 != counterId2 && detHitIter->trackId == detHitIter2->trackId){ + + int mf2 = counterId2 ; + + detHitIter2->matchFlag = mf2; + + matchCandVec.at(detHitIter2 - tempVecOL.begin()).matchFlag = 1; + + overlapHitVec.push_back(*detHitIter2); + tempVecOL.erase(detHitIter2); + + isOverlap = true; + } + + if( tempVecOL.size() <= 0 ) break; + if( detHitIter2 == tempVecOL.end()) break; + detHitIter2++; + + } + + if(isOverlap){ + + detHitIter->matchFlag = counterId1; + + matchCandVec.at(detHitIter - tempVecOL.begin()).matchFlag = 1; + + overlapHitVec.push_back(*detHitIter); + + //fill map + overlapHitMap[overlapHitVec.begin()->trackId] = overlapHitVec; + + overlapHitVec.clear(); + + } + tempVecOL.erase(detHitIter); + + if( tempVecOL.size() <= 0 ) break; + if( detHitIter == tempVecOL.end()) break; + detHitIter++; + + } + + // fill match cand vec counter wise + std::vector< eTofHitVec > matchCandVecCounter(108); + + for(int i =0; i < 108; i++){ + + for(unsigned int n = 0; n < matchCandVec.size(); n++){ + + int sector = matchCandVec.at(n).sector; + int plane = matchCandVec.at(n).plane; + int counter = matchCandVec.at(n).counter; + + int counterId = 9*(sector - 13) + 3*(plane - 1) + (counter -1); + + if(counterId == i ) { + matchCandVecCounter.at(i).push_back(matchCandVec.at(n)); + } + }//loop over hits + }//loop over counters + + + // loop over counters + for(int counterNr = 0; counterNr < 108; counterNr++){ + + // sort & flag Match candidates + eTofHitVec tempVec = matchCandVecCounter.at(counterNr); + eTofHitVec tempVec2 = matchCandVecCounter.at(counterNr); + std::map< Int_t, eTofHitVec > MMMap; + + sortMatchCases(tempVec, MMMap); + + // final containers + std::map< Int_t, eTofHitVec > MultMultMap; + std::map< Int_t, eTofHitVec > SingleHitMap; + std::map< Int_t, eTofHitVec > SingleTrackMap; + eTofHitVec ssVec; + + map::iterator it; + + for (it = MMMap.begin(); it != MMMap.end(); it++) + { + int nTracks = 1; + int nHits = 1; + + for(unsigned int l =0; l< it->second.size(); l++){ + for(unsigned int j = l; j< it->second.size(); j++){ + + if( it->second.at(l).trackId != it->second.at(j).trackId) nTracks++; + if( it->second.at(l).index2ETofHit != it->second.at(j).index2ETofHit ) nHits++; + + } // for inner + } //for outer + + + // cases:: + // Single Hit - Single Track + if(nTracks == 1 && nHits == 1) { + + ssVec.push_back(it->second.front() ); + + int isMerged = 10; // 10 codes for normal hit + int isOl = it->second.front().matchFlag; + + if( it->second.front().clusterSize > 999 ) { + + isMerged = 20; // 20 codes for single hit + it->second.front().clusterSize = 1; + } + + it->second.front().matchFlag = 100 + isMerged + isOl; + finalMatchVec.push_back(it->second.front()); + } + + + // Single Hit - Multi Track + if( nTracks > 1 && nHits == 1) { + + double dr = 0.0; + double dr_best = 99999.0; // dy for SHs at 27 + unsigned int ind = 0; + unsigned int ind_best = 0; + + for(unsigned int l =0; l < it->second.size(); l++){ + + dr = (it->second.at(l).deltaX * it->second.at(l).deltaX) + (it->second.at(l).deltaY * it->second.at(l).deltaY); + ind = l; + + if(dr <= dr_best){ + dr_best = dr; + ind_best = ind; + } + } + + SingleHitMap[it->first] = it->second; + + //pick closest track and push to finalMatchVec + int isMerged = 10; + int isOl = it->second.at(ind_best).matchFlag; + + if( it->second.at(ind_best).clusterSize > 999 ){ + + isMerged = 20; + it->second.at(ind_best).clusterSize = 1; + } + + it->second.at(ind_best).matchFlag = 300 + isMerged + isOl; + finalMatchVec.push_back(it->second.at(ind_best)); + } + + + // Multi Hit - Single Track + if( nTracks ==1 && nHits > 1) { + + bool isN = false; + bool isS = false; + + for(unsigned int l =0; l < it->second.size(); l++){ + + if(it->second.at(l).clusterSize < 999){ + isN = true; + }else{ + isS = true; + } + } + + SingleTrackMap[it->first] = it->second; + + // sort by merge cases :: SS, NN, SN + //NN + if(isN && (!isS)){ + + std::vector< std::vector > mergeIndVec(it->second.size()); + + double dr_sum=0; + double dr_diff = 0; + double dr_mean=0; + + double dr = 0.0; + double dr_best = 99999.0; // dy for SHs at 27 + unsigned int ind = 0; + unsigned int ind_best = 0; + + for(unsigned int l =0; l < it->second.size(); l++){ + + dr = sqrt((it->second.at(l).deltaX * it->second.at(l).deltaX) + (it->second.at(l).deltaY * it->second.at(l).deltaY)); + ind = l; + + dr_sum += abs(dr); + + if(dr <= dr_best){ + dr_best = dr; + ind_best = ind; + } + } + + dr_mean = dr_sum / it->second.size(); + + for(unsigned int c =0; c < it->second.size(); c++){ + + dr = sqrt((it->second.at(c).deltaX * it->second.at(c).deltaX) + (it->second.at(c).deltaY * it->second.at(c).deltaY)); + dr_diff += abs(dr - dr_mean); + } + + // NN Hits already merged in HitMaker + + int mergedCluSz = 0; + int mergedMatchFlag = 0; + int isMerged = 0; + int isOl = it->second.at(ind_best).matchFlag; + + if(it->second.at(ind_best).clusterSize > 100 && it->second.at(ind_best).clusterSize < 200){ + + mergedCluSz = it->second.at(ind_best).clusterSize % 100; + + }else{ + + mergedCluSz = it->second.at(ind_best).clusterSize; + } + + if(mergedCluSz > 1){ isMerged = 30; // 30 codes for normal-normal-merge + }else{ + isMerged = 10; + } + + mergedMatchFlag = 200 + isMerged + isOl; // 200 codes for SingleTrackMultiHit + it->second.at(ind_best).matchFlag = mergedMatchFlag; + + finalMatchVec.push_back(it->second.at(ind_best)); + } + + //SS + if(isS && (!isN)){ + + std::vector< std::vector > mergeIndVec(it->second.size()); + + for(unsigned int l =0; l < it->second.size(); l++){ + mergeIndVec.at(l).push_back(0); + } + + double dr = 0.0; + double dr_best = 99999.0; // dy for SHs at 27 + unsigned int ind = 0; + unsigned int ind_best = 0; + + for(unsigned int l =0; l < it->second.size(); l++){ + + // localY doesnt contain any ETOF information -> not usefull for merging single sided hits + dr = it->second.at(l).deltaX; + ind = l; + + if(dr <= dr_best){ + dr_best = dr; + ind_best = ind; + } + } + + // merge MatchCands + + eTofHitVec hitVec = it->second ; + + double mergedTime = it->second.at(ind_best).hitTime; + double mergedToT = it->second.at(ind_best).tot; + double mergedPosY = it->second.at(ind_best).localY; + double mergedPosX = it->second.at(ind_best).localX; + int mergedCluSz = 1; + int mergedMatchFlag = 0; + int mergedIdTruth = it->second.at(ind_best).IdTruth; + + for(unsigned int j=0; j < hitVec.size(); j++) { + + if( j == ind_best) continue; + + double dx = it->second.at(ind_best).localX - hitVec.at(j).localX; + double dy = it->second.at(ind_best).localY - hitVec.at(j).localY; + double dt = abs( it->second.at(ind_best).hitTime - hitVec.at(j).hitTime); + + // merge + if( abs(dx) < dx_3sig && abs(dy) < dy_3sig && abs(dt) < dt_3sig ){ + + mergedTime += hitVec.at(j).hitTime; + mergedToT += hitVec.at(j).tot; + mergedPosY += hitVec.at(j).localY; + mergedPosX += hitVec.at(j).localX; + mergedCluSz++; + + if(mergedIdTruth != hitVec.at(j).IdTruth) mergedIdTruth =0; + + } + } + + // create mergend hit and MC; + mergedTime /= mergedCluSz; + mergedToT /= mergedCluSz; + mergedPosY /= mergedCluSz; + mergedPosX /= mergedCluSz; + int isMerged = 0; + int isOl = it->second.at(ind_best).matchFlag; + + if(mergedCluSz > 1){ isMerged = 40; // codes for sigle-single-merge + }else{ + isMerged = 20; + } + + mergedMatchFlag = 200 + isMerged + isOl; // 200 codes for SingleTrackMultiHit + + // use only the floating point remainder of the time with respect the the bTof clock range + mergedTime = fmod( mergedTime, eTofConst::bTofClockCycle ); + if( mergedTime < 0 ) mergedTime += eTofConst::bTofClockCycle; + + it->second.at(ind_best).hitTime = mergedTime; + it->second.at(ind_best).tot = mergedToT; + it->second.at(ind_best).localX = mergedPosX; + it->second.at(ind_best).localY = mergedPosY; + it->second.at(ind_best).IdTruth = mergedIdTruth; + it->second.at(ind_best).matchFlag = mergedMatchFlag; + it->second.at(ind_best).clusterSize = mergedCluSz; + + + finalMatchVec.push_back(it->second.at(ind_best)); + } + + //SN + if(isN && isS){ + + std::vector< std::vector > mergeIndVec(it->second.size()); + + for(unsigned int l =0; l < it->second.size(); l++){ + mergeIndVec.at(l).push_back(0); + } + + double dr = 0.0; + double dr_best = 99999.0; // dy for SHs at 27 + unsigned int ind = 0; + unsigned int ind_best = 0; + + for(unsigned int l =0; l < it->second.size(); l++){ + + if(it->second.at(l).clusterSize > 999) continue; + + // localY doesnt contain any ETOF information for singleSidedHits-> not usefull for merging later on + dr = it->second.at(l).deltaX*it->second.at(l).deltaX + it->second.at(l).deltaY*it->second.at(l).deltaY; + ind = l; + + if(dr <= dr_best){ + dr_best = dr; + ind_best = ind; + } + } + + + // merge MatchCands + eTofHitVec hitVec = it->second ; + + double mergedTime = it->second.at(ind_best).hitTime; + double mergedToT = it->second.at(ind_best).tot; + double mergedPosY = it->second.at(ind_best).localY; + double mergedPosX = it->second.at(ind_best).localX; + int mergedCluSz = 1; + int mergedMatchFlag = 0; + int mergedIdTruth = it->second.at(ind_best).IdTruth; + + for(unsigned int j=0; j < hitVec.size(); j++) { + + if( j == ind_best) continue; + + double dx = it->second.at(ind_best).localX - hitVec.at(j).localX; + double dy = it->second.at(ind_best).localY - hitVec.at(j).localY; + double dt = abs( it->second.at(ind_best).hitTime - hitVec.at(j).hitTime); + + // merge + if( abs(dx) < dx_3sig && abs(dy) < dy_3sig && abs(dt) < dt_3sig ){ + + mergedTime += hitVec.at(j).hitTime; + mergedToT += hitVec.at(j).tot; + mergedPosY += hitVec.at(j).localY; + mergedPosX += hitVec.at(j).localX; + mergedCluSz++; + + if(mergedIdTruth != hitVec.at(j).IdTruth) mergedIdTruth =0; + } + } + + // create mergend hit and MC + mergedTime /= mergedCluSz; + mergedToT /= mergedCluSz; + mergedPosY /= mergedCluSz; + mergedPosX /= mergedCluSz; + int isMerged = 0; + int isOl = it->second.at(ind_best).matchFlag; + + if(mergedCluSz > 1){ isMerged = 50; // codes for sigle-normal-merge + }else{ + isMerged = 10; + } + + mergedMatchFlag = 200 + isMerged + isOl; // 200 codes for SingleTrackMultiHit + + // use only the floating point remainder of the time with respect the the bTof clock range + mergedTime = fmod( mergedTime, eTofConst::bTofClockCycle ); + if( mergedTime < 0 ) mergedTime += eTofConst::bTofClockCycle; + + it->second.at(ind_best).hitTime = mergedTime; + it->second.at(ind_best).tot = mergedToT; + it->second.at(ind_best).localX = mergedPosX; + it->second.at(ind_best).localY = mergedPosY; + it->second.at(ind_best).IdTruth = mergedIdTruth; + it->second.at(ind_best).matchFlag = mergedMatchFlag; + it->second.at(ind_best).clusterSize = mergedCluSz ; + + finalMatchVec.push_back(it->second.at(ind_best)); + } + } // multi-hit-single-track + + + // Multi Hit - Multi Track + if(nTracks > 1 && nHits > 1) { + + // for each track pick closest hit + eTofHitVec hitVec = it->second ; + eTofHitVec bestMatchVec; + eTofHitVec mergeCandVec; + eTofHitVec ambigVec; + std::map< Int_t, StructETofHit > bestMatchMap; + std::map< Int_t, eTofHitVec > mergeCandMap; + std::map< Int_t, eTofHitVec > mergeCandMap2; + std::map< Int_t, eTofHitVec > ambigMap; + std::vector indVec; + + for(unsigned int l =0; l < it->second.size(); l++){ + + double dr = it->second.at(l).deltaX*it->second.at(l).deltaX + it->second.at(l).deltaY*it->second.at(l).deltaY; + double dr_best = 99999.0; // dy for SHs at 27 + unsigned int ind = 0; + unsigned int ind_best = l; + int trackId = it->second.at(l).trackId; + int vcnt = 0; + + if(std::find(indVec.begin(), indVec.end(), trackId) != indVec.end()) continue; + + for(unsigned int n = 0; n < it->second.size(); n++){ + + if(it->second.at(n).trackId != trackId) continue; + + // localY doesnt contain any ETOF information for sHits-> take nHit if possible + dr = it->second.at(n).deltaX*it->second.at(n).deltaX + it->second.at(n).deltaY*it->second.at(n).deltaY; + ind = n; + + if(dr < dr_best){ + + if(vcnt){ + mergeCandVec.push_back(it->second.at(ind_best)); + }else{ + vcnt++; + } + dr_best = dr; + ind_best = ind; + + }else{ + + mergeCandVec.push_back(it->second.at(n)); + } + } + + indVec.push_back(trackId); + bestMatchMap[trackId] = it->second.at(ind_best); + bestMatchVec.push_back(it->second.at(ind_best)); + } + + + std::vector indVecBMtrack; + std::vector indVecBMhit; + + for(unsigned int b =0; b < bestMatchVec.size() ; b++){ + indVecBMtrack.push_back(bestMatchVec.at(b).trackId); + indVecBMhit.push_back(bestMatchVec.at(b).index2ETofHit); + } + + std::vector indVecUsedTrack; + std::vector indVecReplaceTrack; + std::vector indVecUsedHit; + eTofHitVec MatchVecTemp = bestMatchVec; + eTofHitVec finalbestMatchVec; + + while(MatchVecTemp.size() > 0){ + + double dr = 0.0; + double dr_best = 99999.0; // dy for SHs at 27 + unsigned int ind = 0; + unsigned int ind_best = 0; + for(unsigned int b =0; b < MatchVecTemp.size() ; b++){ + + ind = b; + + dr = MatchVecTemp.at(b).deltaX * MatchVecTemp.at(b).deltaX + MatchVecTemp.at(b).deltaY * MatchVecTemp.at(b).deltaY; + if(dr <= dr_best){ + dr_best = dr; + ind_best = ind; + } + } + + finalbestMatchVec.push_back(MatchVecTemp.at(ind_best)); + indVecUsedTrack.push_back(MatchVecTemp.at(ind_best).trackId); + indVecUsedHit.push_back(MatchVecTemp.at(ind_best).index2ETofHit); + MatchVecTemp.erase(MatchVecTemp.begin() + ind_best); + + //remove all matches with same hit id + for(unsigned int b =0; b < MatchVecTemp.size() ; b++){ + + if(std::find(indVecUsedHit.begin(), indVecUsedHit.end(), MatchVecTemp.at(b).index2ETofHit) != indVecUsedHit.end()) { + + indVecReplaceTrack.push_back(MatchVecTemp.at(b).trackId); + MatchVecTemp.erase(MatchVecTemp.begin() + b); + b = -1; + } + } + + //check for replacement + std::sort( indVecReplaceTrack.begin(), indVecReplaceTrack.end() ); + indVecReplaceTrack.erase( unique( indVecReplaceTrack.begin(), indVecReplaceTrack.end() ), indVecReplaceTrack.end() ); + + bool found1 = false; + double dx1 = 0; + double dy1 = 0; + double dx_best1 = 99999.0; + double dy_best1 = 99999.0; + unsigned int ind1 = 0; + unsigned int ind_best1 = 0; + for(unsigned int i = 0; i < mergeCandVec.size();i++){ + + ind1 = i; + + if(!(std::find(indVecReplaceTrack.begin(), indVecReplaceTrack.end(), mergeCandVec.at(i).trackId) != indVecReplaceTrack.end())) continue; + if(std::find(indVecUsedTrack.begin(), indVecUsedTrack.end(), mergeCandVec.at(i).index2ETofHit) != indVecUsedTrack.end()) continue; + if(std::find(indVecUsedHit.begin(), indVecUsedHit.end(), mergeCandVec.at(i).index2ETofHit) != indVecUsedHit.end()) continue; + if(std::find(indVecBMhit.begin(), indVecBMhit.end(), mergeCandVec.at(i).index2ETofHit) != indVecBMhit.end()) continue; + + dx1 = mergeCandVec.at(i).deltaX; + dy1 = mergeCandVec.at(i).deltaY; + + if(dy1 < dy_best1){ dy_best1 = dy1;} + + if(dx1 < dx_best1){ + dx_best1 = dx1; + ind_best1 = ind1; + found1 = true; + } else if(dx1 == dx_best1){ + + if(dy1 < dy_best1 && dy1 < dy_max && dy1 != 27.0){ + ind_best1 = ind1; + found1 = true; + } else if( dy1 == 27.0){ + ind_best1 = ind1; + found1 = true; + } + } + } + + if(found1){ + + finalbestMatchVec.push_back(mergeCandVec.at(ind_best1)); + indVecUsedTrack.push_back(mergeCandVec.at(ind_best1).trackId); + indVecUsedHit.push_back(mergeCandVec.at(ind_best1).index2ETofHit); + mergeCandVec.erase(mergeCandVec.begin() + ind_best1); + } + + bestMatchVec = finalbestMatchVec; + + for(unsigned int i=0;i< bestMatchVec.size();i++){ + + if(bestMatchVec.at(i).clusterSize < 999 ){ + bestMatchVec.at(i).matchFlag = 410; + }else{ + bestMatchVec.at(i).matchFlag = 420; + bestMatchVec.at(i).clusterSize -= 1000; + } + finalMatchVec.push_back(bestMatchVec.at(i)); + } + } + } + }// loop over MMMap + }//loop over counters +} diff --git a/StRoot/StETofMatchMaker/StETofMatchMaker.h b/StRoot/StETofMatchMaker/StETofMatchMaker.h index 0a5020fbafb..ecd274085eb 100644 --- a/StRoot/StETofMatchMaker/StETofMatchMaker.h +++ b/StRoot/StETofMatchMaker/StETofMatchMaker.h @@ -87,7 +87,7 @@ class StETofMatchMaker : public StMaker { Double_t localX; Double_t localY; Double_t tot; - Double_t clusterSize; + Int_t clusterSize; Int_t index2ETofHit; StThreeVectorD globalPos; Int_t trackId; @@ -99,6 +99,10 @@ class StETofMatchMaker : public StMaker { Double_t beta; Double_t pathLength; Double_t tof; + Int_t IdTruth; + Int_t IdTruthHit; + Double_t totDiff; + }; typedef std::vector< StructETofHit > eTofHitVec; @@ -160,6 +164,9 @@ class StETofMatchMaker : public StMaker { void fillPidTraits( eTofHitVec& finalMatchVec ); void calculatePidVariables( eTofHitVec& finalMatchVec, int& nPrimaryWithPid ); + void sortandcluster(eTofHitVec& matchCandVec , eTofHitVec& detectorHitVec , eTofHitVec& intersectionVec , eTofHitVec& finalMatchVec); + void sortMatchCases( eTofHitVec inputVec , std::map< Int_t, eTofHitVec >& outputMap ); + double startTimeBTof(); double startTimeETof( const eTofHitVec& finalMatchVec, unsigned int& nCand_etofT0 ); @@ -220,9 +227,17 @@ class StETofMatchMaker : public StMaker { std::map< Int_t, Int_t > mClockJumpDirection; std::string mHistFileName; + std::map< std::string, TH1* > mHistograms; std::map< std::string, TH2* > mHistograms2d; + // used for single sided match cases + Double_t dx_3sig; + Double_t dy_3sig; + Double_t dt_3sig; + Double_t dy_max; + + virtual const Char_t *GetCVS() const { static const char cvs[]="Tag $Name: $Id: built " __DATE__ " " __TIME__ ; return cvs; } ClassDef( StETofMatchMaker, 0 ) diff --git a/StRoot/StEvent/StETofHeader.cxx b/StRoot/StEvent/StETofHeader.cxx index 2588562ef5d..6c594ffdcce 100644 --- a/StRoot/StEvent/StETofHeader.cxx +++ b/StRoot/StEvent/StETofHeader.cxx @@ -38,7 +38,8 @@ StETofHeader::StETofHeader() mStarTrgCmdIn( 0 ), mEventStatusFlag( 0 ), mMissMatchFlagVec( eTofConst::nGet4sInSystem, false ), - mGoodEventFlagVec( eTofConst::nCountersInSystem, false ) + mGoodEventFlagVec( eTofConst::nGet4sInSystem, false ), + mHasPulsersVec( eTofConst::nCountersInSystem, false ) { mRocGdpbTs.clear(); mRocStarTs.clear(); @@ -56,7 +57,8 @@ StETofHeader::StETofHeader( const double& trgGdpbTime, const double& trgStarTime mStarTrgCmdIn( starTrgCmdIn ), mEventStatusFlag( eventStatusFlag ), mMissMatchFlagVec( eTofConst::nGet4sInSystem, false ), - mGoodEventFlagVec( eTofConst::nCountersInSystem, false ) + mGoodEventFlagVec( eTofConst::nGet4sInSystem, false ), + mHasPulsersVec( eTofConst::nCountersInSystem, false ) { setRocGdpbTs( gdpbTs ); setRocStarTs( starTs ); @@ -73,7 +75,8 @@ StETofHeader::StETofHeader( const double& trgGdpbTime, const double& trgStarTime mStarTrgCmdIn( starTrgCmdIn ), mEventStatusFlag( eventStatusFlag ), mMissMatchFlagVec( MissMatchFlagVec ), - mGoodEventFlagVec( eTofConst::nCountersInSystem, false ) + mGoodEventFlagVec( eTofConst::nGet4sInSystem, false ), + mHasPulsersVec( eTofConst::nCountersInSystem, false ) { setRocGdpbTs( gdpbTs ); setRocStarTs( starTs ); @@ -82,7 +85,7 @@ StETofHeader::StETofHeader( const double& trgGdpbTime, const double& trgStarTime StETofHeader::StETofHeader( const double& trgGdpbTime, const double& trgStarTime, const map< unsigned int, uint64_t >& gdpbTs, const map< unsigned int, uint64_t >& starTs, const unsigned int& starToken, const unsigned int& starDaqCmdIn, const unsigned int& starTrgCmdIn, - const uint64_t& eventStatusFlag, const std::vector& MissMatchFlagVec, const std::vector& GoodEventFlagVec ) + const uint64_t& eventStatusFlag, const std::vector& MissMatchFlagVec, const std::vector& GoodEventFlagVec, const std::vector& HasPulsersVec ) : mTrgGdpbFullTime( trgGdpbTime ), mTrgStarFullTime( trgStarTime ), mStarToken( starToken ), @@ -90,7 +93,8 @@ StETofHeader::StETofHeader( const double& trgGdpbTime, const double& trgStarTime mStarTrgCmdIn( starTrgCmdIn ), mEventStatusFlag( eventStatusFlag ), mMissMatchFlagVec( MissMatchFlagVec ), - mGoodEventFlagVec( GoodEventFlagVec ) + mGoodEventFlagVec( GoodEventFlagVec ), + mHasPulsersVec( HasPulsersVec ) { setRocGdpbTs( gdpbTs ); setRocStarTs( starTs ); @@ -169,6 +173,11 @@ StETofHeader::goodEventFlagVec() const { return mGoodEventFlagVec; } +std::vector +StETofHeader::hasPulsersVec() const +{ + return mHasPulsersVec; +} void StETofHeader::setTrgGdpbFullTime( const double& gdpbFullTime ) @@ -230,3 +239,9 @@ StETofHeader::setGoodEventFlagVec( const std::vector& FlagVec ) { mGoodEventFlagVec = FlagVec; } + +void +StETofHeader::setHasPulsersVec( const std::vector& PulserVec ) +{ + mHasPulsersVec = PulserVec; +} diff --git a/StRoot/StEvent/StETofHeader.h b/StRoot/StEvent/StETofHeader.h index 8daaa42f7a9..c19e50d8526 100644 --- a/StRoot/StEvent/StETofHeader.h +++ b/StRoot/StEvent/StETofHeader.h @@ -55,7 +55,7 @@ class StETofHeader : public StObject { ** @brief Full constructor including goodEventFlag, which is normally set in calibrations only. **/ StETofHeader( const double&, const double&, const map< unsigned int, uint64_t >&, const map< unsigned int, uint64_t >& , - const unsigned int&, const unsigned int&, const unsigned int&, const uint64_t&, const std::vector&, const std::vector& ); + const unsigned int&, const unsigned int&, const unsigned int&, const uint64_t&, const std::vector&, const std::vector& , const std::vector& ); ~StETofHeader(); @@ -78,6 +78,8 @@ class StETofHeader : public StObject { **/ std::vector goodEventFlagVec() const; + std::vector hasPulsersVec() const; + void setTrgGdpbFullTime( const double& gdpbFullTime ); void setTrgStarFullTime( const double& starFullTime ); @@ -92,7 +94,7 @@ class StETofHeader : public StObject { void setEventStatusFlag( const uint64_t& statusFlag ); void setGoodEventFlagVec( const std::vector& FlagVec ); void setGoodEventFlagVec( int blubb ) {return;} - // void setGoodEventFlagVec( const std::vector& FlagVec ); + void setHasPulsersVec( const std::vector& PulserVec ); private: Double_t mTrgGdpbFullTime; @@ -109,8 +111,9 @@ class StETofHeader : public StObject { std::vector< Bool_t > mMissMatchFlagVec; std::vector< Bool_t > mGoodEventFlagVec; + std::vector< Bool_t > mHasPulsersVec; - ClassDef( StETofHeader, 3 ) + ClassDef( StETofHeader, 4 ) }; #endif // STETOFHEADER_H diff --git a/StRoot/StMuDSTMaker/COMMON/StMuETofHeader.cxx b/StRoot/StMuDSTMaker/COMMON/StMuETofHeader.cxx index 5f655a2a041..d100bcdb752 100644 --- a/StRoot/StMuDSTMaker/COMMON/StMuETofHeader.cxx +++ b/StRoot/StMuDSTMaker/COMMON/StMuETofHeader.cxx @@ -178,7 +178,11 @@ StMuETofHeader::goodEventFlagVec() const { return mGoodEventFlagVec; } - +std::vector +StMuETofHeader::hasPulsersVec() const +{ + return mHasPulsersVec; +} void StMuETofHeader::setTrgGdpbFullTime( const double& gdpbFullTime ) @@ -240,3 +244,8 @@ StMuETofHeader::setGoodEventFlagVec( const std::vector& FlagVec ) { mGoodEventFlagVec = FlagVec; } +void +StMuETofHeader::setHasPulsersVec( const std::vector& PulserVec ) +{ + mHasPulsersVec = PulserVec; +} diff --git a/StRoot/StMuDSTMaker/COMMON/StMuETofHeader.h b/StRoot/StMuDSTMaker/COMMON/StMuETofHeader.h index d29262cdc55..85f212e5302 100644 --- a/StRoot/StMuDSTMaker/COMMON/StMuETofHeader.h +++ b/StRoot/StMuDSTMaker/COMMON/StMuETofHeader.h @@ -87,6 +87,7 @@ class StMuETofHeader : public TObject { **/ std::vector goodEventFlagVec() const; + std::vector hasPulsersVec() const; void setTrgGdpbFullTime( const double& gdpbFullTime ); void setTrgStarFullTime( const double& starFullTime ); @@ -100,6 +101,7 @@ class StMuETofHeader : public TObject { void setEventStatusFlag( const uint64_t& statusFlag ); void setGoodEventFlagVec( const std::vector& FlagVec ); + void setHasPulsersVec( const std::vector& PulserVec ); private: Double_t mTrgGdpbFullTime; @@ -115,9 +117,10 @@ class StMuETofHeader : public TObject { ULong64_t mEventStatusFlag; std::vector< Bool_t > mMissMatchFlagVec; - std::vector< Bool_t > mGoodEventFlagVec; + std::vector< Bool_t > mGoodEventFlagVec; + std::vector< Bool_t > mHasPulsersVec; - ClassDef( StMuETofHeader, 3 ) + ClassDef( StMuETofHeader, 4 ) }; #endif // STMUETOFHEADER_H diff --git a/StRoot/StPicoEvent/StPicoEvent.cxx b/StRoot/StPicoEvent/StPicoEvent.cxx index 2913c2572ed..403a96dabf9 100644 --- a/StRoot/StPicoEvent/StPicoEvent.cxx +++ b/StRoot/StPicoEvent/StPicoEvent.cxx @@ -147,9 +147,12 @@ StPicoEvent::StPicoEvent(const StPicoEvent &event) : TObject() { mJetPatchThreshold[iIter] = event.mJetPatchThreshold[iIter]; } - for(int iIter=0; iIter<108; iIter++) { + for(int iIter=0; iIter<1728; iIter++) { mETofGoodEventFlag[iIter] = event.mETofGoodEventFlag[iIter]; } + for(int iIter=0; iIter<108; iIter++) { + mETofHasPulsersFlag[iIter] = event.mETofHasPulsersFlag[iIter]; + } } //_________________ @@ -339,7 +342,7 @@ void StPicoEvent::setBunchId(Int_t id) { } //_________________ -bool StPicoEvent::eTofGoodEventFlag( UShort_t iSector, UShort_t iModule, UShort_t iCounter ) const { +bool StPicoEvent::eTofGoodEventFlag( UShort_t iSector, UShort_t iModule, UShort_t iCounter , UShort_t iGet4) const { if( iSector < 13 || iSector > 24 ){ LOG_INFO << "StPicoEvent::eTofGoodEventFlag() - non-existing sector id " << iSector <<" -> return false"<< endm; return false; @@ -352,13 +355,17 @@ bool StPicoEvent::eTofGoodEventFlag( UShort_t iSector, UShort_t iModule, UShort LOG_INFO << "StPicoEvent::eTofGoodEventFlag() - non-existing counter id " << iCounter <<" -> return false"<< endm; return false; } + if( iGet4 < 1 || iGet4 > 16 ){ + LOG_INFO << "StPicoEvent::eTofGoodEventFlag() - non-existing Get4 id " << iGet4 <<" -> return false"<< endm; + return false; + } - return (bool) mETofGoodEventFlag[ 9*(iSector-13) + 3*(iModule-1) + (iCounter-1) ]; + return (bool) mETofGoodEventFlag[ 3*3*16*(iSector-13) + 3*16*(iModule-1) + 16*(iCounter-1)+ (iGet4 - 1) ]; } //_________________ void StPicoEvent::setETofGoodEventFlag( std::vector flagVec ) { - if( flagVec.size() != 108 ){ - LOG_INFO << "StPicoEvent::setETofGoodEventFlag() - eTof flag vector wrong size " << flagVec.size() <<" / 108"<< endm; + if( flagVec.size() != 1728 ){ + LOG_INFO << "StPicoEvent::setETofGoodEventFlag() - eTof flag vector wrong size " << flagVec.size() <<" / 1728"<< endm; }else{ std::copy(flagVec.begin(), flagVec.end(), mETofGoodEventFlag); } diff --git a/StRoot/StPicoEvent/StPicoEvent.h b/StRoot/StPicoEvent/StPicoEvent.h index 3ff0b07a231..30c6863ccdc 100644 --- a/StRoot/StPicoEvent/StPicoEvent.h +++ b/StRoot/StPicoEvent/StPicoEvent.h @@ -141,10 +141,14 @@ class StPicoEvent : public TObject { UShort_t etofHitMultiplicity() const { return mETofHitMultiplicity; } /// Return number of digis in ETOF modules UShort_t etofDigiMultiplicity() const { return mETofDigiMultiplicity; } - /// Return goodEventFlag for a specific eTOF counter - bool eTofGoodEventFlag( UShort_t iSector, UShort_t iModule, UShort_t iCounter ) const; - /// Return goodEventFlag by array entry + /// Return goodEventFlag for a specific eTOF Get4 + bool eTofGoodEventFlag( UShort_t iSector, UShort_t iModule, UShort_t iCounter , UShort_t iGet4) const; + /// Return goodEventFlag by array entry bool eTofGoodEventFlag( UShort_t iDet ) const { return (bool) mETofGoodEventFlag[ iDet ]; } + /// Return pulser status for a specific eTOF counter (true if both pulsers present) + bool eTofPulserStatus( UShort_t iSector, UShort_t iModule, UShort_t iCounter ) const; + /// Return pulser ststus by array entry + bool eTofPulserStatus( UShort_t iDet ) const { return (bool) mETofGoodEventFlag[ iDet ]; } /// Return number of primary tracks UShort_t numberOfPrimaryTracks() const { return mNumberOfPrimaryTracks; } /// Return FXT multiplicity (corresponds to the number of primary tracks) @@ -279,9 +283,11 @@ class StPicoEvent : public TObject { /// Set total number of digis in ETOF modules void setETofDigiMultiplicity(UShort_t mult) { mETofDigiMultiplicity = (UShort_t)mult; } /// Set goodEventFlag for a specific eTOF counter - void setETofGoodEventFlag( bool flag, UShort_t iSector, UShort_t iModule, UShort_t iCounter ) { mETofGoodEventFlag[ 9*(iSector-1) + 3*(iModule-1) + (iCounter-1) ] = flag; } - /// Full setter goodEventFlag all specific eTOF counter. Used to copy over MuDst data + void setETofGoodEventFlag( bool flag, UShort_t iSector, UShort_t iModule, UShort_t iCounter, UShort_t iGet4 ) { mETofGoodEventFlag[ 3*3*16*(iSector-1) + 3*16*(iModule-1) + 16*(iCounter-1) + (iGet4-1)] = flag; } + /// Full setter goodEventFlag all specific eTOF Get4. Used to copy over MuDst data void setETofGoodEventFlag( std::vector flagVec ); + /// Full setter pulserStatusFlag all specific eTOF counter. Used to copy over MuDst data + void setETofHasPulsersFlag( std::vector pulserVec ); /// Set number of primary tracks void setNumberOfPrimaryTracks(UShort_t mult) { mNumberOfPrimaryTracks = (UShort_t)mult; } @@ -609,8 +615,9 @@ class StPicoEvent : public TObject { UShort_t mETofHitMultiplicity ; /// Total digi multiplicity in ETOF modules UShort_t mETofDigiMultiplicity ; - /// Flag to mark if the event is good for physics analysis for each counter. A counter is considered good in each event when there are zero missmatch flags set and pulser digis on both sides are found. In this case, the counter should perform at its best. Counter efficiency should be constant between good events. Here: CounterNr = 9*sector + 3*module + counter. - bool mETofGoodEventFlag[108]; + /// Flag to mark if the event is good for physics analysis for each Get4. A Get4 is considered good in each event when there are zero missmatch flags set. Get4 efficiency should be constant between good events. As additional sanity check one can request that both pulsers were present for any given event and counter. Best performance to be expected with zero status bits and both pulsers. Here: CounterNr = 9*(sector-13) + 3*(module-1) + counter. Get4Nr = 3*3*16*(sector-13)+ 3*16*(module -1) + 16*(counter -1) + Get4. + bool mETofGoodEventFlag[1728]; + bool mETofHasPulsersFlag[108]; /// Number of primary tracks UShort_t mNumberOfPrimaryTracks; @@ -619,9 +626,9 @@ class StPicoEvent : public TObject { UShort_t mZdcUnAttenuated[2]; #if defined (__TFG__VERSION__) - ClassDef(StPicoEvent, 9) + ClassDef(StPicoEvent, 10) #else /* ! __TFG__VERSION__ */ - ClassDef(StPicoEvent, 7) + ClassDef(StPicoEvent, 8) #endif }; From ffa7b94c7b0ef3df050dbefda4ead722fc923204 Mon Sep 17 00:00:00 2001 From: Gene Van Buren <85305093+genevb@users.noreply.github.com> Date: Tue, 26 Mar 2024 14:41:35 -0400 Subject: [PATCH 03/45] First chains for 2024 (no ETOF) (#671) Initial chains for pp200 in 2024, needed for FastOffline coming in just a few weeks. Another update with a chain for AA processing may be needed later if it becomes certain that we will acquire AuAu200 data. --- StRoot/StBFChain/BigFullChain.h | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/StRoot/StBFChain/BigFullChain.h b/StRoot/StBFChain/BigFullChain.h index 917dd831eaa..ae8294bd260 100644 --- a/StRoot/StBFChain/BigFullChain.h +++ b/StRoot/StBFChain/BigFullChain.h @@ -1046,6 +1046,15 @@ Bfc_st BFC[] = { // standard chains "B2023a,ITTF,BAna,iTpcIT,hitfilt,VFMinuit,etofa,btof,mtd,l3onl,emcDY2,epdHit,trgd,ZDCvtx,analysis", "","", "Base chain for year 2023 AA data - CorrY (+ l3, epd, mtd, b/etof, b-emc)",kFALSE}, + // 2024 initial chains + {"B2024a" ,"","", + "ry2024a,in,tpcX,UseXgeom,iTpcIT,CorrY,AgML,tpcDB,TpcHitMover,Idst,tags,Tree,picoWrite,picoVtxDefault,picoCovMtxWrite", + "","", "Base chain for run 2024 data (tpc)",kFALSE}, + + {"pp2024a","" ,"", + "B2024a,ITTF,BAna,hitfilt,ppOpt,ImpBToFt0Mode,VFPPVnoCTB,beamline3D,l3onl,epdhit,btof,mtd,emcDY2,ftt,fcs,trgd,ZDCvtx,analysis", + "","","Production chain for year 2024 pp data - CorrY (+ l3, epd, mtd, btof, fcs, ftt, e/b-emc)",kFALSE}, + // Other chains/Calibration {"LaserCal0","" ,"","db,detDb,tpc_daq,tpcDb,tcl,globT,laser,LaserTest","","" From 2e60a9d2fd09be29f0e0b4bab389522814cd9bef Mon Sep 17 00:00:00 2001 From: Daniel Torres Valladares <81983942+DanielTorres98@users.noreply.github.com> Date: Tue, 26 Mar 2024 20:38:23 -0500 Subject: [PATCH 04/45] Delete warinings BTofSimMaker.cxx (#675) This branch is to address mentioned here: [Issue 149](https://github.com/star-bnl/star-sw/issues/149) --------- Co-authored-by: Daniel Torres Valladares Co-authored-by: Dmitri Smirnov --- StRoot/StBTofSimMaker/StBTofSimMaker.cxx | 22 +++++++++++----------- mgr/warnoff_dirs.txt | 1 - 2 files changed, 11 insertions(+), 12 deletions(-) diff --git a/StRoot/StBTofSimMaker/StBTofSimMaker.cxx b/StRoot/StBTofSimMaker/StBTofSimMaker.cxx index 8fc44ea2c74..9d95dddd4b3 100644 --- a/StRoot/StBTofSimMaker/StBTofSimMaker.cxx +++ b/StRoot/StBTofSimMaker/StBTofSimMaker.cxx @@ -296,7 +296,10 @@ int StBTofSimMaker::CellResponse(g2t_ctf_hit_st* tofHitsFromGeant, g2t_track_st *tof_track = g2t_track->GetTable(); int no_tracks= g2t_track->GetNRows(); - double beta; + // Initialize beta to be a large negative value. This is a flag in case the following if + // condition is not satisfied and meaning there is something wrong with the beta value. + // + double beta = -999.; int trackId = -1; for(int j=0;jtrack_p==tof_track[j].id){ @@ -803,7 +806,11 @@ int StBTofSimMaker::FastCellResponse(g2t_ctf_hit_st* tofHitsFromGeant, StBTofCol int no_tracks= g2t_track->GetNRows(); StMcTrack *partnerTrk = 0; - int partnerTrkId; + + // Initialize partnerTrkId to be a negative value. This is a flag in case the following if + // condition is not satisfied and meaning there is something wrong with the track ID. + // + int partnerTrkId = -1; for(int j=0;jtrack_p==tof_track[j].id){ partnerTrk = new StMcTrack(&(tof_track[j])); @@ -820,15 +827,8 @@ int StBTofSimMaker::FastCellResponse(g2t_ctf_hit_st* tofHitsFromGeant, StBTofCol double pathL = tofHitsFromGeant->s_track; double q = 0.; - double Rawtof = tofHitsFromGeant->tof*1000./nanosecond; - float Rawbeta=pathL/Rawtof/3e-2; - double momentum=partnerTrk->momentum().mag(); - double mass=partnerTrk->fourMomentum().m(); - double calcTof=pathL/(3e-2)/sqrt(1 - mass*mass/(momentum*momentum + mass*mass)); - double time_blur = ranGauss.shoot()*mSimResDb->timeres_tof(itray, imodule, icell)*1e-9/nanosecond; double tof = tofHitsFromGeant->tof*1000./nanosecond + time_blur; //! 85ps per channel - if ( mVpdSim ) { // VpdSimMaker present, assume vpdstart tof += mVpdSimConfig->getMcClock()*1000; } @@ -851,9 +851,9 @@ int StBTofSimMaker::FastCellResponse(g2t_ctf_hit_st* tofHitsFromGeant, StBTofCol } } - // tof = tof - mSimDb->toffset(); // Apply offset correction. + // tof = tof - mSimDb->toffset(); // Apply offset correction. double t0 = tofHitsFromGeant->tof*1000./nanosecond; - float beta=pathL/tof/3e-2; + // float beta=pathL/tof/3e-2; StMcBTofHit *mcBTofHit = new StMcBTofHit(itray,imodule,icell,de,pathL,t0,tof,q); mcBTofHit->setPosition(local); diff --git a/mgr/warnoff_dirs.txt b/mgr/warnoff_dirs.txt index 74a46211c86..e6ddc18ff2a 100644 --- a/mgr/warnoff_dirs.txt +++ b/mgr/warnoff_dirs.txt @@ -3,7 +3,6 @@ StRoot/RTS StRoot/StAnalysisMaker StRoot/StAssociationMaker StRoot/StBTofPool.* -StRoot/StBTofSimMaker StRoot/StChain StRoot/StDaqLib StRoot/StDbLib From 2e0982686339b1162c3a98c2b4fac0f28846ce19 Mon Sep 17 00:00:00 2001 From: Daniel Brandenburg Date: Wed, 27 Mar 2024 11:27:24 -0400 Subject: [PATCH 05/45] Updates to StFwdTrackMaker to allow running without XML config file (#635) This update makes the StFwdTrackMaker fully configurable from the ROOT macro without the need for any external XML config file. Changes: - FwdTrackerConfig: new functionality to allow loading a config from a string (instead of a file) and new functions for setting arbitrary values in the config - StFwdTrackMaker: many new functions for setting configuration parameters - New logic to use a default configuration if set for Data or Mc, else load from a config file The default config file is embedded for consistency. In the future BFC options can be used to toggle parameters if they need to change from one production to the next. --- StRoot/StFwdTrackMaker/FwdTrackerConfig.cxx | 68 +++++++- StRoot/StFwdTrackMaker/FwdTrackerConfig.h | 135 +++++++++++++--- StRoot/StFwdTrackMaker/StFwdTrackMaker.cxx | 93 +++++++++-- StRoot/StFwdTrackMaker/StFwdTrackMaker.h | 171 ++++++++++++++++++++ 4 files changed, 430 insertions(+), 37 deletions(-) diff --git a/StRoot/StFwdTrackMaker/FwdTrackerConfig.cxx b/StRoot/StFwdTrackMaker/FwdTrackerConfig.cxx index 901c0e8c96f..cf070d4f3f2 100644 --- a/StRoot/StFwdTrackMaker/FwdTrackerConfig.cxx +++ b/StRoot/StFwdTrackMaker/FwdTrackerConfig.cxx @@ -9,7 +9,48 @@ std::stringstream FwdTrackerConfig::sstr; // template specializations //// -// Specialization for string to avoid extra conversions +/** + * @brief write a value to path + * + * @tparam template specialization for std::string + * @param path path to write, if it DNE it is created + * @param v value (of type string) to write + */ +template <> +void FwdTrackerConfig::set( std::string path, std::string v ) { + + FwdTrackerConfig::canonize( path ); + // convrt from string to type T and return + mNodes[ path ] = v; +} + +/** + * @brief write a value to path + * + * @tparam template specialization for bool + * @param path path to write, if it DNE it is created + * @param bv boolean to write + */ +template <> +void FwdTrackerConfig::set( std::string path, bool bv ) { + + FwdTrackerConfig::canonize( path ); + // convrt from string to type T and return + std::string v = "false"; + if (bv) + v = "true"; + mNodes[ path ] = v; +} + +// +/** + * @brief Get a value from the path + * + * @tparam Specialization for string to avoid extra conversions + * @param path path to lookup + * @param dv default value if path DNE + * @return std::string value at path or default + */ template <> std::string FwdTrackerConfig::get( std::string path, std::string dv ) const { // return default value if path DNE @@ -20,13 +61,26 @@ std::string FwdTrackerConfig::get( std::string path, std::string dv ) const { return ( mNodes.at( path ) ); } -// conversion to string is a noop +/** + * @brief conversion to string is a noop + * + * @tparam string specialization + * @param str input + * @return std::string output (unchanged) + */ template <> std::string FwdTrackerConfig::convert( std::string str ) const { return str; } -// specialization for bool adds recognition of strings "true" and "false" (lower case) +/** + * @brief specialization for bool adds recognition of strings "true" and "false" (lower case) + * + * @tparam bool specialization, fallback to int check + * @param str input string + * @return true for "true" + * @return false for "false" + */ template <> bool FwdTrackerConfig::convert( std::string str ) const { @@ -39,7 +93,13 @@ bool FwdTrackerConfig::convert( std::string str ) const { return static_cast(convert( str )); } -// get as ROOT TString +/** + * @brief get as ROOT TString + * + * @tparam TString specialization + * @param str input value + * @return TString output as ROOT TString + */ template <> TString FwdTrackerConfig::convert(std::string str) const { TString r(str); diff --git a/StRoot/StFwdTrackMaker/FwdTrackerConfig.h b/StRoot/StFwdTrackMaker/FwdTrackerConfig.h index 130640b31db..fcc1c1bb0b6 100644 --- a/StRoot/StFwdTrackMaker/FwdTrackerConfig.h +++ b/StRoot/StFwdTrackMaker/FwdTrackerConfig.h @@ -26,9 +26,13 @@ class FwdTrackerConfig { std::map mNodes; static std::stringstream sstr; // reused for string to numeric conversion - // assumes bare path and adds [i] until DNE - // reports lowest non-existant index - // starts at 1 since 0 is checked on existance + /** + * @brief get lowest non-existing path index + * assumes bare path and adds [i] until DNE + * starts at 1 since 0 is checked on existance + * @param path base path to check + * @return size_t index, starts at 1 + */ size_t pathCount( const std::string path ){ size_t index = 1; std::string p = path + TString::Format( "[%zu]", index ).Data(); @@ -39,6 +43,14 @@ class FwdTrackerConfig { return index; } + /** + * @brief Reads an xml document and writes it into map + * + * @param xml xml document to map + * @param node starting node - allows recursive mapping + * @param level the integer index of the level of current parsing + * @param path the path for the current node + */ void mapFile(TXMLEngine &xml, XMLNodePointer_t node, Int_t level, std::string path = "") { using namespace std; // add the path delimeter above top level @@ -83,7 +95,11 @@ class FwdTrackerConfig { } // mapFile public: - // sanitizes a path to its canonical form + /** + * @brief Returns a path in its cannonical form + * + * @param path Path to cannoize, returned in place by reference + */ static void canonize( std::string &path ) { // remove whitespace path.erase(std::remove_if(path.begin(), path.end(), static_cast(std::isspace)), path.end()); @@ -98,7 +114,11 @@ class FwdTrackerConfig { return; } - // dump config to a basic string representation - mostly for debugging + /** + * @brief dump config to a basic string representation - mostly for debugging + * + * @return std::string + */ std::string dump() const { using namespace std; FwdTrackerConfig::sstr.str(""); @@ -109,8 +129,14 @@ class FwdTrackerConfig { return FwdTrackerConfig::sstr.str(); } - // Does a path exist - // Either node or attribute - used to determine if default value is used + /** + * @brief returns whether or not a path exist + * Either node or attribute - used to determine if default value is used + * + * @param path - the path to check + * @return true : path exists + * @return false : path DNE + */ bool exists( std::string path ) const { FwdTrackerConfig::canonize( path ); if ( 0 == mNodes.count( path ) ) @@ -118,8 +144,14 @@ class FwdTrackerConfig { return true; } - // generic conversion to type T from std::string - // override this for special conversions + /** + * @brief Generic conversion of type T from string + * override this for special conversions + * + * @tparam T : Type to convert to and return + * @param s : input string to use for conversion + * @return T converted value of type T + */ template T convert( std::string s ) const { T rv; @@ -130,10 +162,30 @@ class FwdTrackerConfig { return rv; } - + /** + * @brief Generic conversion of type T to a string + * + * @tparam T : type to convert + * @param v : value of type T + * @return std::string output string with representation of T + */ + template + std::string convertTo( T v ) const { + FwdTrackerConfig::sstr.str(""); + FwdTrackerConfig::sstr.clear(); + FwdTrackerConfig::sstr << v; + return FwdTrackerConfig::sstr.str(); + } - // template function for getting any type that can be converted from string via stringstream + /** + * @brief template function for getting any type that can be converted from string via stringstream + * + * @tparam T type to return + * @param path path to lookup + * @param dv default value to return if the node DNE + * @return T return value of type T + */ template T get( std::string path, T dv ) const { @@ -146,8 +198,28 @@ class FwdTrackerConfig { return convert( mNodes.at( path ) ); } + /** + * @brief Writes a value of type T to the map + * Uses convertTo to convert type T to a string rep + * @tparam T type of value to write + * @param path path to write to + * @param v value of type T + */ + template + void set( std::string path, T v ) { + FwdTrackerConfig::canonize( path ); + // convrt from string to type T and return + mNodes[ path ] = convertTo( v ); + } - + /** + * @brief Get a Vector object from config + * + * @tparam T type of value for the vector object + * @param path path to lookup + * @param dv default value, can use initializer list + * @return std::vector vector of type T returned + */ template std::vector getVector( std::string path, std::vector dv ) const { if ( !exists( path ) ) @@ -176,7 +248,12 @@ class FwdTrackerConfig { return result; } - // list the paths of children nodes for a given node + /** + * @brief list the paths of children nodes for a given node + * + * @param path path to search for children + * @return std::vector list of full paths to the children nodes + */ std::vector childrenOf( std::string path ) const { using namespace std; vector result; @@ -204,17 +281,28 @@ class FwdTrackerConfig { return result; } - // Constructor is noop, use load(...) + /** + * @brief Constructor is noop, use load(...) + * + */ FwdTrackerConfig() {} - // constructor that immediately loads an xml file + /** + * @brief Construct a new Fwd Tracker Config object and load a file + * + * @param filename + */ FwdTrackerConfig(std::string filename) { load( filename ); } - // Main setup routine. - // Loads the given XML file and maps it - void load( std::string filename ) { + /** + * @brief Main setup routine + * Loads the given XML file (or string) and maps it + * @param filename filename (or xml string) to load. If file the content is loaded as an xml doc + * @param asString false: filename is loaded and contents treated as xml doc, true: treat the string `filename` directly as an xml doc + */ + void load( std::string filename, bool asString = false ) { using namespace std; // empty the map of mNodes @@ -224,7 +312,12 @@ class FwdTrackerConfig { TXMLEngine xml; // Now try to parse xml file - XMLDocPointer_t xmldoc = xml.ParseFile(filename.c_str()); + XMLDocPointer_t xmldoc; + if (asString) + xmldoc = xml.ParseString(filename.c_str()); + else + xmldoc = xml.ParseFile(filename.c_str()); + if (!xmldoc) { // parse failed, TODO inform of error mErrorParsing = true; return; @@ -249,5 +342,9 @@ template <> TString FwdTrackerConfig::convert(std::string str) const; template <> std::string FwdTrackerConfig::get( std::string path, std::string dv ) const; +template <> +void FwdTrackerConfig::set( std::string path, std::string v ); +template <> +void FwdTrackerConfig::set( std::string path, bool bv ); #endif diff --git a/StRoot/StFwdTrackMaker/StFwdTrackMaker.cxx b/StRoot/StFwdTrackMaker/StFwdTrackMaker.cxx index 46d9313eb16..a2881f3f660 100644 --- a/StRoot/StFwdTrackMaker/StFwdTrackMaker.cxx +++ b/StRoot/StFwdTrackMaker/StFwdTrackMaker.cxx @@ -76,6 +76,8 @@ float BDTCrit2::Crit2_DeltaRho = -999; float BDTCrit2::Crit2_DeltaPhi = -999; float BDTCrit2::Crit2_StraightTrackRatio = -999; + + //_______________________________________________________________________________________ class GenfitUtils{ public: @@ -86,7 +88,6 @@ class GenfitUtils{ }; // GenfitUtils - // Basic sanity cuts on genfit tracks template<> bool GenfitUtils::accept( genfit::Track *track ) { @@ -148,9 +149,7 @@ template<> bool GenfitUtils::accept( genfit::Track *track ) }; - //______________________________________________________________________________________ - class SiRasterizer { public: SiRasterizer() {} @@ -226,8 +225,6 @@ class ForwardTracker : public ForwardTrackMaker { } }; - - //________________________________________________________________________ StFwdTrackMaker::StFwdTrackMaker() : StMaker("fwdTrack"), mGenHistograms(false), mGenTree(false), mForwardTracker(nullptr), mForwardData(nullptr){ SetAttr("useFtt",1); // Default Ftt on @@ -244,6 +241,7 @@ int StFwdTrackMaker::Finish() { // output file name string name = mFwdConfig.get("Output:url", "fwdTrackerOutput.root"); + LOG_INFO << "Saving StFwdTrackMaker Histograms to ROOT file: " << name << endm; TFile *fOutput = new TFile(name.c_str(), "RECREATE"); fOutput->cd(); @@ -268,18 +266,29 @@ int StFwdTrackMaker::Finish() { return kStOk; } +void StFwdTrackMaker::LoadConfiguration() { + if (mConfigFile.length() < 5){ + LOG_INFO << "Forward Tracker is using default config for "; + if ( defaultConfig == defaultConfigData ){ + LOG_INFO << " DATA" << endm; + } else { + LOG_INFO << " Simulation" << endm; + } + mFwdConfig.load( defaultConfig, true ); + } else { + LOG_INFO << "Forward Tracker is using config from file : " << mConfigFile << endm; + mFwdConfig.load( mConfigFile ); + } + configLoaded = true; +} + //________________________________________________________________________ int StFwdTrackMaker::Init() { - // Initialize configuration file - std::string configFile = SAttr("config"); - if (mConfigFile.length() > 4) { - configFile = mConfigFile; - LOG_INFO << "Forward Tracker is using config file : " << mConfigFile << endm; + if ( !configLoaded ){ + LoadConfiguration(); } - mFwdConfig.load( configFile ); - if (mGenTree) { mTreeFile = new TFile("fwdtree.root", "RECREATE"); mTree = new TTree("fwd", "fwd tracking tree"); @@ -581,8 +590,6 @@ void StFwdTrackMaker::loadFttHits( FwdDataSource::McTrackMap_t &mcTrackMap, FwdD } } // loadFttHits - - void StFwdTrackMaker::loadFttHitsFromStEvent( FwdDataSource::McTrackMap_t &mcTrackMap, FwdDataSource::HitMap_t &hitMap, int count ){ LOG_DEBUG << "Loading FTT Hits from Data" << endm; StEvent *event = (StEvent *)GetDataSet("StEvent"); @@ -1686,3 +1693,61 @@ void StFwdTrackMaker::ProcessFwdTracks( ){ } } } + + +std::string StFwdTrackMaker::defaultConfigIdealSim = R"( + + + + + + + + + +)"; + + + +std::string StFwdTrackMaker::defaultConfigData = R"( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.99 + 0.001 + + + + + + + + + +)"; \ No newline at end of file diff --git a/StRoot/StFwdTrackMaker/StFwdTrackMaker.h b/StRoot/StFwdTrackMaker/StFwdTrackMaker.h index 5be3f4f0f11..e04c158bb45 100644 --- a/StRoot/StFwdTrackMaker/StFwdTrackMaker.h +++ b/StRoot/StFwdTrackMaker/StFwdTrackMaker.h @@ -117,7 +117,9 @@ class StFwdTrackMaker : public StMaker { void SetConfigFile(std::string n) { mConfigFile = n; + LoadConfiguration(); } + void LoadConfiguration(); void SetGenerateHistograms( bool _genHisto ){ mGenHistograms = _genHisto; } void SetGenerateTree(bool _genTree) { mGenTree = _genTree; } void SetVisualize( bool _viz ) { mVisualize = _viz; } @@ -182,6 +184,175 @@ class StFwdTrackMaker : public StMaker { void FillTTree(); // if debugging ttree is turned on (mGenTree) void FitVertex(); + static std::string defaultConfigIdealSim; + static std::string defaultConfigData; + std::string defaultConfig; + bool configLoaded = false; + + // Helper functions for modifying configuration + // NOTE: to override configuration, call individual functions after setConfigForXXX + public: + /**@brief Setup the StFwdTrackMaker for running on Data + * Load the default configuration for Data. + * Note: Apply any overrides after calling this + */ + void setConfigForData() { defaultConfig = defaultConfigData; LoadConfiguration(); } + /**@brief Setup the StFwdTrackMaker for running on Data + * Load the default configuration for IDEAL simulation. + * This runs with MC track finding and MC-seeded track fitting. + * - MC track finding uses the MCTrackId to collect stgc/fst hits into track seeds + * - MC-seeded track fitting uses the MC particle momentum to seed the track fit + * - Also uses the simulated MC primary vertex with smearing according to the simgaXY,Z + * Note: Apply any overrides after calling this + */ + void setConfigForIdealSim() { defaultConfig = defaultConfigIdealSim; LoadConfiguration(); } + + /**@brief Setup the StFwdTrackMaker for running on Data + * Load the default configuration for Realistic simulation. + * This runs tracking on simulation using the same parameters / approach as on data. + * Note: Apply any overrides after calling this + */ + void setConfigForRealisticSim() { + defaultConfig = defaultConfigData; + LoadConfiguration(); + // Note: Once the slow sims work this override will not be needed + // because the slow sims will put hits into StEvent just like (data) reco chain + setFttHitSource( "GEANT" ); + } + + + /**@brief Set the filename for output ROOT file + * @param fn : filename of output ROOT file + */ + void setOutputFilename( std::string fn ) { mFwdConfig.set( "Output:url", fn ); } + /**@brief Set the data source for FTT hits + * + * @param source : {DATA, GEANT}, DATA means read from StEvent, GEANT means read directly from the GEANT hits + */ + void setFttHitSource( std::string source ) { mFwdConfig.set( "Source:ftt", source ); } + + /**@brief Enable or disable the Fst Rasterizer + * @param use : if true, load FST hits from GEANT and raster them according to r, phi resolutions. + */ + void setUseFstRasteredGeantHits( bool use = true ){ mFwdConfig.set( "SiRasterizer:active", use ); } + /**@brief Set the resolution in R for rasterizing FST hits (from fast sim) + * Only used when the Rasterizer is enabled, which results from reading FST hits from GEANT + * @param r : resolution in r (cm) + */ + void setFstRasterR( double r = 3.0 /*cm*/ ){ mFwdConfig.set( "SiRasterizer:r", r ); } + /**@brief Set the resolution in phi for rasterizing FST hits (from fast sim) + * Only used when the Rasterizer is enabled, which results from reading FST hits from GEANT + * @param phi : resolution in phi (rad) + */ + void setFstRasterPhi( double phi = 0.00409 /*2*pi/(12*128)*/ ){ mFwdConfig.set( "SiRasterizer:phi", phi ); } + + //Track Finding + /**@brief Use Ftt hits in the Seed Finding + * + */ + void setSeedFindingWithFtt() { mFwdConfig.set( "TrackFinder:source", "ftt" ); } + /**@brief Use Fst hits in the Seed Finding + * + */ + void setSeedFindingWithFst() { mFwdConfig.set( "TrackFinder:source", "fst" ); } + /**@brief Set the number of track finding iterations + * @param n : number of iterations to run + */ + void setSeedFindingNumInterations( int n = 1 ) { mFwdConfig.set("TrackFinder:nIterations", n); } + /**@brief Set the number of phi slices to split the track iterations into + * @param n : number of slices of equal size (2pi)/n + */ + void setSeedFindingNumPhiSlices( int n = 8 ) { mFwdConfig.set("TrackFinder.Iteration:nPhiSlices", n); } + /**@brief Set the connector distance for track finding + * @param d : distance between planes (1 = adjacent) + */ + void setSeedFindingConnectorDistance( int d = 1 ) { mFwdConfig.set( "TrackFinder.Connector:distance", d ); } + /**@brief Enable or disable the SubsetNN + * @param use : if true, enables the subsetNN which find the most compatible set of tracks without shared hits + * if false, all tracks are reported regardless of shared hits + */ + void setSeedFindingUseSubsetNN( bool use = true ) { mFwdConfig.set( "TrackFinder.SubsetNN:active", use ); } + /**@brief Enable or disable the SubsetNN + * @param n : minimum number of hits on a track seed. Seeds with fewer hits are discarded + */ + void setSeedFindingMinHitsOnTrack( int n = 3 ) { mFwdConfig.set( "TrackFinder.SubsetNN:min-hits-on-track", n ); } + /**@brief Enable or disable the HitRemover + * @param use : if true, enables the hit remover which removes any hits from the hitmap that were used in a track + * if false, hits are not removed after each iteration + */ + void setSeedFindingUseHitRemover( bool use = true ) { mFwdConfig.set( "TrackFinder.HitRemover:active", use ); } + /**@brief Enable or disable the Truth Seed finding + * @param use : if true, use Mc info to group hits into track seeds + * if false, seed finding uses options as in the case for data + */ + void setUseTruthSeedFinding( bool use = true ) { mFwdConfig.set( "TrackFinder:active", !use ); } + + // Track Fitting + /**@brief Turn off track fitting + * Useful if you want to speed up the run but dont need fitting (testing seed finding) + */ + void setTrackFittingOff() { mFwdConfig.set( "TrackFitter:active", "false" ); } + /**@brief Enable / disable material effects + * Material effects in kalman filter + */ + void setFittingMaterialEffects( bool mat = true) { mFwdConfig.set( "TrackFitter:materialEffects", mat ); } + /**@brief Set the resolution for the Primary Vertex in XY + * @params sXY : sigma in XY (cm) + */ + void setPrimaryVertexSigmaXY( double sXY ) { mFwdConfig.set( "TrackFitter.Vertex:sigmaXY", sXY ); } + /**@brief Set the resolution for the Primary Vertex in Z + * @params sZ : sigma in Z (cm) + */ + void setPrimaryVertexSigmaZ( double sZ ) { mFwdConfig.set( "TrackFitter.Vertex:sigmaZ", sZ ); } + // TODO: add options for beamline constraint + + /**@brief Include or exclude the Primary Vertex in fit + * @param pvf : if true, use PRimary Vertex in fit + */ + void setIncludePrimaryVertexInFit( bool pvf = true ) { mFwdConfig.set( "TrackFitter.Vertex:includeInFit", pvf ); } + /**@brief Set B-field to zero (for zero field running) + * @param zeroB : if true, use Zero B field + */ + void setZeroB( bool zeroB = true ) { mFwdConfig.set( "TrackFitter:zeroB", zeroB ); } + /**@brief Set B-field to constant (even outside of TPC) + * @param constB : if true, use const 0.5T B field + */ + void setConstB( bool constB = true ) { mFwdConfig.set( "TrackFitter:constB", constB ); } + /**@brief Force the use of McSeed for fit + * @param mcSeed : if true, use mc momentum as the seed for the track fitter + */ + void setUseMcSeedForFit( bool mcSeed = true ) { mFwdConfig.set( "TrackFitter:mcSeed", mcSeed ); } + + /**@brief Sets the tracking to refit + * This adds compatible hits from whichever detector was NOT used in seed finding + * if FTT seeding -> project to and add FST hits + * if FST seeding -> project to and add FTT hits + * @param refit : true, perform refit, false do not + */ + void setTrackRefit( bool refit = true) { mFwdConfig.set( "TrackFitter:refit", refit ); } + + /**@brief Sets the maximum number of hits that can be considered failed before the entire track fit fails + * @param n : number of failed hits allowed, -1 = no limit + */ + void setMaxFailedHitsInFit( int n = -1 /*no lim*/ ) {mFwdConfig.set("TrackFitter.KalmanFitterRefTrack:MaxFailedHits", n);} + /**@brief Sets Fitter debug level + * @param level : 0 = no output, higher numbers are more verbose + */ + void setFitDebugLvl( int level = 0 /*0=no output*/ ) {mFwdConfig.set("TrackFitter.KalmanFitterRefTrack:DebugLvl", level); } + /**@brief Sets Max fit iterations before failing + * @param n : num iterations + */ + void setFitMaxIterations( int n=4 ) {mFwdConfig.set("TrackFitter.KalmanFitterRefTrack:MaxIterations", n); } + /**@brief Sets Min fit iterations before converging + * @param n : num iterations + */ + void setFitMinIterations( int n = 1) {mFwdConfig.set("TrackFitter.KalmanFitterRefTrack:MinIterations", n); } + + /**@brief Enables smearing of the MC Primary Vertex according to sigmaXY,Z + * @param pvs : if true, smear vertex + */ + void setSmearMcPrimaryVertex( bool pvs = true ) { mFwdConfig.set( "TrackFitter.Vertex:smearMcVertex", pvs ); } + }; #endif From 267ec8eb0a43ff3ebe74abf4afc54652d1ffe21a Mon Sep 17 00:00:00 2001 From: jml985 <44065529+jml985@users.noreply.github.com> Date: Wed, 3 Apr 2024 10:25:39 -0400 Subject: [PATCH 06/45] RtsLoggingUpdate (#673) updates to allow RTS logging in Jevp while leaving it disabled in general offline computing --- OnlTools/Jevp/level.source | 5 ++++- StRoot/RTS/include/rtsLog.h | 34 +++++++++------------------------ StRoot/RTS/src/LOG/rtsLogUnix.c | 22 --------------------- mgr/Conscript-standard | 5 +++-- 4 files changed, 16 insertions(+), 50 deletions(-) diff --git a/OnlTools/Jevp/level.source b/OnlTools/Jevp/level.source index 5d6ad67bccd..e4bbe2620c8 100644 --- a/OnlTools/Jevp/level.source +++ b/OnlTools/Jevp/level.source @@ -1,4 +1,7 @@ # STAR LEVEL for EVP code -starver SL23b +starver SL23c #starver SL21b + + +unsetenv DB_SERVER_LOCAL_CONFIG diff --git a/StRoot/RTS/include/rtsLog.h b/StRoot/RTS/include/rtsLog.h index c93e3cd42bb..fb9e310ae6e 100755 --- a/StRoot/RTS/include/rtsLog.h +++ b/StRoot/RTS/include/rtsLog.h @@ -92,25 +92,10 @@ void rtsLogAddJmlFile (char *fname); - - - #ifndef RTS_ENABLE_LOG - #define RTS_ASSERT(expr) assert(expr) #define LOG(SEV,STRING,ARGS...) -#define rtsLogUnix_v(str, ...) -#define rtsLogAddCmd(x) - - -// the following become noops... -#define rtsLogLevel(x) -#define rtsLogAddDest(x,y) -#define rtsLogLevelInt(x) -#define rtsLogOutput(x) - -#else /* RTS_ENABLE_LOG */ - +#endif #ifdef __GNUC__ #define INLINE_HACK extern __inline__ @@ -182,7 +167,7 @@ INLINE_HACK void rtsLogLevel(const char *level) #define sbLOG(args...) #endif - +#ifdef RTS_ENABLE_LOG #define LOG(SEV,STRING,A1,A2,A3,A4,A5) \ do { \ const char *const yada = SEV ; \ @@ -195,15 +180,17 @@ INLINE_HACK void rtsLogLevel(const char *level) logMsg((char *)"" SEV ": " __FILE__ " [line %d]: " STRING "\n",__LINE__,(unsigned int)A1,(unsigned int)A2,(unsigned int)A3,(unsigned int)A4,(unsigned int)A5) ; \ sbLOG((char *)"" SEV ": " __FILE__ " [line %d]: " STRING "\n",__LINE__,(unsigned int)A1,(unsigned int)A2,(unsigned int)A3,(unsigned int)A4,(unsigned int)A5) ; \ } \ - } while(0) \ + } while(0) +#endif // RTS_ENABLE_LOG #define rtsLogOutput(x) #else /* unix */ +#ifdef RTS_ENABLE_LOG #define RTS_ASSERT(expr) LOG(CRIT,"assert(%s) true -- certain death follows",__STRING(expr)) - +#endif extern int rtsLogUnix_v(const char *str, ...) ; extern int rtsLogOutput(int flag) ; @@ -212,6 +199,7 @@ INLINE_HACK void rtsLogLevel(const char *level) extern int rtsLogAddFile(char *fname) ; +#ifdef RTS_ENABLE_LOG #ifdef RTS_LOG_COLORED #define LOG(SEV,STRING,ARGS...) \ @@ -242,16 +230,12 @@ INLINE_HACK void rtsLogLevel(const char *level) } while(0) \ - #endif /* RTS_LOG_COLORED */ - +#endif /* ENABLE LOG */ #endif /* __vxworks */ - -#endif /* RTS_ENABLE_LOG */ - #ifdef __cplusplus } -#endif +#endif /* __cplusplus */ #endif /* _RTS_LOG_H */ diff --git a/StRoot/RTS/src/LOG/rtsLogUnix.c b/StRoot/RTS/src/LOG/rtsLogUnix.c index 6d63e49c7ea..e02f1c8c3e7 100755 --- a/StRoot/RTS/src/LOG/rtsLogUnix.c +++ b/StRoot/RTS/src/LOG/rtsLogUnix.c @@ -30,23 +30,6 @@ volatile int tonkoLogLevel = 2 ; - - - -#ifdef RTS_ENABLE_LOG -#warning "DAQ logging is enabled" -#ifdef RTS_LOG_DEFAULT_NET -#warning "DAQ logging defaults to daqman" -#else -#warning "DAQ logging defaults to STDERR" -#endif /* RTS_LOG_DEFAULT_NET */ -#else -#warning "DAQ logging is disabled" -#endif /* RTS_ENABLE_LOG */ - - -#ifdef RTS_ENABLE_LOG - #ifdef RTS_LOG_DEFAULT_NET static int output_flag = RTS_LOG_NET ; #else @@ -391,11 +374,6 @@ static const char *getCmd(void) #endif } - -#endif - - - #ifdef __cplusplus } #endif diff --git a/mgr/Conscript-standard b/mgr/Conscript-standard index db1f9b9204b..ab1f1a4a7b1 100644 --- a/mgr/Conscript-standard +++ b/mgr/Conscript-standard @@ -197,7 +197,8 @@ if ( $pkg eq "Jevp") { . $main::PATH_SEPARATOR . "#OnlTools/Jevp/StJevpBuilders" . $main::PATH_SEPARATOR . "#OnlTools/Jevp/StJevpViewer" . $main::PATH_SEPARATOR . $CPPPATH; - $CPPFLAGS .= " -DQT_THREAD_SUPPORT -DQT_SHARED -DQT_NO_DEBUG "; + $CPPFLAGS .= " -DQT_THREAD_SUPPORT -DQT_SHARED -DQT_NO_DEBUG -DRTS_ENABLE_LOG "; + } #$CPPFLAGS .= " -DNEW_DAQ_READER -D__NO_STRANGE_MUDST__ "; @@ -1432,7 +1433,7 @@ if ( $#src > -1 ) { } } if ($pkg eq "RTS") { - my $cppflags = "-DRTS_PROJECT_STAR -DTPXREADER -DRTS_LITTLE_ENDIAN"; + my $cppflags = "-DRTS_PROJECT_STAR -DTPXREADER -DRTS_LITTLE_ENDIAN "; my $cpppath = $main::PATH_SEPARATOR . "#StRoot/RTS/include" . $main::PATH_SEPARATOR . "#StRoot/RTS/trg/include" . $main::PATH_SEPARATOR . "#StRoot/RTS/include/TPC" From 87ec6b164be585fdafcf088309ddb1a339135ee5 Mon Sep 17 00:00:00 2001 From: jml985 <44065529+jml985@users.noreply.github.com> Date: Wed, 3 Apr 2024 14:27:09 -0400 Subject: [PATCH 07/45] Eliminate some compile warnings (#672) Commented out lines that have no effect. Original authors desired behavior is unclear --- OnlTools/Jevp/StJevpBuilders/fttBuilder.cxx | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/OnlTools/Jevp/StJevpBuilders/fttBuilder.cxx b/OnlTools/Jevp/StJevpBuilders/fttBuilder.cxx index 53a62bb71a9..c34ced10c03 100644 --- a/OnlTools/Jevp/StJevpBuilders/fttBuilder.cxx +++ b/OnlTools/Jevp/StJevpBuilders/fttBuilder.cxx @@ -439,10 +439,17 @@ void fttBuilder::drawStrip( TH2 * h2, int row, int strip, VMMHardwareMap::Quadra int ix0 = ax->FindBin( x0 + row * rLength ); int ix1 = ax->FindBin( x0 + (row + 1) * rLength - 1 ); + + /* This code does nothing! ---------------------- + Most likely it was intended to adjust the indexes for this specific + region of the detector, but not known if needed; -jml 3/25/24 + if ( VMMHardwareMap::Quadrant::C == q || VMMHardwareMap::Quadrant::D == q ){ int ix0 = ax->FindBin( x0 + (row - 1) * rLength ); int ix1 = ax->FindBin( x0 + (row) * rLength - 1 ); } + */ + const int iy0 = ay->FindBin( y0 + strip * sPitch ); const int iy1 = ay->FindBin( y0 + (strip) * sPitch ); floodFill( h2, ix0, iy0, ix1, iy1 ); From 358a58c0172b51f61d4babe21845973f35c0ee18 Mon Sep 17 00:00:00 2001 From: Gene Van Buren <85305093+genevb@users.noreply.github.com> Date: Wed, 10 Apr 2024 12:25:10 -0400 Subject: [PATCH 08/45] Fix for crashes in tracking (#676) On 2016-11-07, Victor committed some code modifications to address three trouble tickets: 664250f8272bce312682ce03d17f6f5727b9b42b In his commit note, he listed an additional 4th item: "4. Simplified code in refitL()". This particular code change in [`Sti/StiKalmanTrack.cxx::refitL()`](https://github.com/star-bnl/star-sw/blob/2e0982686339b1162c3a98c2b4fac0f28846ce19/StRoot/Sti/StiKalmanTrack.cxx#L1653) did a little more than simplify: it modified the behavior, though I cannot tell if that was intentional from the comment. The new behavior appears to allow the re-fit to continue along a track when invalid track nodes are encountered (the invalid nodes are excluded from the refit, I believe), for whatever reason a node may be considered invalid. Previously, the entire remainder of the track would be ignored once an invalid node was encountered. The modification Victor made introduced a potential way for a job to crash for the case when the first node fails validity checks, but the second node doesn't get checked to the same degree and may have invalid content. This shows up in logs as: ` root4star: .sl73_gcc485/OBJ/StRoot/Sti/StiTrackNodeHelper.cxx:670: int StiTrackNodeHelper::save(): Assertion 'fabs(mPredPars.hz()-mTargetHz)<=1e-10' failed. ` (which is a test of the predicted parameters from the previous node versus the current node) The crash happens for only a tiny fraction of tracks, but a single failure from all the tracks contained in a single DAQ file is enough to crash a production job and lose all of its data. This particularly seems to be more common in pp500 data where there are more invalid nodes due to large TPC distortion corrections (though whether all of them should be invalid is a separate question not to answer here at this time), but I have seen this crash in various other datasets from time to time over recent years too. A very rough estimation is that this might cost us ~2% of all our Run 22 pp500 data. Two candidate fixes to consider: 1. Revert the code to where it was before Victor's "simplification". 2. Apply the same validity checks to any potential first used node on a track, not just the initial node. I have run a track-by-track comparison with each on ~200k tracks, and the impacted tracks are very few in number, at the level of ~10 tracks in solution 1, and 1 track in solution 2 (that one track changing by only a single hit). Given that solution 2 appears to be very close to having no impact other than allowing jobs to run that would otherwise crash, this PR implements that solution. --- StRoot/Sti/StiKalmanTrack.cxx | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/StRoot/Sti/StiKalmanTrack.cxx b/StRoot/Sti/StiKalmanTrack.cxx index 47a29f58213..b1a47c6a98c 100644 --- a/StRoot/Sti/StiKalmanTrack.cxx +++ b/StRoot/Sti/StiKalmanTrack.cxx @@ -1657,7 +1657,8 @@ static int nCall=0;nCall++; StiKTNIterator source; StiKalmanTrackNode *pNode = 0,*targetNode; - int iNode=0, status = 0,isStarted=0; + int iNode=0, status = 0; + bool isStarted=false; sTNH.setDir(1); for (source=rbegin();source!=rend();source++) { iNode++; @@ -1668,15 +1669,15 @@ static int nCall=0;nCall++; if ( targetNode->getChi2()>1000) targetNode->setInvalid(); if (!targetNode->isValid()) continue; } - isStarted++; sTNH.set(pNode,targetNode); status = sTNH.makeFit(0); - if (status) continue; + if (status) {targetNode->setInvalid();continue;} if (!targetNode->isValid()) continue; + isStarted = true; pNode = targetNode; }//end for of nodes - pNode = 0; iNode=0;isStarted=0; + pNode = 0; iNode=0;isStarted=false; sTNH.setDir(0); for (source=begin();source!=end();source++) { iNode++; @@ -1686,11 +1687,11 @@ static int nCall=0;nCall++; if ( targetNode->getChi2()>1000) targetNode->setInvalid(); if (!targetNode->isValid()) continue; } - isStarted++; sTNH.set(pNode,targetNode); status = sTNH.makeFit(1); - if (status) continue; + if (status) {targetNode->setInvalid();continue;} if (!targetNode->isValid()) continue; + isStarted = true; pNode = targetNode; }//end for of nodes return 0; From edeb538a768c24aa9e49c1cb6f12fcda7672dcd7 Mon Sep 17 00:00:00 2001 From: jml985 <44065529+jml985@users.noreply.github.com> Date: Wed, 10 Apr 2024 13:00:41 -0400 Subject: [PATCH 09/45] reader updates (#674) Co-authored-by: Dmitri Smirnov --- StRoot/RTS/src/DAQ_FCS/fcs_data_c.cxx | 2 + StRoot/RTS/src/DAQ_FCS/fcs_data_c.h | 2 + StRoot/RTS/src/DAQ_ITPC/daq_itpc.cxx | 9 +- StRoot/RTS/src/DAQ_ITPC/daq_itpc.h | 1 + StRoot/RTS/src/DAQ_ITPC/itpcFCF.cxx | 12 +- StRoot/RTS/src/DAQ_STGC/stgc_data_c.cxx | 14 ++ StRoot/RTS/src/DAQ_TPC23/itpc23.cxx | 181 ++++++++++++++++------- StRoot/RTS/src/DAQ_TPC23/tpc23_base.cxx | 3 +- StRoot/RTS/src/DAQ_TPC23/tpc23_base.h | 5 +- StRoot/RTS/src/DAQ_TPC23/tpx23.cxx | 126 +++++++++++++--- StRoot/RTS/src/DAQ_TPX/Makefile | 2 + StRoot/RTS/src/DAQ_TPX/daq_tpx.cxx | 4 + StRoot/RTS/src/DAQ_TPX/daq_tpx.h | 4 + StRoot/RTS/src/RTS_EXAMPLE/rts_example.C | 8 +- 14 files changed, 284 insertions(+), 89 deletions(-) diff --git a/StRoot/RTS/src/DAQ_FCS/fcs_data_c.cxx b/StRoot/RTS/src/DAQ_FCS/fcs_data_c.cxx index 6ce48b1ee93..3b4f6b45365 100644 --- a/StRoot/RTS/src/DAQ_FCS/fcs_data_c.cxx +++ b/StRoot/RTS/src/DAQ_FCS/fcs_data_c.cxx @@ -39,6 +39,7 @@ u_int fcs_data_c::run_type ; // for ZS float fcs_data_c::n_sigma ; +float fcs_data_c::n_sigma_hcal ; float fcs_data_c::n_sigma_epd ; short fcs_data_c::n_pre ; short fcs_data_c::n_post ; @@ -267,6 +268,7 @@ int fcs_data_c::zs_start(u_short *buff) float sigma ; if(hdr_det==2) sigma = n_sigma_epd ; + else if(hdr_det==1) sigma = n_sigma_hcal ; else sigma = n_sigma ; // trigger channels are special so figure this out diff --git a/StRoot/RTS/src/DAQ_FCS/fcs_data_c.h b/StRoot/RTS/src/DAQ_FCS/fcs_data_c.h index a48833c8fc1..5c80194279b 100644 --- a/StRoot/RTS/src/DAQ_FCS/fcs_data_c.h +++ b/StRoot/RTS/src/DAQ_FCS/fcs_data_c.h @@ -36,6 +36,7 @@ class fcs_data_c { run_number = 0 ; n_sigma = 4.0 ; + n_sigma_hcal = 4.0 ; n_sigma_epd = 4.0 ; n_pre = 8 ; n_post = 8 ; @@ -235,6 +236,7 @@ class fcs_data_c { // for ZS static float n_sigma ; static float n_sigma_epd ; + static float n_sigma_hcal ; static short n_pre ; static short n_post ; static short n_cou ; diff --git a/StRoot/RTS/src/DAQ_ITPC/daq_itpc.cxx b/StRoot/RTS/src/DAQ_ITPC/daq_itpc.cxx index 53ac60448bb..54633601947 100644 --- a/StRoot/RTS/src/DAQ_ITPC/daq_itpc.cxx +++ b/StRoot/RTS/src/DAQ_ITPC/daq_itpc.cxx @@ -76,10 +76,8 @@ daq_itpc::daq_itpc(daqReader *rts_caller) it23 = 0 ; // assume we won't use it online = 0 ; + mode = 0 ; -// it23 = new itpc23 ; -// it23->no_cld = 1 ; -// it23->log_level = 2 ; memset(fcf,0,sizeof(fcf)) ; fcf_det_type = 1 ; // ITPC @@ -535,6 +533,7 @@ daq_dta *daq_itpc::handle_sampa(int sec, int rdo, int in_adc) it23->run_type = 3 ; // NO CLUSTER FINDER PLEASE it23->no_cld = 1 ; it23->log_level = 0 ; + it23->mode = mode ; } it23->data_c = &sampa_c ; @@ -559,6 +558,10 @@ daq_dta *daq_itpc::handle_sampa(int sec, int rdo, int in_adc) //LOG(WARN,"S%02d:%d: rdo_fmt %d -- scan will fail",s,r,rdo_fmt) ; it23->set_rdo(s,r) ; ret = it23->rdo_scan((char *)dta,words) ; + + if((it23->err || ret) && mode) { + LOG(ERR,"S%02d:%d: rdo_scan 0x%X, err 0x%X, words %d",s,r,ret,it23->err,words) ; + } } else { ret = it->rdo_scan_top(dta,words) ; diff --git a/StRoot/RTS/src/DAQ_ITPC/daq_itpc.h b/StRoot/RTS/src/DAQ_ITPC/daq_itpc.h index 5175a3a1907..7e79d096337 100644 --- a/StRoot/RTS/src/DAQ_ITPC/daq_itpc.h +++ b/StRoot/RTS/src/DAQ_ITPC/daq_itpc.h @@ -74,6 +74,7 @@ class daq_itpc : public daq_det { static int no_sw16 ; int online ; + int mode ; int rdo_fmt ; } ; diff --git a/StRoot/RTS/src/DAQ_ITPC/itpcFCF.cxx b/StRoot/RTS/src/DAQ_ITPC/itpcFCF.cxx index 3816e7e305f..8dde24ef71f 100644 --- a/StRoot/RTS/src/DAQ_ITPC/itpcFCF.cxx +++ b/StRoot/RTS/src/DAQ_ITPC/itpcFCF.cxx @@ -1250,7 +1250,7 @@ int itpc_fcf_c::do_blobs_stage2(int row) int b_ix = blob_ix[ix] ; - LOG(TERR," using bix %d %d",ix,b_ix) ; + //LOG(TERR," using bix %d %d",ix,b_ix) ; if(b_ix != ix) { LOG(WARN,"Can't be: %d %d, RP %d:%d",b_ix,ix,row,p) ; } @@ -1347,7 +1347,7 @@ int itpc_fcf_c::do_blobs_stage2(int row) -#if 1 +#if 0 LOG(TERR,"Blobs OK %d/%d in row %d",blob_ok,blob_cou,row) ; for(int i=0;i>29 ; +#if 0 + if(rdo1==2) { + switch(feb_id) { + case 1 : + case 3 : + case 5 : + LOG(WARN,"%d: FEB %d\n",rdo1,feb_id) ; + break ; + } + } +#endif + datum_ix++ ; @@ -732,6 +744,8 @@ int stgc_data_c::event() } else { +// printf("%d: ROD %d, FEB %d\n",rdo1,rod_id,feb_id) ; + vmm.feb_vmm = ((feb_id-1)<<2)|(vmm_id-4) ; vmm.ch = channel ; vmm.adc = pdo ; diff --git a/StRoot/RTS/src/DAQ_TPC23/itpc23.cxx b/StRoot/RTS/src/DAQ_TPC23/itpc23.cxx index 66ebfc5e071..11920eac5ee 100644 --- a/StRoot/RTS/src/DAQ_TPC23/itpc23.cxx +++ b/StRoot/RTS/src/DAQ_TPC23/itpc23.cxx @@ -94,7 +94,9 @@ int itpc23::from22to23(char *c_dta, int words) if((data[0]&0xFFFF000F) != 0x98000004) { run_errors++ ; - if(run_errors<5 && online) LOG(ERR,"start 0 0x98 = 0x%08X",data[0]) ; + if(mode || (online && run_errors<10)) { + LOG(ERR,"start 0 0x98 = 0x%08X",data[0]) ; + } err |= 0x10000000 ; } @@ -141,7 +143,7 @@ int itpc23::from22to23(char *c_dta, int words) if(!found) { run_errors++ ; err |= 0x20000000 ; - if(run_errors<5) LOG(ERR,"%d: can't find data_end!",rdo1) ; + if(mode || (online && run_errors<10)) LOG(ERR,"%d: can't find data_end!",rdo1) ; } #endif @@ -162,7 +164,9 @@ int itpc23::from22to23(char *c_dta, int words) if(!found) { run_errors++ ; err |= 0x20000000 ; - if(run_errors<5) LOG(ERR,"%d: data_end 0x98 not found = 0x%08X",rdo1,data_end[0]) ; + if(mode || (online && (run_errors<10))) { + LOG(ERR,"%d: data_end 0x98 not found = 0x%08X",rdo1,data_end[0]) ; + } } n_words = data_end - data ; @@ -198,7 +202,7 @@ int itpc23::from22to23(char *c_dta, int words) if(l_fee_mask != fee_mask) { err |= 0x40000000 ; run_errors++ ; - if(run_errors<5) LOG(ERR,"%d: FEE mask 0x%X, expect 0x%X, words %d/%d",rdo1,l_fee_mask,fee_mask,words,n_words) ; + if(online && run_errors<10) LOG(ERR,"%d: FEE mask 0x%X, expect 0x%X, words %d/%d",rdo1,l_fee_mask,fee_mask,words,n_words) ; free(d_use) ; return 0 ; } @@ -254,7 +258,7 @@ int itpc23::from22to23(char *c_dta, int words) if(ix>(n_words)) { run_errors++ ; err |= 0x80000000 ; - if(run_errors<5) LOG(ERR,"%d: words %d, ix %d",rdo1,n_words,ix) ; + if(mode || (online && run_errors<10)) LOG(ERR,"%d: words %d, ix %d",rdo1,n_words,ix) ; free(d_use) ; return 0 ; } @@ -268,7 +272,7 @@ int itpc23::from22to23(char *c_dta, int words) if(ix>(n_words)) { run_errors++ ; - if(run_errors<5) LOG(ERR,"%d: words %d, ix %d",rdo1,n_words,ix) ; + if(mode || (online && run_errors<10)) LOG(ERR,"%d: words %d, ix %d",rdo1,n_words,ix) ; err |= 0x80000000 ; free(d_use) ; return 0 ; @@ -277,7 +281,7 @@ int itpc23::from22to23(char *c_dta, int words) if(n_words<12) { run_errors++ ; - if(run_errors<5) LOG(ERR,"%d: n_words %d",rdo1,n_words) ; + if(mode || (online && run_errors<10)) LOG(ERR,"%d: n_words %d",rdo1,n_words) ; err |= 0x80000000 ; free(d_use) ; return 0 ; @@ -329,14 +333,17 @@ int itpc23::init(daq_dta *gain) return 9 ; } - +// We are at the SAMPA(fee_ix):channel header u_int *itpc23::ch_scan(u_int *start) { u_short w[6] ; u_int *d = start ; int row, pad ; + int is_error = 0 ; // we are at the SAMPA header + retry_fix:; + w[0] = (d[0]>>20)&0x3FF ; w[1] = (d[0]>>10)&0x3FF ; w[2] = (d[0]>>00)&0x3FF ; @@ -356,7 +363,7 @@ u_int *itpc23::ch_scan(u_int *start) if(unlikely(words10==1023)) { // channel skipped because of prog-full! prog_fulls++ ; - if(online) LOG(ERR,"%d: ch_scan %d:%d: SAMPA%d:%d -- prog-full",rdo1,fee_ix,ch_ix,sampa_id,sampa_ch) ; + if(mode || (online && run_errors<10)) LOG(ERR,"%d: ch_scan %d:%d: SAMPA%d:%d -- prog-full",rdo1,fee_ix,ch_ix,sampa_id,sampa_ch) ; words10 = 0 ; } @@ -364,10 +371,39 @@ u_int *itpc23::ch_scan(u_int *start) if(unlikely(pkt!=4 || sampa_ch>31 || words10>512)) { err |= 0x1000000 ; - fee_errs++ ; - if(fee_errs<10) LOG(ERR,"%d: ch_scan %d:%d: pkt %d, sampa_ch %2d, words10 %d [0x%08X]",rdo1,fee_ix,ch_ix, - pkt,sampa_ch,words10, - d[0]) ; + is_error = 1 ; + run_errors++ ; + if(mode || (online && run_errors<20)) { + LOG(ERR,"%d: ch_scan %d:%d:%d: pkt %d, sampa %d:%d, words10 %d [0x%08X: 0x%08X 0x%08X], err 0x%X",rdo1,fee_ix,lane_ix, + ch_ix, + pkt,sampa_id,sampa_ch,words10, + d[0],d[-1],d[1],err) ; + +// LOG(ERR,"err 0x%08X",err) ; + + //int ppk[2] ; + + //ppk[0] = (((d[-1]>>20)&0x3FF)>>7)&0x7 ; + //ppk[1] = (((d[1]>>20)&0x3FF)>>7)&0x7 ; + + //LOG(ERR,"%d %d",ppk[0],ppk[1]) ; + //d++ ; + //goto retry_fix ; + + } + if(d>9)&1) ; @@ -377,9 +413,13 @@ u_int *itpc23::ch_scan(u_int *start) } else { if(unlikely(bx != bx_count)) { - err |= 0x2000000 ; - fee_errs++ ; - if(fee_errs<10) LOG(ERR,"%d: ch_scan %d:%d: bx %d, expect %d",rdo1,fee_ix,ch_ix,bx,bx_count) ; + if(abs(bx-bx_count)>1) { + err |= 0x2000000 ; + run_errors++ ; + if(mode || (online && run_errors<10)) { + LOG(ERR,"%d: ch_scan %d:%d: bx %d, expect %d",rdo1,fee_ix,ch_ix,bx,bx_count) ; + } + } } } @@ -440,9 +480,11 @@ u_int *itpc23::ch_scan(u_int *start) // tb_cou, tb_start, adc, adc, adc x tb_cou times // from low tb_start to high if(unlikely(d[i]&0xC0000000)) { - fee_errs++ ; - if(fee_errs<10) LOG(ERR,"%d: ch_scan %d:%d: SAMPA %d:%d: bad word 0x%08X",rdo1,fee_ix,ch_ix, - sampa_id,sampa_ch,d[i]) ; + run_errors++ ; + if(mode || (online && run_errors<10)) { + LOG(ERR,"%d: ch_scan %d:%d: SAMPA %d:%d: bad word 0x%08X",rdo1,fee_ix,ch_ix, + sampa_id,sampa_ch,d[i]) ; + } } if(log_level>=2) LOG(TERR,"FEE %d:%d -- %d = 0x%08X",fee_ix,ch_ix,i,d[i]) ; @@ -462,8 +504,10 @@ u_int *itpc23::ch_scan(u_int *start) if(log_level>=100) LOG(TERR," tb_cou %d",tb_cou) ; if(unlikely(tb_cou>500)) { - fee_errs++ ; - if(fee_errs<10) LOG(ERR,"%d: rp %d:%d: tb_cou %d [0x%08X,%d]",rdo1,row,pad,tb_cou,d[i],i) ; + run_errors++ ; + if(mode || (online && run_errors<10)) { + LOG(ERR,"%d: rp %d:%d: tb_cou %d [0x%08X,%d]",rdo1,row,pad,tb_cou,d[i],i) ; + } } ix = 1 ; break ; @@ -472,7 +516,7 @@ u_int *itpc23::ch_scan(u_int *start) *dd++ = tb_start ; if(seq_ix>=(SEQ_MAX-1)) { - if(online) LOG(ERR,"too many seqs %d",seq_ix) ; + if(mode || online) LOG(ERR,"too many seqs %d",seq_ix) ; goto done_ch ; } @@ -492,16 +536,16 @@ u_int *itpc23::ch_scan(u_int *start) if(unlikely(log_level>=100)) LOG(TERR," tb_start %d",tb_start) ; if(unlikely(tb_start<=tb_last)) { - fee_errs++ ; - if(fee_errs<10) LOG(ERR,"%d: rp %d:%d: tb_start %d, tb_last %d",rdo1,row,pad,tb_start,tb_last) ; + run_errors++ ; + if(mode || (online && run_errors<10))LOG(ERR,"%d: rp %d:%d: tb_start %d, tb_last %d",rdo1,row,pad,tb_start,tb_last) ; } tb_last = tb_start + tb_cou ; if(unlikely(tb_last>500)) { - fee_errs++ ; - if(fee_errs<10) LOG(ERR,"%d: rp %d:%d: tb_last %d [0x%08X,%d]",rdo1,row,pad,tb_last,d[i],i) ; + run_errors++ ; + if(mode || (online && run_errors<10)) LOG(ERR,"%d: rp %d:%d: tb_last %d [0x%08X,%d]",rdo1,row,pad,tb_last,d[i],i) ; } @@ -619,16 +663,31 @@ u_int *itpc23::lane_scan(u_int *start) { u_int *d = start ; + retry_fix:; + if(log_level>=1) LOG(TERR,"%d: lane scan %d: 0x%08X",rdo1,lane_ix,d[0]) ; // should be at start of lane 0xB.... if((d[0]&0xF0000000)!=0xB0000000) { // start of lane - err |= 0x100000 ; - if(online) LOG(ERR,"%d: lane_scan %d:%d: unknown start 0x%08X",rdo1,fee_ix,lane_ix,d[0]) ; + if((online && run_errors<10) || mode) { + LOG(ERR,"%d: lane_scan %d:%d: unknown start 0x%08X [0x%08X 0x%08X]",rdo1,fee_ix,lane_ix,d[0],d[-1],d[1]) ; + } + + if(d[0]==d[-1]) { + if(mode || (online && run_errors<10)) { + LOG(WARN,"%d: lane_scan %d:%d: retrying fix",rdo1,fee_ix,lane_ix) ; + } + d++ ; + goto retry_fix ; + } + else { + err |= 0x100000 ; + } + } else if((d[0]>>26)&0x3) { // SAMPA FIFOs overwritten! err |= 0x200000 ; - if(online) LOG(ERR,"%d: lane_scan %d:%d: SAMPA FIFO overwritten 0x%08X",rdo1,fee_ix,lane_ix,d[0]) ; + if(online || mode) LOG(ERR,"%d: lane_scan %d:%d: SAMPA FIFO overwritten 0x%08X",rdo1,fee_ix,lane_ix,d[0]) ; } d++ ; // skip 0xB.... @@ -642,8 +701,9 @@ u_int *itpc23::lane_scan(u_int *start) // should be at end of lane 0x7.... if((d[0]&0xF0000000)!=0x70000000) { // end of lane - err |= 0x400000 ; - if(online) LOG(ERR,"%d: lane_scan %d:%d: unknown end 0x%08X",rdo1,fee_ix,lane_ix,d[0]) ; + err |= 0x400000 ; + run_errors++ ; + if((online && run_errors<20)|| mode) LOG(ERR,"%d: lane_scan %d:%d: unknown end 0x%08X",rdo1,fee_ix,lane_ix,d[0]) ; } d++ ; // skip 0x7... @@ -658,7 +718,7 @@ u_int *itpc23::fee_non_trgd(u_int *start) int fee_words = 0 ; if(fee_evt_type != 0x02) { // no clue - if(online) LOG(ERR,"%d: fee_non_trgd %d: evt_type 0x%02X",rdo1,fee_ix,fee_evt_type) ; + if(online || mode) LOG(ERR,"%d: fee_non_trgd %d: evt_type 0x%02X",rdo1,fee_ix,fee_evt_type) ; while(d=1) LOG(TERR,"%d: T %d(%d,%d)",rdo1,token,trg_cmd,daq_cmd) ; if(log_level>=10) { - for(int i=0;i<8;i++) { - LOG(TERR,"rdo_scan %d/%d = 0x%08X",i,words,d[i]) ; - } + for(int i=0;i<8;i++) { + LOG(TERR,"rdo_scan %d/%d = 0x%08X",i,words,d[i]) ; + } } u_int mhz_start = d[3] ; @@ -893,7 +959,6 @@ int itpc23::rdo_scan(char *c_addr, int iwords) u_int fee_xoff = d[5]>>16 ; // actually prog_full u_int rdo_stuff = d[5]&0xFFFF ; u_int fee_empty = d[6]&0xFFFF ; -// u_int sig = d[7] ; l_fee_mask = 0 ; @@ -923,13 +988,17 @@ int itpc23::rdo_scan(char *c_addr, int iwords) // fee_mask,fee_synced,fee_overrun,fee_xoff,rdo_stuff,fee_empty,sig) ; if((fee_synced&fee_mask)!=fee_mask) { - if(online) LOG(ERR,"%d: evt %d: fee sync error 0x%04X, expect 0x%04X",rdo1,evt,fee_synced,fee_mask) ; + if(mode || (online)) LOG(ERR,"%d: evt %d: fee sync error 0x%04X, expect 0x%04X",rdo1,evt,fee_synced,fee_mask) ; // STOP: auto-recovery err |= 0x10 ; } if(fee_overrun&fee_mask) { - if(online) LOG(ERR,"%d: %d: RDOs fee FIFO overrun 0x%04X",rdo1,evt,fee_overrun&fee_mask) ; + if(mode || online) { + LOG(ERR,"%d: %d: RDOs fee FIFO overrun 0x%04X: words %d: 0x%04X 0x%04X 0x%04X 0x%04X", + rdo1,evt,fee_overrun&fee_mask,words, + fee_mask,l_fee_mask,fee_xoff,fee_empty) ; + } // STOP: auto-recovery err |= 0x10 ; } @@ -965,10 +1034,14 @@ int itpc23::rdo_scan(char *c_addr, int iwords) } if(got_it != 3) { - if(online) LOG(ERR,"%d: %d: no trailer (0x%08X), %d",rdo1,evt,trl[0],got_it) ; + if(mode || online) { + LOG(ERR,"%d: evt %d: no trailer (0x%08X), %d, words %d",rdo1,evt,trl[0],got_it,words) ; +// LOG(ERR," 0x%X 0x%X 0x%X",trl[1],trl[2],trl[3]) ; + } // STOP: auto-recovery err |= 0x2 ; -// for(int i=0;i>28)!=0xF)||((*d&0xFFFF)!=fee_mask)) { - if(online) LOG(ERR,"%d: evt %d: Bad FEE_START 0x%08X, expect 0x%08X",rdo1,evt,*d,0xF0000000|fee_mask) ; + if(mode || (online && run_errors<10)) LOG(ERR,"%d: evt %d: Bad FEE_START 0x%08X, expect 0x%08X",rdo1,evt,*d,0xF0000000|fee_mask) ; err |= 0x20 ; goto done ; } @@ -1089,7 +1162,7 @@ int itpc23::rdo_scan(char *c_addr, int iwords) if(err||prog_fulls) { - if(online) LOG(ERR,"%d: evt %d/%d: T %d,%d,%d: error 0x%08X, prog_fulls %d: words %d, %d us",rdo1,evt_trgd,evt, + if(online || mode) LOG(ERR,"%d: evt %d/%d: T %d,%d,%d: error 0x%08X, prog_fulls %d: words %d, %d us",rdo1,evt_trgd,evt, token,trg_cmd,daq_cmd, err, prog_fulls, @@ -1296,8 +1369,6 @@ itpc23::itpc23() data_c = 0 ; - fee_errs = 0 ; // just in case - fmt = 0 ; } diff --git a/StRoot/RTS/src/DAQ_TPC23/tpc23_base.cxx b/StRoot/RTS/src/DAQ_TPC23/tpc23_base.cxx index 2e857ee015a..cb3f90594d1 100644 --- a/StRoot/RTS/src/DAQ_TPC23/tpc23_base.cxx +++ b/StRoot/RTS/src/DAQ_TPC23/tpc23_base.cxx @@ -1353,7 +1353,7 @@ int tpc23_base::run_start() evt_trgd = 0 ; run_errors = 0 ; - fee_errs = 0 ; +// fee_errs = 0 ; return 0 ; @@ -1384,6 +1384,7 @@ tpc23_base::tpc23_base() s2_words = 0 ; no_cld = 0 ; + mode = 0 ; // rp_gain_tpx = 0 ; // rp_gain_itpc = 0 ; diff --git a/StRoot/RTS/src/DAQ_TPC23/tpc23_base.h b/StRoot/RTS/src/DAQ_TPC23/tpc23_base.h index 61862750698..0959eefa492 100644 --- a/StRoot/RTS/src/DAQ_TPC23/tpc23_base.h +++ b/StRoot/RTS/src/DAQ_TPC23/tpc23_base.h @@ -25,7 +25,7 @@ class tpc23_base { virtual int rdo_scan(char *mem, int words) ; virtual int from22to23(char *dta, int words) ; // rewrite the old FY22 raw data foramt to FY23 - int fee_errs ; +// int fee_errs ; u_char rts_id ; // tpx, itpc u_char fmt ; // 22: old data format, 23: FY23 data format @@ -49,6 +49,9 @@ class tpc23_base { u_char no_cld ; + + u_char mode ; // for various debugging steering + u_int last_ix ; int sequence_cou ; diff --git a/StRoot/RTS/src/DAQ_TPC23/tpx23.cxx b/StRoot/RTS/src/DAQ_TPC23/tpx23.cxx index 61c46c559b4..d46919a79fa 100644 --- a/StRoot/RTS/src/DAQ_TPC23/tpx23.cxx +++ b/StRoot/RTS/src/DAQ_TPC23/tpx23.cxx @@ -58,10 +58,11 @@ int tpx23::fee_scan() { u_int *h ; err = 0 ; // in class + int id_pre = -1 ; + int ch_pre = -1 ; + int s_cou ; + char retry ; -// u_char altro_present[256][16] ; - - get_token((char *)d_start,words) ; TLOG() ; @@ -85,16 +86,12 @@ int tpx23::fee_scan() // last valid FEE word is at d_end h = d_end ; - -// memset(altro_present,0,sizeof(altro_present)) ; - if(hdr_version) { - - - } - TLOGX(rdo1) ; - if(log_level>0) LOG(TERR,"%d: fee_scan",rdo1) ; + if(log_level>0) LOG(TERR,"%d: fee_scan",rdo1) ; + + u_int *h_to_continue ; + retry = 0 ; // NOTE: ALTRO scans from the end!!! while(h>(d_start+2)) { @@ -108,13 +105,85 @@ int tpx23::fee_scan() hi &= 0xFFFFF ; int wc = ((hi&0x3F)<<4)|((lo&0xF0000)>>16) ; // altro's word count - if(wc==0) continue ; + int id = (lo&0xFF0) >> 4 ; // altro id int ch = lo & 0xF ; + // sanity checks: 0xAAA & 0xA + u_int aaa = hi>>6 ; + u_int a = (lo>>12)&0xF ; + + + if((aaa!= 0x2AAA)||(a!=0xA)||(wc>437)) { + run_errors++ ; + if(run_errors<20) { + if((online || mode) && retry==0) { + LOG(ERR,"S%02d:%d: aid %d:%d, %d:%d: aaa 0x%X, a 0x%X, wc %d, %d", + sector1,rdo1,id,ch,id_pre,ch_pre,aaa,a,wc,d_end-h) ; + } + } + if(1) { + h++ ; + //LOG(ERR,"Retry aaa") ; + retry = 1 ; + continue ; + } + } + + if(wc==0) { + id_pre = id ; + ch_pre = ch ; + continue ; + } + + TLOGX(id) ; + +// if(mode & 3) { // debugging! + u_int aa = ((h[1]&0xFFFFF)>>10) ; + + //LOG(TERR,"aid %d:%d: 0x%X 0x%X",id,ch,h[0]&0xFFFFF,h[1]&0xFFFFF) ; + + if(aa != 0x2AA) { + run_errors++ ; + if(run_errors<20) { + if((online || mode) && retry==0) { + LOG(ERR,"S%02d:%d: aid %d:%d, %d:%d: aaa 0x%X, a 0x%X, aa 0x%X, wc %d", + sector1,rdo1,id,ch,id_pre,ch_pre,aaa,a,aa,wc) ; + } + } + + if(1) { + h++ ; + //LOG(ERR,"Retry aa") ; + retry = 1 ; + continue ; + } + } + else { + //LOG(WARN,"S%02d:%d: aid %d:%d, %d:%d: aaa 0x%X, a 0x%X, aa 0x%X, wc %d", + // sector1,rdo1,id,ch,id_pre,ch_pre,aaa,a,aa,wc) ; + + + } + +// } + + if(retry) { + if(online || mode) { + if(run_errors<20) { + LOG(WARN,"S%02d:%d: aid %d:%d, %d:%d: aaa 0x%X, a 0x%X, wc %d, %d -- OK", + sector1,rdo1,id,ch,id_pre,ch_pre,aaa,a,wc,d_end-h) ; + } + } + } + + retry = 0 ; + + h_to_continue = h ; // h+1 + for(int i=0;i437) { // garbage in the event... and now what??? run_errors++ ; if(run_errors<10) { - if(online) LOG(ERR,"S%02d:%d: rp %d:%d (aid %d:%d) : wc %d",sector1,rdo1,row,pad,id,ch,wc) ; + if(online) LOG(ERR,"S%02d:%d: rp %d:%d (aid %d:%d, %d:%d) : wc %d",sector1,rdo1,row,pad, + id,ch,id_pre,ch_pre, wc) ; } //err |= 0x10000 ; // signal an error because I am breaking out break ; } +#endif while(wc%4) wc++ ; @@ -260,12 +332,19 @@ int tpx23::fee_scan() if(t_len>440 || t_hi>440 || t_lo>440) { run_errors++ ; if(run_errors<20) { - if(online) LOG(ERR,"S%02d:%d: rp %d:%d (aid %d:%d), t_len %d, t_lo %d, t_hi %d",sector1,rdo1,row,pad, - id,ch, - t_len,t_lo,t_hi) ; + if(online||mode) LOG(ERR,"S%02d:%d: rp %d:%d (aid %d:%d, %d:%d), t_len %d, t_lo %d, t_hi %d; wc %d, ix %d, seq %d, %d", + sector1,rdo1,row,pad, + id,ch,id_pre,ch_pre, + t_len,t_lo,t_hi,wc,ix,seq_ix,d_end-h) ; } - if(t_len>510 || t_hi>510 || t_lo>510) { + if(t_len>440 || t_hi>440 || t_lo>440) { //err |= 0x20000 ; + if(1) { + //LOG(ERR,"Retry rp") ; + h = h_to_continue ; + retry = 1 ; + goto end_loop ; + } break ; } @@ -365,7 +444,7 @@ int tpx23::fee_scan() //LOG(TERR,"Here 2") ; - int s_cou = 0 ; + s_cou = 0 ; dd = d ; seq = s1[row][pad].seq ; @@ -417,8 +496,10 @@ int tpx23::fee_scan() } #endif - + id_pre = id ; + ch_pre = ch ; + end_loop:; } @@ -797,7 +878,7 @@ int tpx23::log_dump(char *c_addr, int wds) if(strstr(tmpbuff+st,"FEE power BAD")) { //err_status |= DET_ERR_OPER_PS ; - LOG(ERR,"---> [S%d:%d LOG] FEE power BAD -- powercycle (ignored)",s_real,r_real) ; + //LOG(ERR,"---> [S%d:%d LOG] FEE power BAD -- powercycle (ignored)",s_real,r_real) ; //err = -1 ; } } @@ -843,6 +924,7 @@ int tpx23::log_dump(char *c_addr, int wds) if(strstr(tmpbuff+st,"altro error")) { err = -1 ; + err_status |= 3 ; LOG(ERR,"---> [%d LOG] altro error -- restart run",rdo) ; } @@ -852,7 +934,9 @@ int tpx23::log_dump(char *c_addr, int wds) //LOG(WARN,"---> [%d LOG] ERR ALTRO -- CHECK THIS",rdo) ; } - + if(strstr(tmpbuff+st,"ERR: expired")) { + err = -1 ; + } if(err<0) { diff --git a/StRoot/RTS/src/DAQ_TPX/Makefile b/StRoot/RTS/src/DAQ_TPX/Makefile index 47ee919ace2..e77d0c8c11c 100644 --- a/StRoot/RTS/src/DAQ_TPX/Makefile +++ b/StRoot/RTS/src/DAQ_TPX/Makefile @@ -69,6 +69,8 @@ daq_tpx.o: tpxFCF_flags.h daq_tpx.o: tpxFCF_2D.h daq_tpx.o: ../DAQ_TPX/tpxFCF.h daq_tpx.o: tpxStat.h +daq_tpx.o: ../DAQ_TPC23/tpx23.h +daq_tpx.o: ../DAQ_TPC23/tpc23_base.h tpxCore.o: ../../../../StRoot/RTS/include/rtsLog.h tpxCore.o: ../../../../StRoot/RTS/include/TPX/tpx_altro_to_pad.h tpxCore.o: ../../../../StRoot/RTS/include/DAQ1000/ddl_struct.h diff --git a/StRoot/RTS/src/DAQ_TPX/daq_tpx.cxx b/StRoot/RTS/src/DAQ_TPX/daq_tpx.cxx index 77028f52d96..eaf2cf34655 100644 --- a/StRoot/RTS/src/DAQ_TPX/daq_tpx.cxx +++ b/StRoot/RTS/src/DAQ_TPX/daq_tpx.cxx @@ -89,6 +89,8 @@ daq_tpx::daq_tpx(daqReader *rts_caller) sfs_name = "tpx" ; caller = rts_caller ; + mode = 0 ; + if(caller) caller->insert(this, rts_id) ; // create now! @@ -973,6 +975,8 @@ daq_dta *daq_tpx::handle_adc(int sec, int rdo) t23->no_cld = 1 ; t23->log_level = 0 ; + t23->mode = mode ; + t23->data_c = 0 ; // &altro_c ; t23->tpx_d = 0 ; } diff --git a/StRoot/RTS/src/DAQ_TPX/daq_tpx.h b/StRoot/RTS/src/DAQ_TPX/daq_tpx.h index c0376570886..ad596ac44ca 100644 --- a/StRoot/RTS/src/DAQ_TPX/daq_tpx.h +++ b/StRoot/RTS/src/DAQ_TPX/daq_tpx.h @@ -79,6 +79,8 @@ class daq_tpx : public daq_det { tpx23 *t23 ; + + protected: public: @@ -91,6 +93,8 @@ class daq_tpx : public daq_det { char fcf_run_compatibility ; char fcf_do_cuts ; + u_char mode ; + // for use by simulation int sim_row_count ; unsigned char *sim_tpx_rowlen ; diff --git a/StRoot/RTS/src/RTS_EXAMPLE/rts_example.C b/StRoot/RTS/src/RTS_EXAMPLE/rts_example.C index 5c5572597ac..6b60b037afc 100644 --- a/StRoot/RTS/src/RTS_EXAMPLE/rts_example.C +++ b/StRoot/RTS/src/RTS_EXAMPLE/rts_example.C @@ -1874,10 +1874,14 @@ static int tinfo_doer(daqReader *rdr, const char *do_print) bx64 = (bx64 << 32) + bx_low; float bx_sec = bx64/9.3e6; int bx7 = bx64 % 120; - + + int addBits = swap16(evtDesc->addBits); + int trg_tkn = swap16(evtDesc->TrgToken) ; - printf("tinfo: token %d, pre %d, post %d\n",trg_tkn,pre,post) ; + if(addBits != 0) { + printf("tinfo: token %d, pre %d, post %d, 0x%016llx 0x%04x\n",trg_tkn,pre,post, rdr->daqbits64, addBits) ; + } int crate_sz[MAX_CONF_NUM]; int crate_internal_usec[MAX_CONF_NUM]; From 46e0ac71370317682c9d689f826810668580a39c Mon Sep 17 00:00:00 2001 From: dkapukchyan Date: Wed, 10 Apr 2024 10:24:37 -0700 Subject: [PATCH 10/45] Small fix for StFcsDb and StFcsWaveformFitMaker (#664) Got rid of unneeded cout statement in StFcsDb.cxx. Fixed StFcsWaveformFitMaker to not overwrite data in StFcsHit object when mAnaWaveform is false. --- StRoot/StFcsDbMaker/StFcsDb.cxx | 1 - StRoot/StFcsWaveformFitMaker/StFcsWaveformFitMaker.cxx | 8 ++++---- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/StRoot/StFcsDbMaker/StFcsDb.cxx b/StRoot/StFcsDbMaker/StFcsDb.cxx index e6e1feec7e3..bea6dc30797 100644 --- a/StRoot/StFcsDbMaker/StFcsDb.cxx +++ b/StRoot/StFcsDbMaker/StFcsDb.cxx @@ -756,7 +756,6 @@ StThreeVectorD StFcsDb::projectTrack(int det, const g2t_track_st* g2ttrk, const double linedir[3] = {g2ttrk->p[0],g2ttrk->p[1],g2ttrk->p[2]}; if( g2tvert!=0 ){ int vertind = g2ttrk->start_vertex_p - 1; //To correct for offset by one between fortran array and c array. 0 start index means it was generated at the starting vertex - std::cout << "+++++ DEBUG: vertind = " << vertind << " +++++" << std::endl; double linestart[3] = {g2tvert[vertind].ge_x[0],g2tvert[vertind].ge_x[1],g2tvert[vertind].ge_x[2]}; if( vertind >= 0 ){//Since start index==0 means no start then vertind<0 will default to using origin return projectLine(det, linedir, linestart, showermaxz); diff --git a/StRoot/StFcsWaveformFitMaker/StFcsWaveformFitMaker.cxx b/StRoot/StFcsWaveformFitMaker/StFcsWaveformFitMaker.cxx index d2e01307dd0..e7b3375110c 100644 --- a/StRoot/StFcsWaveformFitMaker/StFcsWaveformFitMaker.cxx +++ b/StRoot/StFcsWaveformFitMaker/StFcsWaveformFitMaker.cxx @@ -501,11 +501,11 @@ int StFcsWaveformFitMaker::Make() { if( mAnaWaveform ){ integral = analyzeWaveform(mEnergySelect[ehp],hits[i],res,func,res[6]); hits[i]->setAdcSum(integral); + hits[i]->setFitPeak(res[2]); + hits[i]->setFitSigma(res[3]); + hits[i]->setFitChi2(res[4]); + hits[i]->setNPeak(res[5]); } - hits[i]->setFitPeak(res[2]); - hits[i]->setFitSigma(res[3]); - hits[i]->setFitChi2(res[4]); - hits[i]->setNPeak(res[5]); //apply gain and update energy float gain = mDb->getGain(hits[i]); float gaincorr = mDb->getGainCorrection(hits[i]); From 4741177b4117a47e170546409bf5d08cac6ece51 Mon Sep 17 00:00:00 2001 From: Gene Van Buren <85305093+genevb@users.noreply.github.com> Date: Thu, 11 Apr 2024 17:13:22 -0400 Subject: [PATCH 11/45] Catch a memory leak in a TList (#681) This modification is to remove a memory leak that existed from creating a `TList` that was never cleared in `StHistUtil`. This is not used in production, but is used by some Offline QA macros, so those macros have been appropriately updated in this PR. --- StRoot/StAnalysisUtilities/StHistUtil.cxx | 9 +++++++++ StRoot/StAnalysisUtilities/StHistUtil.h | 2 ++ StRoot/macros/analysis/bfcread_hist_files_add.C | 13 +++++-------- .../macros/analysis/bfcread_hist_integrated_to_ps.C | 2 +- StRoot/macros/analysis/bfcread_hist_prefixes_add.C | 1 + .../analysis/bfcread_hist_prefixes_add_to_ps.C | 1 + 6 files changed, 19 insertions(+), 9 deletions(-) diff --git a/StRoot/StAnalysisUtilities/StHistUtil.cxx b/StRoot/StAnalysisUtilities/StHistUtil.cxx index c7501765c16..3d12eda3d6c 100644 --- a/StRoot/StAnalysisUtilities/StHistUtil.cxx +++ b/StRoot/StAnalysisUtilities/StHistUtil.cxx @@ -476,6 +476,9 @@ StHistUtil::StHistUtil(){ m_PaperHeight = 0; m_Detectors = ""; + + m_ItemsToClear = new TList(); + m_ItemsToClear->SetOwner(); } //_____________________________________________________________________________ @@ -500,6 +503,11 @@ StHistUtil::~StHistUtil(){ for (int ijk=0; ijkClear(); } //_____________________________________________________________________________ void StHistUtil::SetOutFile(const Char_t *fileName, const Char_t* type) { @@ -1789,6 +1797,7 @@ TList* StHistUtil::TrimListByPrefix(TList* dList, const Char_t* withPrefix) { (obj->InheritsFrom("TH1") && m_ListOfPrint->FindObject(obj->GetName())))) dList2->AddLast(obj); } + m_ItemsToClear->Add(dList2); return dList2; } //_____________________________________________________________________________ diff --git a/StRoot/StAnalysisUtilities/StHistUtil.h b/StRoot/StAnalysisUtilities/StHistUtil.h index fe96a562a47..1c366df2546 100644 --- a/StRoot/StAnalysisUtilities/StHistUtil.h +++ b/StRoot/StAnalysisUtilities/StHistUtil.h @@ -134,6 +134,7 @@ class StHistUtil { const Char_t** possibleSuffixes; //! TString m_Detectors; // List of detectors UInt_t m_PrintMode; // Which output files to print + TList* m_ItemsToClear; // List of items to clear at some intervals // For reference analyses: Bool_t m_analMode; @@ -154,6 +155,7 @@ class StHistUtil { public: StHistUtil(); virtual ~StHistUtil(); + virtual void Clear(); virtual void SetDebug(Bool_t dbg=kTRUE) { debug=dbg; } virtual Bool_t Debug() { return debug; } virtual Int_t DrawHists(const Char_t *dirName="EventQA"); diff --git a/StRoot/macros/analysis/bfcread_hist_files_add.C b/StRoot/macros/analysis/bfcread_hist_files_add.C index f75a5875a9a..716483f3fd3 100644 --- a/StRoot/macros/analysis/bfcread_hist_files_add.C +++ b/StRoot/macros/analysis/bfcread_hist_files_add.C @@ -229,9 +229,6 @@ void bfcread_hist_files_add( cout << "bfcread_hist_files_add.C, # histograms copied = " << hCCount << endl; - HM[bnum]->SetHArraySize(HU[bnum]->getNewHistSize()); - HM[bnum]->SetHArray(HU[bnum]->getNewHist()); - HM[bnum]->Make(); } // first time else { @@ -243,13 +240,13 @@ void bfcread_hist_files_add( cout << "bfcread_hist_files_add.C, # histograms added = " << hCCount << endl; - HM[bnum]->SetHArraySize(HU[bnum]->getNewHistSize()); - HM[bnum]->SetHArray(HU[bnum]->getNewHist()); - HM[bnum]->Make(); - } //else (ifl not #1) - dirList->Delete(); + + HM[bnum]->SetHArraySize(HU[bnum]->getNewHistSize()); + HM[bnum]->SetHArray(HU[bnum]->getNewHist()); + HM[bnum]->Make(); + HU[bnum]->Clear(); // to see an example of histograms being added together: // TH1** kathyArray = HU[bnum]->getNewHist(); diff --git a/StRoot/macros/analysis/bfcread_hist_integrated_to_ps.C b/StRoot/macros/analysis/bfcread_hist_integrated_to_ps.C index a39b473555f..422e408e3d2 100644 --- a/StRoot/macros/analysis/bfcread_hist_integrated_to_ps.C +++ b/StRoot/macros/analysis/bfcread_hist_integrated_to_ps.C @@ -204,7 +204,7 @@ void bfcread_hist_integrated_to_ps( cout << "bfcread_hist_integrated_to_ps.C, # histograms added with prefix " << HU->GetPrefix(prefixNum) << " = " << hCCount << endl; } // first set or not - delete dirList; // Only when using PrintList or Prefixes + HU->Clear(); } // found hists } // loop over prefixes diff --git a/StRoot/macros/analysis/bfcread_hist_prefixes_add.C b/StRoot/macros/analysis/bfcread_hist_prefixes_add.C index 4d5f5669c24..76c57db9e3b 100644 --- a/StRoot/macros/analysis/bfcread_hist_prefixes_add.C +++ b/StRoot/macros/analysis/bfcread_hist_prefixes_add.C @@ -163,6 +163,7 @@ void bfcread_hist_prefixes_add( HU[nbranch]->GetPrefix(prefixNum) << " = " << hCCount << endl; } // first set or not } // found hists + HU[nbranch]->Clear(); } // loop over prefixes diff --git a/StRoot/macros/analysis/bfcread_hist_prefixes_add_to_ps.C b/StRoot/macros/analysis/bfcread_hist_prefixes_add_to_ps.C index 2f0dbcf6ced..d8bfc8984fd 100644 --- a/StRoot/macros/analysis/bfcread_hist_prefixes_add_to_ps.C +++ b/StRoot/macros/analysis/bfcread_hist_prefixes_add_to_ps.C @@ -168,6 +168,7 @@ void bfcread_hist_prefixes_add_to_ps( HO->GetPrefix(prefixNum) << " = " << hCCount << endl; } // first set or not } // found hists + HO->Clear(); } // loop over prefixes From 0b6d598d86351fbc98e3360ea08a262f3a9d1002 Mon Sep 17 00:00:00 2001 From: Gene Van Buren <85305093+genevb@users.noreply.github.com> Date: Fri, 12 Apr 2024 14:55:07 -0400 Subject: [PATCH 12/45] Proper dependencies for FCS Pi0 used in QA (#669) This resolves the issue brought in PR #437 : St_QA_Maker should not directly depend on MuDst (a solution proposed in #437 ), but instead should depend on the StFcsPi0FinderForEcal, which itself has a dependency on MuDst. --- StRoot/StBFChain/BigFullChain.h | 4 +++- StRoot/St_QA_Maker/StEventQAMaker.cxx | 4 +--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/StRoot/StBFChain/BigFullChain.h b/StRoot/StBFChain/BigFullChain.h index ae8294bd260..57880357085 100644 --- a/StRoot/StBFChain/BigFullChain.h +++ b/StRoot/StBFChain/BigFullChain.h @@ -1648,6 +1648,7 @@ Bfc_st BFC[] = { // standard chains "StFcsClusterMaker","StFcsClusterMaker","Fill FCS clusters", kFALSE}, {"fcsPoint" ,"","fcsChain", "StEvent,fcsDb", "StFcsPointMaker","StFcsPointMaker,libMinuit","Fill FCS points", kFALSE}, + {"fcsPi0Libs","", "", "MuDst", "", "StFcsPi0FinderForEcal", "Libs for FCS Pi0 Finder", kFALSE}, // FTT {"ftt","fttChain","","FttDat,FttHitCalib,FttClu,FttPoint", "StMaker","StChain","FST chain" ,kFALSE}, {"FttDat","","fttChain","StEvent","StFttRawHitMaker","StFttRawHitMaker,StEvent", @@ -1931,7 +1932,8 @@ Bfc_st BFC[] = { // standard chains {"ppDAQfilter1","","","" ,"","",STAR_CHAIN_OBSOLETE,kFALSE}, {"ppLPeval1" ,"","","" ,"","",STAR_CHAIN_OBSOLETE,kFALSE}, {"QA" ,"","","" ,"","",STAR_CHAIN_OBSOLETE,kFALSE}, - {"EventQA","EventQA","","QUtils,Event","StEventQAMaker" ,"St_QA_Maker","Filling Y2/Y3 Qa histo",kFALSE}, + {"EventQA","EventQA","","QUtils,Event,fcsPi0Libs","StEventQAMaker" + ,"St_QA_Maker","Filling Y2/Y3 Qa histo",kFALSE}, {"QAC" ,"CosmicsQA","globT","" ,"StQACosmicMaker","StQACosmicMaker","",kFALSE}, {"QAalltrigs" ,"", "","", "","","Analyze all triggers in QA",kFALSE}, {"HitFilt" ,"", "","", "StHitFilterMaker","StHitFilterMaker","Hit filter Maker",kFALSE}, diff --git a/StRoot/St_QA_Maker/StEventQAMaker.cxx b/StRoot/St_QA_Maker/StEventQAMaker.cxx index e89040a8f3e..b25f8942723 100644 --- a/StRoot/St_QA_Maker/StEventQAMaker.cxx +++ b/StRoot/St_QA_Maker/StEventQAMaker.cxx @@ -46,9 +46,7 @@ #include "StEpdCollection.h" //fcs -#define SKIPDefImp -#include "StFcsPi0FinderForEcal/StFcsPi0FinderForEcal.cxx" -#undef SKIPDefImp +#include "StFcsPi0FinderForEcal/StFcsPi0FinderForEcal.h" #include "StEvent/StTpcRawData.h" From 61338c568452f6a29b3ce7eff8606fa660d92bd5 Mon Sep 17 00:00:00 2001 From: Daniel Brandenburg Date: Mon, 15 Apr 2024 22:57:29 -0400 Subject: [PATCH 13/45] StFttDbMaker: Warning when DB not found (#682) Checks if databases are returned and issues a warning if not (instead of set faulting) Warning message provides helpful info about the name of the local file (debug only) to be used instead of the DB --- StRoot/StFttDbMaker/StFttDbMaker.cxx | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/StRoot/StFttDbMaker/StFttDbMaker.cxx b/StRoot/StFttDbMaker/StFttDbMaker.cxx index dc9a2a0fb2e..7a91ffe62d3 100644 --- a/StRoot/StFttDbMaker/StFttDbMaker.cxx +++ b/StRoot/StFttDbMaker/StFttDbMaker.cxx @@ -48,8 +48,12 @@ int StFttDbMaker::InitRun(int runNumber) { } else { // default TDataSet *mDbDataSet = GetDataBase("Geometry/ftt/fttHardwareMap"); - St_fttHardwareMap *dataset = (St_fttHardwareMap*) mDbDataSet->Find("fttHardwareMap"); - mFttDb->loadHardwareMapFromDb( dataset ); + if (mDbDataSet){ + St_fttHardwareMap *dataset = (St_fttHardwareMap*) mDbDataSet->Find("fttHardwareMap"); + mFttDb->loadHardwareMapFromDb( dataset ); + } else { + LOG_WARN << "Cannot access `Geometry/ftt/fttHardwareMap` and no local `vmm_map.dat` file provided. Cannot load ftt hardware mapping" << endm; + } } @@ -58,6 +62,8 @@ int StFttDbMaker::InitRun(int runNumber) { if ( mDbDataSetDW ) { St_fttDataWindows *dataset = (St_fttDataWindows*) mDbDataSetDW->Find("fttDataWindows"); mFttDb->loadDataWindowsFromDb( dataset ); + } else { + LOG_WARN << "Cannot access `Calibrations/ftt/fttDataWindows`" << endm; } From 5bc6193a4db975e6640f46ceb40008639ec36d77 Mon Sep 17 00:00:00 2001 From: Daniel Brandenburg Date: Thu, 18 Apr 2024 11:58:36 -0400 Subject: [PATCH 14/45] QA for StEvent and MuDst FwdTracks (#636) StFwdAnalysisMaker provides basic QA of the forward tracking from either the MuDst or StEvent collections. It also serves as an example for how to analyze the FwdData. Note - as it is currently envisioned this would never run during a production. However, it may be beneficial to make it work with the production QA histogram system upon request, we can update to that end if needed. --------- Co-authored-by: Dmitri Smirnov --- StRoot/StFwdUtils/StFwdAnalysisMaker.cxx | 435 +++++++++++++++++++---- StRoot/StFwdUtils/StFwdAnalysisMaker.h | 52 ++- 2 files changed, 410 insertions(+), 77 deletions(-) diff --git a/StRoot/StFwdUtils/StFwdAnalysisMaker.cxx b/StRoot/StFwdUtils/StFwdAnalysisMaker.cxx index 06c0697efc8..439fa283ce1 100644 --- a/StRoot/StFwdUtils/StFwdAnalysisMaker.cxx +++ b/StRoot/StFwdUtils/StFwdAnalysisMaker.cxx @@ -1,78 +1,112 @@ -#include "StFwdUtils/StFwdAnalysisMaker.h" -#include "StFwdTrackMaker/Common.h" +#include "TVector3.h" +#include "TH1F.h" +#include "TH2F.h" -#include -#include -#include -#include -#include +#include "St_base/StMessMgr.h" #include "StEvent/StEvent.h" -#include "StEvent/StGlobalTrack.h" -#include "StEvent/StHelixModel.h" -#include "StEvent/StPrimaryTrack.h" -#include "StEvent/StRnDHit.h" -#include "StEvent/StRnDHitCollection.h" -#include "StEvent/StTrack.h" -#include "StEvent/StTrackGeometry.h" -#include "StEvent/StTrackNode.h" -#include "StEvent/StPrimaryVertex.h" #include "StEvent/StEnumerations.h" -#include "StEvent/StTrackDetectorInfo.h" -#include "StEvent/StFttPoint.h" -#include "StEvent/StFcsHit.h" #include "StEvent/StFcsCluster.h" #include "StEvent/StFttCollection.h" #include "StEvent/StFcsCollection.h" -#include "StEvent/StTriggerData.h" -#include "StEvent/StFstHitCollection.h" -#include "StEvent/StFstHit.h" +#include "StEvent/StFwdTrack.h" #include "StEvent/StFwdTrackCollection.h" -#include "StChain/StChainOpt.h" - -#include "StEventUtilities/StEventHelper.h" #include "StMuDSTMaker/COMMON/StMuDstMaker.h" #include "StMuDSTMaker/COMMON/StMuDst.h" #include "StMuDSTMaker/COMMON/StMuFwdTrack.h" +#include "StMuDSTMaker/COMMON/StMuFwdTrackCollection.h" +#include "StFcsDbMaker/StFcsDb.h" +#include "StFwdTrackMaker/Common.h" +#include "StFwdUtils/StFwdAnalysisMaker.h" -#include "tables/St_g2t_fts_hit_Table.h" -#include "tables/St_g2t_track_Table.h" -#include "tables/St_g2t_vertex_Table.h" -#include "tables/St_g2t_event_Table.h" - -#include "StarMagField/StarMagField.h" +//________________________________________________________________________ +StFwdAnalysisMaker::StFwdAnalysisMaker() : StMaker("fwdAna"){ + setLocalOutputFile( "" ); // default off +}; +int StFwdAnalysisMaker::Finish() { + + if ( mLocalOutputFile != "" ){ + auto prevDir = gDirectory; + + // output file name + TFile *fOutput = new TFile(mLocalOutputFile, "RECREATE"); + fOutput->cd(); + for (auto nh : mHists) { + nh.second->SetDirectory(gDirectory); + nh.second->Write(); + } -#include "St_base/StMessMgr.h" -#include "StarClassLibrary/StPhysicalHelix.hh" -#include "StarClassLibrary/SystemOfUnits.h" + // restore previous directory + gDirectory = prevDir; + LOG_INFO << "Done writing StFwdAnalysisMaker output to local file : " << mLocalOutputFile << endm; + } -#include "StEvent/StFwdTrack.h" + return kStOk; +} //________________________________________________________________________ -StFwdAnalysisMaker::StFwdAnalysisMaker() : StMaker("fwdAna"){}; -int StFwdAnalysisMaker::Finish() { return kStOk; } -//________________________________________________________________________ -int StFwdAnalysisMaker::Init() { LOG_DEBUG << "StFwdAnalysisMaker::Init" << endm; return kStOK;}; +int StFwdAnalysisMaker::Init() { + LOG_DEBUG << "StFwdAnalysisMaker::Init" << endm; + + AddHist( mHists["fwdMultFailed"] = new TH1F("fwdMultFailed", ";N_{ch}^{FWD}; counts", 100, 0, 100) ); + AddHist( mHists["fwdMultAll"] = new TH1F("fwdMultAll", ";N_{ch}^{FWD}; counts", 100, 0, 100) ); + AddHist( mHists["fwdMultGood"] = new TH1F("fwdMultGood", ";N_{ch}^{FWD}; counts", 100, 0, 100) ); + AddHist( mHists["fwdMultFST"] = new TH1F("fwdMultFST", ";N_{ch}^{FWD}; counts", 100, 0, 100) ); + AddHist( mHists["nHitsFit"] = new TH1F("nHitsFit", ";nHitsFit; counts", 10, 0, 10) ); + AddHist( mHists["fwdMultEcalMatch"] = new TH1F("fwdMultEcalMatch", ";N_{ch}^{FWD}; counts", 100, 0, 100) ); + AddHist( mHists["fwdMultHcalMatch"] = new TH1F("fwdMultHcalMatch", ";N_{ch}^{FWD}; counts", 100, 0, 100) ); + AddHist( mHists["fwdMultEcalClusters"] = new TH1F("fwdMultEcalClusters", ";N_{Clu}^{ECAL}; counts", 100, 0, 100) ); + AddHist( mHists["fwdMultHcalClusters"] = new TH1F("fwdMultHcalClusters", ";N_{Clu}^{HCAL}; counts", 100, 0, 100) ); + AddHist( mHists["eta"] = new TH1F("eta", ";#eta; counts", 100, 0, 5) ); + AddHist( mHists["phi"] = new TH1F("phi", ";#phi; counts", 100, -3.1415926, 3.1415926) ); + AddHist( mHists["pt"] = new TH1F("pt", "; pT; counts", 500, 0, 10) ); + AddHist( mHists["charge"] = new TH1F("charge", "; charge; counts", 4, -2, 2) ); + AddHist( mHists["ecalMatchPerTrack"] = new TH1F("ecalMatchPerTrack", ";N_{match} / track; counts", 5, 0, 5) ); + AddHist( mHists["hcalMatchPerTrack"] = new TH1F("hcalMatchPerTrack", ";N_{match} / track; counts", 5, 0, 5) ); + AddHist( mHists["matchedEcalEnergy"] = new TH1F("matchedEcalEnergy", ";Energy; counts", 100, 0, 15) ); + AddHist( mHists["matchedHcalEnergy"] = new TH1F("matchedHcalEnergy", ";Energy; counts", 100, 0, 15) ); + AddHist( mHists["ecalEnergy"] = new TH1F("ecalEnergy", ";Energy; counts", 100, 0, 15) ); + AddHist( mHists["hcalEnergy"] = new TH1F("hcalEnergy", ";Energy; counts", 100, 0, 15) ); + AddHist( mHists["ecalXY"] = new TH2F( "ecalXY", ";ecalX;ecalY", 200, -200, 200, 200, -200, 200 ) ); + AddHist( mHists["hcalXY"] = new TH2F( "hcalXY", ";hcalX;hcalY", 200, 0, 50, 200, 0, 50 ) ); + AddHist( mHists["ecaldX"] = new TH1F( "ecaldX", ";dx (trk - ecal); counts", 400, -200, 200 ) ); + AddHist( mHists["matchedEcaldX"] = new TH1F( "matchedEcaldX", ";dx (trk - ecal); counts", 400, -200, 200 ) ); + AddHist( mHists["ecaldY"] = new TH1F( "ecaldY", ";dy (trk - ecal); counts", 400, -200, 200 ) ); + AddHist( mHists["matchedEcaldY"] = new TH1F( "matchedEcaldY", ";dy (trk - ecal); counts", 400, -200, 200 ) ); + AddHist( mHists["ecaldR"] = new TH1F( "ecaldR", ";dr (trk - ecal); counts", 400, 0, 400 ) ); + AddHist( mHists["ecalMindR"] = new TH1F( "ecalMindR", ";dr (trk - ecal); counts", 400, 0, 400 ) ); + AddHist( mHists["matchedEcaldR"] = new TH1F( "matchedEcaldR", ";dr (trk - ecal); counts", 400, 0, 400 ) ); + AddHist( mHists["hcaldX"] = new TH1F( "hcaldX", ";dx (trk - hcal); counts", 400, -200, 200 ) ); + AddHist( mHists["hcaldXdNFit"] = new TH2F( "hcaldXdNFit", ";dx (trk - hcal); nFit", 400, -200, 200, 10, 0, 10 ) ); + AddHist( mHists["matchedHcaldX"] = new TH1F( "matchedHcaldX", ";dx (trk - hcal); counts", 400, -200, 200 ) ); + AddHist( mHists["hcaldY"] = new TH1F( "hcaldY", ";dy (trk - hcal); counts", 400, -200, 200 ) ); + AddHist( mHists["hcaldYdNFit"] = new TH2F( "hcaldYdNFit", ";dy (trk - hcal); nFit", 400, -200, 200, 10, 0, 10 ) ); + AddHist( mHists["matchedHcaldY"] = new TH1F( "matchedHcaldY", ";dy (trk - hcal); counts", 400, -200, 200 ) ); + AddHist( mHists["hcaldR"] = new TH1F( "hcaldR", ";dr (trk - hcal); counts", 400, 0, 400 ) ); + AddHist( mHists["hcalMindR"] = new TH1F( "hcalMindR", ";dr (trk - hcal); counts", 400, 0, 400 ) ); + AddHist( mHists["matchedHcaldR"] = new TH1F( "matchedHcaldR", ";dr (trk - hcal); counts", 400, 0, 400 ) ); + AddHist( mHists["trkEcalX"] = new TH2F( "trkEcalX", ";trkX;ecalX", 300, -150, 150, 300, -150, 150 ) ); + AddHist( mHists["trkEcalY"] = new TH2F( "trkEcalY", ";trkY;ecalY", 300, -150, 150, 300, -150, 150 ) ); + AddHist( mHists["trkEcalMinX"] = new TH2F( "trkEcalMinX", ";trkX;ecalX", 300, -150, 150, 300, -150, 150 ) ); + AddHist( mHists["trkEcalMinY"] = new TH2F( "trkEcalMinY", ";trkY;ecalY", 300, -150, 150, 300, -150, 150 ) ); + AddHist( mHists["trkHcalX"] = new TH2F( "trkHcalX", ";trkX;hcalX", 300, -150, 150, 300, -150, 150 ) ); + AddHist( mHists["trkHcalY"] = new TH2F( "trkHcalY", ";trkY;hcalY", 300, -150, 150, 300, -150, 150 ) ); + AddHist( mHists["trkHcalMinX"] = new TH2F( "trkHcalMinX", ";trkX;hcalX", 300, -150, 150, 300, -150, 150 ) ); + AddHist( mHists["trkHcalMinY"] = new TH2F( "trkHcalMinY", ";trkY;hcalY", 300, -150, 150, 300, -150, 150 ) ); + + return kStOK; +} //________________________________________________________________________ int StFwdAnalysisMaker::Make() { LOG_DEBUG << "StFwdAnalysisMaker::Make" << endm; - StEvent *event = (StEvent *)GetDataSet("StEvent"); - if (!event){ - LOG_INFO << "Cannot find StEvent" << endm; - return kStOK; - } long long itStart = FwdTrackerUtils::nowNanoSecond(); - - StFttCollection *fttCol = event->fttCollection(); - if (fttCol){ - LOG_INFO << "The Ftt Collection has " << fttCol->numberOfPoints() << " points" << endm; - } - - ProcessFwdTracks(); - ProcessFwdMuTracks(); + if (!mAnalyzeMuDst) + ProcessFwdTracks(); + else + ProcessFwdMuTracks(); LOG_DEBUG << "Processing Fwd Tracks took: " << (FwdTrackerUtils::nowNanoSecond() - itStart) * 1e6 << " ms" << endm; return kStOK; } // Make @@ -81,25 +115,211 @@ void StFwdAnalysisMaker::Clear(const Option_t *opts) { LOG_DEBUG << "StFwdAnalys //________________________________________________________________________ void StFwdAnalysisMaker::ProcessFwdTracks( ){ // This is an example of how to process fwd track collection - LOG_INFO << "StFwdAnalysisMaker::ProcessFwdTracks" << endm; + LOG_DEBUG << "StFwdAnalysisMaker::ProcessFwdTracks" << endm; StEvent *stEvent = static_cast(GetInputDS("StEvent")); if (!stEvent) return; + + if (stEvent){ + StFttCollection *fttCol = stEvent->fttCollection(); + if (fttCol){ + LOG_DEBUG << "The Ftt Collection has " << fttCol->numberOfPoints() << " points" << endm; + } + } StFwdTrackCollection * ftc = stEvent->fwdTrackCollection(); - if (!ftc) + if (!ftc) { + LOG_DEBUG << "Forward Track Collection is not present" << endm; return; - for ( auto fwdTrack : ftc->tracks() ){ - LOG_INFO << TString::Format("StFwdTrack[ nProjections=%lu, nFTTSeeds=%lu, nFSTSeeds=%lu, mPt=%f ]", fwdTrack->mProjections.size(), fwdTrack->mFTTPoints.size(), fwdTrack->mFSTPoints.size(), fwdTrack->momentum().perp()) << endm; - for ( auto proj : fwdTrack->mProjections ) { - LOG_DEBUG << TString::Format("Proj[ %d, %f, %f, %f ]", proj.mDetId, proj.mXYZ.x(), proj.mXYZ.y(), proj.mXYZ.z() ) << endm; + } + + LOG_DEBUG << "Checking FcsCollection" << endm; + StFcsCollection *fcs = stEvent->fcsCollection(); + if (!fcs) return; + + StFcsDb *mFcsDb = static_cast(GetDataSet("fcsDb")); + + size_t fwdMultEcalMatch = 0; + size_t fwdMultHcalMatch = 0; + size_t fwdMultFST = 0; + + LOG_INFO << "FwdTrackCollection has: " << ftc->tracks().size() << " tracks" << endm; + + getHist( "fwdMultAll" )->Fill( ftc->tracks().size() ); + + // Cluster info (independen t of tracks) + size_t fwdMultEcalClusters = 0; + size_t fwdMultHcalClusters = 0; + for ( int iDet = 0; iDet < 4; iDet++ ){ + for( size_t i = 0; i < fcs->clusters(iDet).size(); i++){ + StFcsCluster * clu = fcs->clusters(iDet)[i]; + + if ( iDet < 2 ){ + fwdMultEcalClusters++; + getHist( "ecalEnergy" )->Fill( clu->energy() ); + } else if ( iDet < 4 ){ + fwdMultHcalClusters++; + getHist( "hcalEnergy" )->Fill( clu->energy() ); + } } } -} + + getHist( "fwdMultEcalClusters" )->Fill( fwdMultEcalClusters ); + getHist( "fwdMultHcalClusters" )->Fill( fwdMultHcalClusters ); + + + size_t nGood = 0; + size_t nFailed = 0; + for ( auto fwdTrack : ftc->tracks() ){ + if ( !fwdTrack->didFitConvergeFully() ) { + nFailed++; + continue; + } + nGood++; + LOG_DEBUG << TString::Format("StFwdTrack[ nProjections=%lu, nFTTSeeds=%lu, nFSTSeeds=%lu, mPt=%f ]", fwdTrack->mProjections.size(), fwdTrack->mFTTPoints.size(), fwdTrack->mFSTPoints.size(), fwdTrack->momentum().perp()) << endm; + LOG_DEBUG << "track fit momentum " << TString::Format( "(pt=%f, eta=%f, phi=%f)", fwdTrack->momentum().perp(), fwdTrack->momentum().pseudoRapidity(), fwdTrack->momentum().phi() ) << endm; + LOG_DEBUG << "StFwdTrack has " << fwdTrack->ecalClusters().size() << " ecal matches" << endm; + LOG_DEBUG << "StFwdTrack has " << fwdTrack->hcalClusters().size() << " hcal matches" << endm; + + getHist("ecalMatchPerTrack")->Fill( fwdTrack->ecalClusters().size() ); + getHist("hcalMatchPerTrack")->Fill( fwdTrack->hcalClusters().size() ); + + getHist( "nHitsFit" )->Fill( fwdTrack->numberOfFitPoints() ); + + if (fwdTrack->mFSTPoints.size() > 0){ + fwdMultFST ++; + } + + getHist("eta")->Fill( fwdTrack->momentum().pseudoRapidity() ); + getHist("phi")->Fill( fwdTrack->momentum().phi() ); + getHist("pt")->Fill( fwdTrack->momentum().perp() ); + + getHist("charge")->Fill( fwdTrack->charge() ); + + // ecal proj + int detId = kFcsWcalId; + TVector3 ecalXYZ; + TVector3 ecapP; + + StFwdTrackProjection ecalProj = fwdTrack->getProjectionFor( detId, 0 ); + StFwdTrackProjection hcalProj = fwdTrack->getProjectionFor( kFcsHcalId, 0 ); + LOG_DEBUG << "EcalProj z= " << ecalProj.mXYZ.z() << endm; + LOG_DEBUG << "HcalProj z= " << hcalProj.mXYZ.z() << endm; + LOG_DEBUG << "EcalProj Mom" << TString::Format( "(pt=%f, eta=%f, phi=%f)", ecalProj.mMom.perp(), ecalProj.mMom.pseudoRapidity(), ecalProj.mMom.phi() ) << endm; + + for ( size_t iEcal = 0; iEcal < fwdTrack->ecalClusters().size(); iEcal++ ){ + StFcsCluster *clu = fwdTrack->ecalClusters()[iEcal]; + LOG_DEBUG << "Ecal clu detId = " << clu->detectorId() << endm; + getHist("matchedEcalEnergy")->Fill( clu->energy() ); + + StThreeVectorD xyz = mFcsDb->getStarXYZfromColumnRow(clu->detectorId(), clu->x(), clu->y()); + float dx = ecalProj.mXYZ.x() - xyz.x(); + float dy = ecalProj.mXYZ.y() - xyz.y(); + float dr = sqrt(dx*dx + dy*dy); + getHist("matchedEcaldX")->Fill( dx ); + getHist("matchedEcaldY")->Fill( dy ); + getHist("matchedEcaldR")->Fill( dr ); + } + + if (ecalProj.mXYZ.z() > 500){ + double mindR = 999; + StFcsCluster * cclu = nullptr; // closet cluster + for ( int iDet = 0; iDet < 2; iDet++ ){ + for( size_t i = 0; i < fcs->clusters(iDet).size(); i++){ + StFcsCluster * clu = fcs->clusters(iDet)[i]; + + StThreeVectorD xyz = mFcsDb->getStarXYZfromColumnRow(clu->detectorId(), clu->x(), clu->y()); + getHist("ecalXY")->Fill( xyz.x(), xyz.y() ); + + float dx = ecalProj.mXYZ.x() - xyz.x(); + float dy = ecalProj.mXYZ.y() - xyz.y(); + float dr = sqrt(dx*dx + dy*dy); + + if ( fabs(dy) < 25 ) + getHist( "ecaldX" )->Fill( dx ); + if ( fabs(dx) < 25 ) + getHist( "ecaldY" )->Fill( dy ); + getHist( "ecaldR" )->Fill( dr ); + if ( dr < mindR ){ + mindR = dr; + cclu = clu; + } + + getHist( "trkEcalX" ) -> Fill( ecalProj.mXYZ.x(), xyz.x() ); + getHist( "trkEcalY" ) -> Fill( ecalProj.mXYZ.y(), xyz.y() ); + + } + } + getHist( "ecalMindR" )->Fill( mindR ); + if (cclu){ + StThreeVectorD xyz = mFcsDb->getStarXYZfromColumnRow(cclu->detectorId(), cclu->x(), cclu->y()); + getHist( "trkEcalMinX" ) -> Fill( ecalProj.mXYZ.x(), xyz.x() ); + getHist( "trkEcalMinY" ) -> Fill( ecalProj.mXYZ.y(), xyz.y() ); + } + } + + if (hcalProj.mXYZ.z() > 500){ + + double mindR = 999; + StFcsCluster * cclu = nullptr; + for ( int iDet = 2; iDet < 4; iDet++ ){ + for( size_t i = 0; i < fcs->clusters(iDet).size(); i++){ + StFcsCluster * clu = fcs->clusters(iDet)[i]; + if (!clu) continue; + StThreeVectorD xyz = mFcsDb->getStarXYZfromColumnRow(clu->detectorId(), clu->x(), clu->y()); + getHist("hcalXY")->Fill( xyz.x(), xyz.y() ); + + float dx = hcalProj.mXYZ.x() - xyz.x(); + float dy = hcalProj.mXYZ.y() - xyz.y(); + float dr = sqrt(dx*dx + dy*dy); + + if ( fabs(dy) < 25 ){ + getHist( "hcaldX" )->Fill( dx ); + getHist( "hcaldXdNFit" )->Fill( dx, fwdTrack->numberOfFitPoints() ); + + } + if ( fabs(dx) < 25 ){ + getHist( "hcaldY" )->Fill( dy ); + getHist( "hcaldYdNFit" )->Fill( dy, fwdTrack->numberOfFitPoints() ); + } + getHist( "hcaldR" )->Fill( dr ); + + if ( dr < mindR ){ + mindR = dr; + cclu = clu; + } + + getHist( "trkHcalX" ) -> Fill( hcalProj.mXYZ.x(), xyz.x() ); + getHist( "trkHcalY" ) -> Fill( hcalProj.mXYZ.y(), xyz.y() ); + } + } + getHist( "hcalMindR" )->Fill( mindR ); + if (cclu){ + StThreeVectorD xyz = mFcsDb->getStarXYZfromColumnRow(cclu->detectorId(), cclu->x(), cclu->y()); + getHist( "trkHcalMinX" ) -> Fill( hcalProj.mXYZ.x(), xyz.x() ); + getHist( "trkHcalMinY" ) -> Fill( hcalProj.mXYZ.y(), xyz.y() ); + } + } + + if (fwdTrack->ecalClusters().size() > 0) + fwdMultEcalMatch++; + if (fwdTrack->hcalClusters().size() > 0) + fwdMultHcalMatch++; + + } // Loop ftc->tracks() + + getHist( "fwdMultGood" )->Fill( nGood ); + getHist( "fwdMultFailed" )->Fill( nFailed ); + getHist("fwdMultFST")->Fill( fwdMultFST ); + getHist("fwdMultHcalMatch")->Fill( fwdMultHcalMatch ); + getHist("fwdMultEcalMatch")->Fill( fwdMultEcalMatch ); + + LOG_INFO << "Found " << nFailed << " failed track fits out of " << ftc->tracks().size() << endm; +} // ProcessFwdTracks //________________________________________________________________________ void StFwdAnalysisMaker::ProcessFwdMuTracks( ){ // This is an example of how to process fwd track collection - LOG_INFO << "StFwdAnalysisMaker::ProcessFwdMuTracks" << endm; + LOG_DEBUG << "StFwdAnalysisMaker::ProcessFwdMuTracks" << endm; StMuDstMaker *mMuDstMaker = (StMuDstMaker *)GetMaker("MuDst"); if(!mMuDstMaker) { LOG_WARN << " No MuDstMaker ... bye-bye" << endm; @@ -112,10 +332,97 @@ void StFwdAnalysisMaker::ProcessFwdMuTracks( ){ } StMuFwdTrackCollection * ftc = mMuDst->muFwdTrackCollection(); if (!ftc) return; - cout << "Number of StMuFwdTracks: " << ftc->numberOfFwdTracks() << endl; - + + StMuFcsCollection *fcs = mMuDst->muFcsCollection(); + if (!fcs) return; + + LOG_INFO << "Number of StMuFwdTracks: " << ftc->numberOfFwdTracks() << endl; + + StFcsDb *mFcsDb = static_cast(GetDataSet("fcsDb")); + + size_t fwdMultFST = 0; + size_t fwdMultEcalMatch = 0; + size_t fwdMultHcalMatch = 0; + for ( size_t iTrack = 0; iTrack < ftc->numberOfFwdTracks(); iTrack++ ){ StMuFwdTrack * muFwdTrack = ftc->getFwdTrack( iTrack ); - LOG_INFO << TString::Format("StMuFwdTrack[ nProjections=%lu, nFTTSeeds=%lu, nFSTSeeds=%lu, mPt=%f ]", muFwdTrack->mProjections.size(), muFwdTrack->mFTTPoints.size(), muFwdTrack->mFSTPoints.size(), muFwdTrack->momentum().Pt()) << endm; - } + // LOG_DEBUG << TString::Format("StMuFwdTrack[ nProjections=%lu, nFTTSeeds=%lu, nFSTSeeds=%lu, mPt=%f ]", muFwdTrack->mProjections.size(), muFwdTrack->mFTTPoints.size(), muFwdTrack->mFSTPoints.size(), muFwdTrack->momentum().Pt()) << endm; + + LOG_DEBUG << "StMuFwdTrack has " << muFwdTrack->mEcalClusters.GetEntries() << " Ecal matched" << endm; + LOG_DEBUG << "StMuFwdTrack has " << muFwdTrack->mHcalClusters.GetEntries() << " Hcal matched" << endm; + + getHist("eta")->Fill( muFwdTrack->momentum().Eta() ); + getHist("phi")->Fill( muFwdTrack->momentum().Phi() ); + + if (muFwdTrack->mFSTPoints.size() > 0){ + fwdMultFST ++; + } + + if (muFwdTrack->mEcalClusters.GetEntries() > 0) + fwdMultEcalMatch++; + if (muFwdTrack->mHcalClusters.GetEntries() > 0) + fwdMultHcalMatch++; + + + // ecal proj + int detId = kFcsWcalId; + TVector3 ecalXYZ; + TVector3 ecapP; + + StMuFwdTrackProjection ecalProj; + bool foundEcalProj = muFwdTrack->getProjectionFor( detId, ecalProj, 0 ); + + if (foundEcalProj){ + for( size_t i = 0; i < fcs->numberOfClusters(); i++){ + StMuFcsCluster * clu = fcs->getCluster(i); + + if ( clu->detectorId() > 1 ) continue; + + if ( clu->energy() < 1 ) continue; + StThreeVectorD xyz = mFcsDb->getStarXYZfromColumnRow(clu->detectorId(), clu->x(), clu->y()); + + float dx = ecalProj.mXYZ.X() - xyz.x(); + float dy = ecalProj.mXYZ.Y() - xyz.y(); + float dr = sqrt(dx*dx + dy*dy); + + getHist( "ecaldX" )->Fill( dx ); + getHist( "ecaldY" )->Fill( dy ); + getHist( "ecaldR" )->Fill( dr ); + + getHist( "trkEcalX" ) -> Fill( ecalProj.mXYZ.X(), xyz.x() ); + + } // i + } // foundEcalProj + + + for ( int i = 0; i < muFwdTrack->mEcalClusters.GetEntries(); i++ ){ + auto c = (StMuFcsCluster*) muFwdTrack->mEcalClusters.At(i); + if (!c) continue; + getHist("ecalEnergy")->Fill( c->energy() ); + + LOG_DEBUG << "eCal Cluster detId = " << c->detectorId() << endm; + StThreeVectorD xyz = mFcsDb->getStarXYZfromColumnRow(c->detectorId(), c->x(), c->y()); + getHist("ecalXY")->Fill( xyz.x(), xyz.y() ); + + if (foundEcalProj){ + getHist("matchedEcaldX")->Fill( ecalProj.mXYZ.X() - xyz.x() ); + } + } // i + + getHist("ecalMatchPerTrack")->Fill( muFwdTrack->mEcalClusters.GetEntries() ); + getHist("hcalMatchPerTrack")->Fill( muFwdTrack->mHcalClusters.GetEntries() ); + + for ( int i = 0; i < muFwdTrack->mHcalClusters.GetEntries(); i++ ){ + auto c = (StMuFcsCluster*) muFwdTrack->mHcalClusters.At(i); + if (!c) continue; + getHist("hcalEnergy")->Fill( c->energy() ); + + getHist("hcalXY")->Fill( c->x(), c->y() ); + } // i + } // iTrack + + getHist("fwdMult")->Fill( ftc->numberOfFwdTracks() ); + getHist("fwdMultFST")->Fill( fwdMultFST ); + getHist("fwdMultHcalMatch")->Fill( fwdMultHcalMatch ); + getHist("fwdMultEcalMatch")->Fill( fwdMultEcalMatch ); } diff --git a/StRoot/StFwdUtils/StFwdAnalysisMaker.h b/StRoot/StFwdUtils/StFwdAnalysisMaker.h index 0af1223f5a0..32ff7fe100a 100644 --- a/StRoot/StFwdUtils/StFwdAnalysisMaker.h +++ b/StRoot/StFwdUtils/StFwdAnalysisMaker.h @@ -1,22 +1,13 @@ #ifndef ST_FWD_ANALYSIS_MAKER_H #define ST_FWD_ANALYSIS_MAKER_H -#include "StChain/StMaker.h" -#include "TVector3.h" -// ROOT includes -#include "TNtuple.h" -#include "TTree.h" -// STL includes -#include -#include - -class StFwdTrack; - +#include -class StFwdAnalysisMaker : public StMaker { +#include "StChain/StMaker.h" - ClassDef(StFwdAnalysisMaker, 0); +class StFwdAnalysisMaker : public StMaker +{ public: StFwdAnalysisMaker(); ~StFwdAnalysisMaker(){/* nada */}; @@ -27,6 +18,41 @@ class StFwdAnalysisMaker : public StMaker { void Clear(const Option_t *opts = ""); void ProcessFwdTracks(); void ProcessFwdMuTracks(); + + // StEvent analyzed by default + // call this to analyze the MuDst instead + void setMuDstInput() { mAnalyzeMuDst = true; } + void setLocalOutputFile( TString f ) { mLocalOutputFile = f; } + + protected: + + /** + * @brief Map of + * + */ + std::map mHists; + + /** + * @brief Get the Hist object from the map + * - Additional check and safety for missing histograms + * @param n Histogram name + * @return TH1* histogram if found, otherwise a 'nil' histogram with one bin + */ + TH1* getHist( TString n ){ + if (mHists.count(n)) + return mHists[n]; + LOG_ERROR << "Attempting to access non-existing histogram" << endm; + return new TH1F( "NULL", "NULL", 1, 0, 1 ); // returning nullptr can lead to seg fault, this fails softly + } + + /** + * @brief Control whether the analysis uses StEvent (default) or MuDst as input + * + */ + bool mAnalyzeMuDst = false; + TString mLocalOutputFile; + + ClassDef(StFwdAnalysisMaker, 0); }; #endif From ba4cce5d6c6e9c5ed4347e223d99cc8df4a74737 Mon Sep 17 00:00:00 2001 From: Vinh Luong Date: Fri, 19 Apr 2024 17:30:02 +0300 Subject: [PATCH 15/45] Update centrality definition for Run20 and Run21 (#663) Update centrality definition for: - FXT: Au+Au sqrt(s_NN) = 5.2, 6.2 GeV - COL BES-II: Au+Au sqrt(s_NN) = 9.2, 11.5, 17.3 GeV Temporarily set event weight for sqrt(s_NN) = 3.0 GeV (2018) to unity --------- Co-authored-by: Dmitri Smirnov Co-authored-by: nigmatkulov --- StRoot/StRefMultCorr/BadRun.h | 26 +- StRoot/StRefMultCorr/CentralityMaker.cxx | 8 + StRoot/StRefMultCorr/CentralityMaker.h | 2 + StRoot/StRefMultCorr/Param.cxx | 1 + StRoot/StRefMultCorr/Param.h | 544 ++++++++++++++++++++++- StRoot/StRefMultCorr/StRefMultCorr.cxx | 376 +++++++++++++++- StRoot/StRefMultCorr/StRefMultCorr.h | 8 +- 7 files changed, 946 insertions(+), 19 deletions(-) diff --git a/StRoot/StRefMultCorr/BadRun.h b/StRoot/StRefMultCorr/BadRun.h index b7ec89c4460..5fe37a8ab90 100644 --- a/StRoot/StRefMultCorr/BadRun.h +++ b/StRoot/StRefMultCorr/BadRun.h @@ -91,25 +91,43 @@ const Int_t badrun_refmult_2019[nBadRun_refmult_2019] = { // 1. Au+Au 31.2 AGeV (3) = 7.7 GeV // 2. Au+Au 7.3 AGeV (4) = 3.9 GeV // 3. Au+Au 5.75 AGeV (8) = 3.5 GeV +// 4. Au+Au 13.5 AGeV (2) = 5.2 GeV +// 5. Au+Au 19.5 AGeV (2) = 6.2 GeV +// 6. Au+Au 9.2 GeV (204) +// 7. Au+Au 11.5 GeV (85) // -const Int_t nBadRun_refmult_2020 = 15; +const Int_t nBadRun_refmult_2020 = 308; const Int_t badrun_refmult_2020[nBadRun_refmult_2020] = { // Au+Au 31.2 AGeV (7.7 GeV) 21029002, 21029013, 21029027, // Au+Au 7.3 AGeV (3.9 GeV) 21035008, 21035011, 21036012, 21035014, // Au+Au 5.75 AGeV (3.5 GeV) - 20355020, 20355021, 21044023, 21045024, 21045025, 21044027, 21044035, 21045004 + 20355020, 20355021, 21044023, 21045024, 21045025, 21044027, 21044035, 21045004, + // Au+Au 13.5 AGeV (5.2 GeV) + 21034002, 21034007, + // Au+Au 19.5 AGeV (6.2 GeV) + 21032046, 21033009, + // Au+Au 9.2 GeV + 21036025, 21036028, 21036032, 21037025, 21037030, 21037031, 21037047, 21037052, 21038020, 21038021, 21038029, 21038031, 21038033, 21038035, 21038039, 21038042, 21038046, 21039025, 21039029, 21040007, 21056032, 21058027, 21058028, 21058029, 21058030, 21060015, 21060016, 21060021, 21060026, 21062015, 21062020, 21062021, 21064004, 21064024, 21064041, 21064047, 21065026, 21065042, 21066027, 21066028, 21067020, 21068024, 21068027, 21068030, 21069005, 21069006, 21069014, 21069017, 21069035, 21069038, 21069040, 21069042, 21069043, 21070011, 21071002, 21072016, 21073007, 21073008, 21073032, 21076004, 21076029, 21077024, 21078001, 21078002, 21078006, 21078020, 21080027, 21169035, 21169036, 21169037, 21169038, 21169039, 21170018, 21171007, 21171031, 21171032, 21171033, 21172032, 21174049, 21174050, 21175009, 21176020, 21176024, 21176029, 21177019, 21177020, 21177021, 21177022, 21177032, 21178013, 21179001, 21179018, 21179020, 21179026, 21180008, 21180025, 21180027, 21181024, 21181025, 21181026, 21181033, 21182037, 21182038, 21182041, 21184025, 21184026, 21186026, 21186027, 21187032, 21188017, 21188027, 21189039, 21189040, 21190053, 21191008, 21192018, 21193009, 21193027, 21194002, 21196004, 21197005, 21198002, 21203001, 21203002, 21203003, 21203017, 21205002, 21205020, 21205023, 21206002, 21206005, 21206007, 21206008, 21208027, 21209009, 21210009, 21210046, 21211004, 21211009, 21213004, 21213005, 21213006, 21213013, 21213014, 21213016, 21213017, 21213018, 21213019, 21213020, 21217001, 21217010, 21217020, 21218001, 21218002, 21218003, 21218004, 21218005, 21218006, 21218007, 21218013, 21218014, 21218015, 21218016, 21218017, 21219007, 21219008, 21219009, 21219010, 21220015, 21222026, 21223030, 21225035, 21225040, 21225041, 21225042, 21225045, 21226003, 21227007, 21227008, 21227021, 21228020, 21229006, 21229041, 21233002, 21233010, 21235015, 21235033, 21235035, 21237014, 21237021, 21237022, 21237023, 21239010, 21241015, 21241016, 21242028, 21243007, 21243008, 21243033, 21243038, 21244023, 21244024, 21245003, + // Au+Au 11.5 GeV + 20344004, 20344006, 20344007, 20344008, 20344009, 20344013, 20344014, 20344015, 20347037, 20347035, 20347036, 20347038, 20347039, 20348023, 20351062, 20351067, 20354051, 20354053, 20355004, 20356005, 20356007, 20356020, 20356022, 20356023, 20357022, 20361014, 20361017, 20363010, 21003011, 21004021, 21005039, 21005040, 21005041, 21006008, 21006029, 21006031, 21007034, 21010036, 21011001, 21011004, 21012034, 21012035, 21013016, 21014027, 21015031, 21015029, 21017048, 21019016, 21019020, 21019069, 21019073, 21021009, 21021010, 21021011, 21025042, 21041025, 21041026, 21050043, 21045044, 21046005, 21046045, 21046046, 21046047, 21046048, 21048061, 21050044, 21050045, 21050046, 21050047, 21050048, 21050049, 21050050, 21050052, 21050053, 21050054, 21050055, 21050056, 21050057, 21050058, 21052039, 21053060, 21053061, 21053062, 21053063, 21053064 }; // // Run 21 // 1. Au+Au 7.7 GeV (139) +// 2. Au+Au 17.3 GeV (26) +// 3. d+Au 200 GeV (2021) (14) // -const Int_t nBadRun_refmult_2021 = 139; +const Int_t nBadRun_refmult_2021 = 165; const Int_t badrun_refmult_2021[nBadRun_refmult_2021] = { // Au+Au 7.7 GeV - 22031054, 22033001, 22035002, 22038009, 22039010, 22039013, 22039028, 22042004, 22043046, 22043047, 22044003, 22044004, 22044005, 22046006, 22046007, 22046012, 22047008, 22048002, 22048007, 22048040, 22048042, 22049026, 22049027, 22049029, 22050003, 22050006, 22050016, 22050038, 22050040, 22050044, 22050045, 22051014, 22052032, 22052033, 22052035, 22052036, 22052048, 22053022, 22054007, 22054022, 22054028, 22054030, 22054042, 22055023, 22057010, 22058037, 22059005, 22061012, 22061015, 22062034, 22062035, 22062036, 22063014, 22064025, 22064038, 22065014, 22065015, 22067039, 22068012, 22068041, 22069030, 22069032, 22069033, 22069034, 22069040, 22070001, 22070002, 22070003, 22070004, 22070005, 22070006, 22070007, 22070008, 22070009, 22070010, 22070011, 22070012, 22070014, 22070040, 22070041, 22071036, 22074009, 22074042, 22076033, 22076034, 22077050, 22078016, 22078032, 22079027, 22084029, 22084035, 22085009, 22085021, 22086027, 22087027, 22088034, 22091018, 22091022, 22091025, 22093029, 22094046, 22095027, 22096003, 22096037, 22097016, 22097030, 22098054, 22099024, 22099042, 22100045, 22101016, 22101017, 22101018, 22101022, 22102034, 22103027, 22103032, 22104027, 22105030, 22106032, 22108050, 22109032, 22110025, 22111047, 22112021, 22113001, 22113029, 22114030, 22115004, 22115008, 22115019, 22115032, 22116007, 22116008, 22116025, 22116026, 22116030, 22117023, 22118058 + 22031054, 22033001, 22035002, 22038009, 22039010, 22039013, 22039028, 22042004, 22043046, 22043047, 22044003, 22044004, 22044005, 22046006, 22046007, 22046012, 22047008, 22048002, 22048007, 22048040, 22048042, 22049026, 22049027, 22049029, 22050003, 22050006, 22050016, 22050038, 22050040, 22050044, 22050045, 22051014, 22052032, 22052033, 22052035, 22052036, 22052048, 22053022, 22054007, 22054022, 22054028, 22054030, 22054042, 22055023, 22057010, 22058037, 22059005, 22061012, 22061015, 22062034, 22062035, 22062036, 22063014, 22064025, 22064038, 22065014, 22065015, 22067039, 22068012, 22068041, 22069030, 22069032, 22069033, 22069034, 22069040, 22070001, 22070002, 22070003, 22070004, 22070005, 22070006, 22070007, 22070008, 22070009, 22070010, 22070011, 22070012, 22070014, 22070040, 22070041, 22071036, 22074009, 22074042, 22076033, 22076034, 22077050, 22078016, 22078032, 22079027, 22084029, 22084035, 22085009, 22085021, 22086027, 22087027, 22088034, 22091018, 22091022, 22091025, 22093029, 22094046, 22095027, 22096003, 22096037, 22097016, 22097030, 22098054, 22099024, 22099042, 22100045, 22101016, 22101017, 22101018, 22101022, 22102034, 22103027, 22103032, 22104027, 22105030, 22106032, 22108050, 22109032, 22110025, 22111047, 22112021, 22113001, 22113029, 22114030, 22115004, 22115008, 22115019, 22115032, 22116007, 22116008, 22116025, 22116026, 22116030, 22117023, 22118058, + // Au+Au 17.3 GeV + 22145017, 22145020, 22145022, 22145027, 22145044, 22145047, 22146011, 22147001, 22148016, 22150030, 22151020, 22152012, 22152016, 22152017, 22152018, 22153004, 22154004, 22155032, 22155033, 22156024, 22156026, 22156031, 22157014, 22157020, 22157022, 22158012 + // d+Au 200 GeV (2021) + // 22183004, 22183005, 22183006, 22183007, 22184023, 22184001, 22185004, 22187018, 22184002, 22186006, 22186013, 22186014, 22187003, 22187007 }; #endif diff --git a/StRoot/StRefMultCorr/CentralityMaker.cxx b/StRoot/StRefMultCorr/CentralityMaker.cxx index b62033fa6e3..06c69a9af4d 100644 --- a/StRoot/StRefMultCorr/CentralityMaker.cxx +++ b/StRoot/StRefMultCorr/CentralityMaker.cxx @@ -47,6 +47,7 @@ CentralityMaker::CentralityMaker() { fRefMult3Corr = new StRefMultCorr("refmult3") ; fRefMultCorr_Isobar = new StRefMultCorr("refmult","Isobar") ; fRefMultCorrFxt = new StRefMultCorr("fxtmult"); + // fRefMult6Corr = new StRefMultCorr("refmult6"); // fTofTrayMultCorr = new StRefMultCorr("toftray") ; fgRefMultCorr = new StRefMultCorr("grefmult") ; fgRefMultCorr_Run14_AuAu200_VpdMB5_P16id = new StRefMultCorr("grefmult","Run14_AuAu200_VpdMB5","P16id") ; @@ -97,6 +98,13 @@ StRefMultCorr* CentralityMaker::getRefMultCorrFxt() { return fRefMultCorrFxt; } +/* +//_________________ +StRefMultCorr* CentralityMaker::getRefMult6Corr() { + return fRefMult6Corr; +} +*/ + /* //_________________ StRefMultCorr* CentralityMaker::getTofTrayMultCorr() { diff --git a/StRoot/StRefMultCorr/CentralityMaker.h b/StRoot/StRefMultCorr/CentralityMaker.h index 3c0515eefd3..fa7a2e5d20e 100644 --- a/StRoot/StRefMultCorr/CentralityMaker.h +++ b/StRoot/StRefMultCorr/CentralityMaker.h @@ -58,6 +58,7 @@ class CentralityMaker { StRefMultCorr* getRefMult3Corr() ; // For refmult3 StRefMultCorr* getRefMultCorr_Isobar() ; // For refmult StRefMultCorr* getRefMultCorrFxt(); // For fixed-target data + // StRefMultCorr* getRefMult6Corr() ; // For refmult6 // StRefMultCorr* getTofTrayMultCorr() ; // For TOF tray multiplicity StRefMultCorr* getgRefMultCorr() ; // For grefmult //Run14 AuAu200GeV StRefMultCorr* getgRefMultCorr_Run14_AuAu200_VpdMB5_P16id() ; @@ -80,6 +81,7 @@ class CentralityMaker { StRefMultCorr* fRefMult3Corr ; // refmult3-based centrality StRefMultCorr* fRefMultCorr_Isobar ; // refmult based centrality StRefMultCorr* fRefMultCorrFxt; // fxtMult-based centrality + // StRefMultCorr* fRefMult6Corr ; // refmult6-based centrality // StRefMultCorr* fTofTrayMultCorr ; // tofTrayMult-based centrality StRefMultCorr* fgRefMultCorr ; // grefmult-based centrality StRefMultCorr* fgRefMultCorr_Run14_AuAu200_VpdMB5_P16id ; diff --git a/StRoot/StRefMultCorr/Param.cxx b/StRoot/StRefMultCorr/Param.cxx index bd79a3cd77f..662cba57571 100644 --- a/StRoot/StRefMultCorr/Param.cxx +++ b/StRoot/StRefMultCorr/Param.cxx @@ -18,6 +18,7 @@ const string getParamX( const int x, const int y1, const int y2 ) { case 3: str = mParamStr_ref3[y1][y2]; break; case 4: str = mParamStr_ref4[y1][y2]; break; case 5: str = mParamStr_ref5[y1][y2]; break; + // case 6: str = mParamStr_ref6[y1][y2]; break; default: str = "0"; } return str; diff --git a/StRoot/StRefMultCorr/Param.h b/StRoot/StRefMultCorr/Param.h index e8dc4108782..964242ff910 100644 --- a/StRoot/StRefMultCorr/Param.h +++ b/StRoot/StRefMultCorr/Param.h @@ -82,7 +82,7 @@ const string mParamStr_gref[nID_gref][nSet_gref] = { //the order of them is important!!!!!!!!!!!!! // RefMult1 section //======================================================================================= -const int nID_ref1 = 42;//after add N more new group of parameters, need to update nID_ref1 += N +const int nID_ref1 = 45;//after add N more new group of parameters, need to update nID_ref1 += N const int nSet_ref1 = 6; const string mParamStr_ref1[nID_ref1][nSet_ref1] = { // mParameterIndex = 0 @@ -482,6 +482,36 @@ const string mParamStr_ref1[nID_ref1][nSet_ref1] = { "0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00", // Vz correction parameters (switched to new scheme, parameters defined near the shape corrections) "1.48905,-9610.65,622.081,4102.52,-1.06441e-05,0,7.59456e+07,7.24623e-11", // Trigger efficiency "0,0" // Luminosity correction + }, + //mParameterIndex = 42 + //Run20 Au+Au 9.2 GeV, TrigerID = 780020 + { + "2020:9.2:21055032,21245010:-145,145", // Year, energy, run start end, Vz range + "4,6,9,13,18,24,32,41,53,66,82,101,123,150,181,220", // Centrality definition + "82", // Normalization start + "0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00", // Vz correction parameters (switched to new scheme, parameters defined near the shape corrections) + "2.52397,-2.54059e+04,4.24061e+02,6.08075e+03,-3.71816e-05,0,1.47202e+08,3.05647e-10", // Trigger efficiency + "0,0" // Luminosity correction + }, + //mParameterIndex = 43 + //Run21 Au+Au 17.3 GeV, TrigerID = 870010 + { + "2021:17.3:22145017,22158019:-145,145", // Year, energy, run start end, Vz range + "6,9,13,17,24,32,42,54,69,86,107,131,160,194,234,285", // Centrality definition + "160", // Normalization start + "0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00", // Vz correction parameters (switched to new scheme, parameters defined near the shape corrections) + "1.07959,-9.10984e+02,6.09735e+02,1.60806e+03,-1.79622e-06,0,1.29834e+07,9.36931e-12", // Trigger efficiency + "0,0" // Luminosity correction + }, + //mParameterIndex = 44 + //Run20 Au+Au 11.5 GeV, TrigerID = 710000,710010,710020 + { + "2020:11.5:20342002,21055017:-145,145", // Year, energy, run start end, Vz range + "6,8,11,16,22,29,37,48,61,76,94,115,140,169,204,247", // Centrality definition + "140", // Normalization start + "0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00", // Vz correction parameters (switched to new scheme, parameters defined near the shape corrections) + "1.00998,-9.80804e+01,9.25955e+02,1.06393e+03,-2.17872e-07,0,1.69267e+07,-5.18469e-13", // Trigger efficiency + "0,0" // Luminosity correction } }; @@ -490,7 +520,7 @@ const string mParamStr_ref1[nID_ref1][nSet_ref1] = { //the order of them is important!!!!!!!!!!!!! // FXT section //======================================================================================= -const int nID_ref5 = 7;//after add N more new group of parameters, need to update nID_ref1 += N +const int nID_ref5 = 9;//after add N more new group of parameters, need to update nID_ref1 += N const int nSet_ref5 = 6; const string mParamStr_ref5[nID_ref5][nSet_ref5] = { // mParameterIndex = 0 @@ -568,7 +598,28 @@ const string mParamStr_ref5[nID_ref5][nSet_ref5] = { "0.,0.,0.,0.,0.,0.,0.,0.", // Vz correction parameters (switched to new scheme, parameters defined near the shape corrections) "1.175,-0.0760,0.0547,-0.0129,-0.0565,0,0.0802,0.00470", // Trigger efficiency "0.,0." // Luminosity correction - } + }, + // mParameterIndex = 7 + // Run 20 Au+Au 13.5 GeV (sqrt(s_NN)=5.2 GeV), Trigger ID = 750000 + { + "2020:13.5:21033026,21034013:198,202", // Year, energy, run start end, Vz range + "7,11,15,21,28,37,47,60,76,94,114,138,166,197,233,277", // Multiplicity values for the centrality classes + "166", // Normalization start (of Glauber to the data) + "0.,0.,0.,0.,0.,0.,0.,0.", // Vz correction parameters (switched to new scheme, parameters defined near the shape corrections) + "1.23398,-5.76012e-02,2.21097e-02,-4.25316e-03,-1.16790e-01,0,2.18457e-02,1.42031e-02", // Trigger efficiency + "1.076e+02,-3.49714e-06" // Luminosity correction + }, + + // mParameterIndex = 8 + // Run 20 Au+Au 19.5 GeV (sqrt(s_NN)=6.2 GeV), Trigger ID = 760000 + { + "2020:19.5:21032039,21033017:198,202", // Year, energy, run start end, Vz range + "8,12,17,23,31,41,53,68,85,104,127,153,182,215,253,298", // Multiplicity values for the centrality classes + "250", // Normalization start (of Glauber to the data) + "0.,0.,0.,0.,0.,0.,0.,0.", // Vz correction parameters (switched to new scheme, parameters defined near the shape corrections) + "1.21266,-7.04815e-02,2.33864e-02,1.83778e-03,-9.78458e-02,0,2.79708e-02,1.10165e-02", // Trigger efficiency + "1.14390e+02,-1.39687e-06" // Luminosity correction + } }; @@ -936,6 +987,28 @@ const string mParamStr_ref4[nID_ref4][nSet_ref4] = { } }; +/* +//======================================================================================= +//if you want to add new parameters, please always add after the current parameters, do not insert between them +//the order of them is important!!!!!!!!!!!!! +// RefMutl6 section +//======================================================================================= +const int nID_ref6 = 1;//after add N more new group of parameters, need to update nID_ref6 += N +const int nSet_ref6 = 6; +const string mParamStr_ref6[nID_ref6][nSet_ref6] = { + // mParameterIndex = 0 + // Run 21 d+Au 200 GeV, Trigger ID = 880011, 880021 + { + "2021:200:22183004,22188007:-45,55", // Year, energy, run start end, Vz range + "9,10,12,14,16,19,21,23,26,29,32,35,39,43,48,55", // Multiplicity values for the centrality classes + "55", // Normalization start (of Glauber to the data) + "0.,0.,0.,0.,0.,0.,0.,0.", // Vz correction parameters (switched to new scheme, parameters defined near the shape corrections) + "6.727229658021034,-1.0726163216722204,0.08388851202205376,-0.003455924766669545,7.798237542461326e-05,0,-9.068080164664017e-07,4.237430888586592e-09", // Trigger efficiency + "0.,0." // Luminosity correction + } +}; +*/ + //================================================================= //put parameters for the Refmult Shape Reweight between different Vz, to correct the Online Vz resolution effects //this will correct the Refmult shape in all Vz bins to be same as the one in the center |Vz|<10cm @@ -1851,4 +1924,469 @@ const double auau7_run21_shapeWeightArray[auau7_run21_nVzBins][auau7_run21_refMu { 0.584305, 0.707641, 0.954208, 1.1075, 1.13586, 1.13671, 1.12784, 1.10717, 1.0979, 1.09131, 1.08669, 1.07318, 1.07059, 1.06172, 1.05319, 1.033, 1.03618, 1.04292, 1.02063, 1.00397, 1.02383, 1.02178, 1.01414, 1.00764, 0.993816, 0.996854, 0.990703, 0.996461, 1.00178, 1.00833, 0.994341, 1.00423, 0.990713, 0.986344, 1.00433, 0.986877, 0.998233, 0.993712, 0.987163, 0.982553, 0.989329, 0.986321, 1.00333, 1.0009, 1.0067, 1.00442, 0.992049, 0.995361, 0.979298, 0.99859, 0.985847, 0.988052, 1.00501, 0.983745, 0.996952, 1.00024, 1.00812, 1.0116, 1.00133, 1.0141, 1.01733, 1.002, 0.979737, 0.998044, 1.02729, 0.990823, 0.995794, 0.995699, 1.00743, 1.01564, 1.02078, 0.995558, 0.974699, 1.00554, 1.01374, 1.00823, 1.02501, 1.00484, 1.0094, 1.00376, 1.01949, 1.03485, 1.00717, 1.00591, 1.00514, 1.02774, 1.02411, 0.989064, 1.00177, 1.00883, 1.03616, 1.01043, 1.02159, 1.02072, 1.00211, 1.03885, 1.02106, 1.00586, 1.02594, 1.04158, 1.03539, 1.02513, 1.01921, 1.00267, 1.02141, 1.02736, 1.03913, 1.01873, 1.021, 1.02061, 1.01508, 1.00995, 1.05148, 1.02918, 1.05084, 1.03845, 1.00588, 1.008, 1.01683, 1.01025, 1.02292, 1.03249, 1.03984, 1.06953, 1.01725, 1.0534, 1.01661, 1.03571, 1.04796, 1.04494, 1.03394, 1.04418, 1.04094, 1.06977, 1.05958, 1.04039, 1.03482, 1.01817, 1.0503, 1.07638, 1.06114, 1.04315, 1.04122, 1.06634, 1.05827, 1.06954, 1.02073, 1.05869, 1.05814, 1.0473, 1.04639, 1.0222, 1.06955, 1.06336, 1.07405, 1.07664, 1.05636, 1.0741, 1.04221, 1.03335, 1.09531, 1.06063, 1.05553, 1.05243, 1.07942, 1.08471, 1.0632, 1.06289, 1.06736, 1.04697, 1.06325, 1.08955, 1.04552, 1.07974, 1.0495, 1.04288, 1.06405, 1.10563, 1.06637, 1.09263, 1.06927, 1.07772, 1.10833, 1.08101, 1.05355, 1.06646, 1.10081, 1.06049, 1.08268, 1.08336, 1.03762, 1.09774, 1.09555, 1.07621, 1.09014, 1.11704, 1.09767, 1.04166, 1.0855, 1.05652, 1.09736, 1.09997, 1.08798, 1.08527, 1.08387, 1.09453, 1.09609, 1.08803, 1.10748, 1.1211, 1.10249, 1.0765, 1.06746, 1.1205, 1.10365, 1.08817, 1.0936, 1.07986, 1.10906, 1.08941, 1.10921, 1.13132, 1.07153, 1.09611, 1.11427, 1.08418, 1.09875, 1.08774, 1.09713, 1.05271, 1.10641, 1.07304, 1.05089, 1.09758, 1.06906, 1.05393, 1.15185, 1.08072, 1.10717, 1.10387, 1.06122, 1.08088, 1.10687, 1.11148, 1.12916, 1.07455, 1.03946, 1.07605, 1.09198, 1.08501, 1.11638, 1.08463, 1.13484, 1.11406, 1.11877, 1.0891, 1.14376, 1.09572, 1.16778, 1.03607, 1.09038, 1.16365, 1.06616, 1.13173, 1.03185, 1.0999, 1.05896, 1.04503, 1.07764, 1.13045, 1.19567, 1.06851, 1.01575, 0.96808, 1.04988, 1.17023, 1.03248, 1.37241, 1.24219, 0.91479, 1.02443, 1.06399, 1.06183, 1.18627, 0.926766, 1.18908, 1.18908, 1.13788, 1.01342, 0.972258, 1.52013, 1.26349, 1.71975, 0.713259, 1.40388, 0.994997, 0.958145, 1.31028, 0.701938, 0.804038, 1.47407, 1.03185, 0.644905, 2.2111, 1.22839, 0.491356, 0.368517, 0, 3.68517, 2.2111, 0.737035, 0, 0.368517, 1, 1, 0, 1, 1, 0.737035, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1. } }; +//------------------------------------------------ +//------------- Au+Au 9.2 GeV 2020 -------------- +//------------------------------------------------ + +// Number of refMult bins +const int auau9_run20_refMultBins = 750; +// Number of z vertex bins +const int auau9_run20_nVzBins = 29; +// Ranges of vz bins +const double auau9_run20_vzRangeLimits[auau9_run20_nVzBins][2] = { + {-145., -135.}, + {-135., -125.}, + {-125., -115.}, + {-115., -105.}, + {-105., -95.}, + {-95., -85.}, + {-85., -75.}, + {-75., -65.}, + {-65., -55.}, + {-55., -45.}, + {-45., -35.}, + {-35., -25.}, + {-25., -15.}, + {-15., -5.}, + {-5., 5.}, + { 5., 15.}, + { 15., 25.}, + { 25., 35.}, + { 35., 45.}, + { 45., 55.}, + { 55., 65.}, + { 65., 75.}, + { 75., 85.}, + { 85., 95.}, + { 95., 105.}, + { 105., 115.}, + { 115., 125.}, + { 125., 135.}, + { 135., 145.} +}; +// Values of vz correction (refMultAtCenter/refMultElsewhere) for triggerID = 780020 +const double auau9_trig2_run20_vzCorr[auau9_run20_nVzBins] = { + 1.00894, // (-145,-135)cm + 1.00431, // (-135,-125)cm + 1.00199, // (-125,-115)cm + 1.00086, // (-115,-105)cm + 1.00139, // (-105,-95)cm + 1.00079, // (-95,-85)cm + 1.00023, // (-85,-75)cm + 1.00587, // (-75,-65)cm + 1.01, // (-65,-55)cm + 1.007510, // (-55,-45)cm + 0.999888, // (-45,-35)cm + 1.001180, // (-35,-25)cm + 1.003010, // (-25,-15)cm + 1.002370, // (-15,-5)cm + 1.0, // (-5,5)cm + 0.997929, // (5,15)cm + 0.995314, // (15,25)cm + 0.990985, // (25,35)cm + 0.987310, // (35,45)cm + 0.993973, // (45,55)cm + 0.994798, // (55,65)cm + 0.989476, // (65,75)cm + 0.985773, // (75,85)cm + 0.986552, // (85,95)cm + 0.986979, // (95,105)cm + 0.989481, // (105,115)cm + 0.993353, // (115,125)cm + 1.000880, // (125,135)cm + 1.015310 // (135,145)cm +}; + +// Shape correction values for triggerID = 780020 +const double auau9_trig2_run20_shapeWeightArray[auau9_run20_nVzBins][auau9_run20_refMultBins] = { + // (-145,-135)cm + { 0.517832,0.584562,0.920866,1.12725,1.18209,1.16525,1.16964,1.16444,1.14732,1.13012,1.1237,1.10123,1.08923,1.09106,1.07124,1.08083,1.06842,1.04475,1.05525,1.04524,1.03814,1.04308,1.03793,1.03088,1.03638,1.03117,1.03702,1.03708,1.02916,1.02593,1.02865,1.02325,1.02964,1.0255,1.01286,1.01117,1.03018,1.0168,1.03147,1.02779,1.01656,1.0247,1.02436,1.01007,1.00737,1.02082,1.01314,1.02266,1.01753,1.01343,1.02423,1.03166,1.02131,1.03466,1.03542,1.02468,1.01869,1.023,1.01343,1.03226,1.03173,1.02355,1.02703,1.02485,1.02764,1.02128,1.02846,1.01841,1.01825,1.02815,1.01501,1.02241,1.02001,1.02599,1.0163,1.01759,1.0168,1.01127,1.0273,1.02319,1.0304,1.01699,1.01956,1.02293,1.02121,1.01842,1.0245,1.00268,1.00046,1.01197,1.01955,1.02981,1.01562,1.0347,1.0049,1.01463,1.02911,1.01201,1.03154,1.02101,1.02935,1.01639,1.03025,1.0274,1.02586,1.02111,1.01782,1.02175,1.0139,1.02716,1.02146,1.01809,1.02202,1.01784,1.02753,1.0129,1.02104,1.00506,1.0308,1.01231,1.02753,1.01831,1.02006,1.02511,1.03258,1.01777,1.0341,1.01788,1.03582,1.02019,1.0293,1.02197,1.03818,1.02472,1.02641,1.03431,1.00456,1.01784,1.02875,1.02864,1.02224,1.02633,1.02696,1.03925,1.01896,1.03414,1.02682,1.03433,1.02795,1.03131,1.01263,1.01658,1.0198,1.05064,1.03463,1.03008,1.04848,1.0389,1.03863,1.02666,1.00656,0.999056,1.02143,1.0205,1.02537,1.01282,1.02754,1.04818,1.05852,1.01114,1.01746,1.04753,1.00834,1.02346,1.03897,1.02491,1.02235,1.01703,1.02656,1.05968,1.01788,1.04472,1.02236,1.04751,1.02548,1.03177,1.03897,1.03907,1.04416,1.04103,1.03323,1.02082,1.02901,1.03535,1.03878,1.04167,1.02133,1.03705,1.03889,1.04327,1.04863,1.03467,1.01064,1.0216,1.01615,1.03289,1.02898,1.0245,1.01922,1.0249,1.03152,1.03537,1.07546,1.04121,1.02437,1.06201,1.03396,1.05167,1.01284,1.05926,1.03395,1.03767,1.0566,1.05198,1.01619,1.06154,1.04037,1.04436,1.05844,1.04,1.03308,1.05326,1.03896,1.04039,1.0466,1.06528,1.0539,1.03453,1.06777,1.04339,1.07356,1.06173,1.06889,1.05298,1.05322,1.05949,1.06722,1.04079,1.06623,1.04155,1.06224,1.01205,1.05853,1.06805,1.07383,1.04019,1.06498,1.06996,1.05492,1.05818,1.07253,1.03488,1.08995,1.08089,1.05654,1.087,1.03304,1.07389,1.06368,1.05207,1.06094,1.03716,1.04616,1.04854,1.02652,1.03449,1.03407,1.0087,1.03347,0.947477,0.965023,1.01748,1.00135,0.976459,1.00429,0.991429,0.994015,0.963608,0.993288,1.00008,1.01052,0.973997,0.957952,0.968555,0.945127,1.00185,0.95064,0.978714,0.896338,0.976173,1.03644,1.0259,0.951727,0.979671,0.914628,0.91738,0.89236,0.984879,0.773052,0.908578,0.860327,1.01249,1.22534,1.19134,1.12403,1.05884,0.792362,0.782531,0.862942,0.903392,0.938122,0.739664,0.7341,0.871239,1.09829,1.00677,0.88092,1.02965,1.18654,0.755074,1.25846,2.07645,1.00677,0.503383,1.51015,0.755074,5.28552,0.377537,1,3.77537,1.51015,0.377537,0.755074,1,1,1,1,0.755074,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, + // (-135,-125)cm + { 0.553454,0.615406,0.923321,1.11624,1.15607,1.14451,1.15068,1.13045,1.1248,1.11337,1.10522,1.08604,1.07263,1.07317,1.06572,1.06267,1.05441,1.03436,1.04239,1.04529,1.03525,1.02971,1.02808,1.02366,1.03177,1.02567,1.03133,1.02996,1.02581,1.02431,1.01652,1.0277,1.03221,1.02213,1.02703,1.00905,1.02619,1.01182,1.01667,1.02173,1.02104,1.03068,1.02689,1.0109,1.02447,1.01722,1.01337,1.0205,1.02714,1.0054,1.02996,1.03991,1.02338,1.00981,1.02586,1.02333,1.01944,1.0129,1.02159,1.03232,1.03557,1.01322,1.02572,1.01946,1.02557,1.02435,1.02112,1.02153,1.03136,1.02109,1.00379,1.03064,1.01687,1.00763,1.01446,1.02365,1.01797,1.01845,1.01795,1.0246,1.02077,1.02529,1.02728,1.02158,1.01374,1.02048,1.03287,1.01329,1.00916,1.02906,1.02172,1.02183,1.01513,1.01798,1.00048,1.03413,1.04255,1.00161,1.02396,1.0159,1.01275,1.016,1.02769,1.03122,1.02844,1.03365,1.03994,1.04052,1.01765,1.03053,1.02672,1.01512,1.00699,1.0286,1.0286,1.03005,1.03058,1.01179,1.02455,1.00872,1.01397,1.02031,1.01909,1.00784,1.01932,1.02323,1.03102,1.02178,1.02793,1.01117,1.03181,1.01665,1.02351,1.02699,1.03467,1.01781,1.00991,1.01264,1.02019,1.00016,1.01379,1.01361,1.02056,1.03725,1.02183,1.01974,1.02258,1.03136,1.03605,1.03399,0.996733,1.02144,1.0224,1.02325,1.03722,1.02214,1.02568,1.04457,1.01195,1.03571,1.0191,1.01462,1.01832,1.01064,1.02401,1.01852,1.02582,1.04137,1.03861,1.02586,1.02522,1.03531,1.02104,1.03788,1.03509,1.03773,1.03779,1.01383,1.01386,1.05476,1.00903,1.05427,1.01796,1.04304,1.02248,1.04134,1.05487,1.04,1.0393,1.01016,1.02317,1.01818,1.01478,1.03478,1.03547,1.05691,1.00435,1.04639,1.0452,1.02252,1.04041,1.03771,1.01576,1.0223,0.999596,1.03446,1.0286,1.02456,1.02834,1.00797,1.0397,1.04722,1.04362,1.05258,1.02709,1.04859,1.02131,1.04547,1.00366,1.03664,1.02336,1.0172,1.06228,1.02983,1.0195,1.0567,1.02677,1.03287,1.04536,1.04402,1.02613,1.04777,1.04026,1.03977,1.01641,1.06735,1.04209,1.0704,1.04162,1.04562,1.04935,1.03485,1.04679,1.04838,1.05584,1.05618,1.03808,1.02914,1.04763,1.04122,1.06094,1.03158,1.03573,1.0698,1.04651,1.07457,1.02721,1.08326,1.04252,1.0288,1.04367,1.0641,1.03359,1.05201,1.01699,1.00871,1.01177,1.01007,1.04767,1.00459,1.01246,1.04083,1.02223,1.00724,0.985607,1.03296,0.962487,0.989927,0.964712,0.969332,0.950069,0.979984,0.943675,0.907339,0.970914,0.968317,0.890469,0.895413,0.956079,0.926804,0.955005,0.95128,0.858969,0.876326,0.900873,0.90034,0.918178,0.936623,0.828005,0.921108,0.908311,0.880742,0.851296,0.869645,0.839393,0.944968,0.767749,0.880627,0.825074,0.667904,0.79412,0.794384,0.830288,0.737929,0.783912,1.02518,0.678194,0.489392,0.552927,0.945054,0.548911,0.592422,0.691159,0.504189,0.631917,0.789896,0.425329,0.493685,0.511109,0.740528,0.658247,0.965429,0.902738,0.175532,0.526597,0.789896,5.52927,0.789896,0.526597,1.31649,1.57979,1,1,1,0.789896,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, + // (-125,-115)cm + { 0.622149,0.663028,0.922513,1.08994,1.13382,1.11857,1.11418,1.10898,1.10092,1.08753,1.0903,1.07204,1.05897,1.05761,1.05086,1.04384,1.04397,1.02954,1.03589,1.02621,1.02516,1.03165,1.01667,1.01617,1.03527,1.02202,1.02776,1.03637,1.01947,1.01509,1.00677,1.01912,1.02506,1.01989,1.00648,1.00738,1.03481,1.00869,1.0198,1.01554,1.01516,1.02176,1.00973,1.00428,1.00616,1.01922,1.0053,1.01349,1.01506,1.01205,1.01704,1.02328,1.01438,1.0079,1.01725,1.01515,1.01272,1.01262,1.00823,1.03362,1.01984,1.01791,1.02118,1.01783,1.0233,1.01599,1.02082,1.01898,1.01984,1.02664,1.00507,1.0141,1.02151,1.00649,1.00549,1.0202,1.01246,1.0154,1.00502,1.02046,1.02938,1.00212,1.0187,1.019,1.01686,1.024,1.01253,1.00523,1.00283,1.0085,1.01945,1.02571,1.01626,1.03094,1.00961,1.01676,1.01393,1.01339,1.02685,1.00822,1.02417,1.00895,1.01777,1.02497,1.0241,1.01806,1.02145,1.02817,1.01693,1.02414,1.02713,1.02724,1.0102,1.01758,1.02342,1.01368,1.01082,1.00113,1.02777,1.00762,1.0103,1.02734,1.01764,1.00738,1.01825,1.02016,1.01953,1.00541,1.01481,1.01198,1.01221,1.03365,1.02279,1.01383,1.02244,1.01907,1.01168,1.00609,1.02101,1.00478,1.02833,1.01174,1.01408,1.02108,1.0234,1.02356,1.01321,1.01734,1.02032,1.02153,1.02108,1.01816,1.03166,1.02659,1.02968,1.01436,1.02404,1.01292,1.02186,1.04052,1.01517,0.997009,1.00635,0.994956,1.01293,1.01477,1.03496,1.0323,1.04248,1.02125,1.03319,1.03132,1.00286,1.02026,1.03136,1.02648,1.0072,1.01043,1.0263,1.03616,0.996937,1.0328,1.0188,1.02016,1.01195,1.02894,1.03017,1.03758,1.02592,1.02094,1.04416,1.0217,1.00972,1.04438,1.03396,1.03208,1.01386,1.0362,1.03438,1.02498,1.02022,1.02115,1.01135,1.03146,0.997652,1.02543,1.00033,1.01361,1.041,1.00848,1.0108,1.00341,1.0381,1.02944,1.01463,1.02643,1.0296,1.01478,1.03835,1.01478,1.02985,1.03054,1.02578,1.03066,1.02203,1.04411,1.00745,1.01234,1.03359,1.02559,1.01386,1.03739,1.00867,1.04165,1.01805,1.0361,1.00456,1.03571,1.05098,1.04147,1.05833,1.05647,1.04481,1.05592,1.02721,1.05837,1.06691,1.02578,1.0361,1.02767,1.06871,1.02291,1.03981,1.02769,1.03399,1.02977,1.04616,1.03312,1.01794,1.01564,1.02459,1.03631,1.04371,1.01931,1.00015,1.01753,1.01371,1.04429,1.01048,1.00669,1.00573,0.973511,1.00199,0.998202,0.990581,0.973258,0.956458,0.973539,0.965019,0.951754,0.93768,0.941257,0.986466,0.928655,0.903295,0.943106,0.943352,0.891446,0.968243,0.954738,0.926864,0.898422,0.880862,0.886645,0.923278,0.902754,0.89403,0.853416,0.774784,0.82714,0.831451,0.822687,0.822853,0.785244,0.792058,0.825482,0.734183,0.924956,0.767689,0.768605,0.731729,0.8031,1.03354,0.777449,0.815027,0.808003,0.640424,0.53806,0.574874,0.873392,0.570699,0.743773,0.611568,0.572964,0.77294,0.821249,0.605131,0.586606,0.602249,0.724632,0.513281,0.694903,0.656999,0.16425,0.1825,0.351964,0.958124,0.821249,0.3285,2.05312,1,0.410625,0.821249,1,1,1,1,0.410625,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, + // (-115,-105)cm + { 0.653861,0.689462,0.935064,1.07768,1.11159,1.09469,1.09921,1.08723,1.08055,1.06698,1.07062,1.06105,1.05099,1.05274,1.04617,1.04859,1.04638,1.02699,1.03261,1.03326,1.01948,1.02625,1.01735,1.01402,1.02168,1.01149,1.02981,1.02874,1.01431,1.02461,1.01306,1.00724,1.02199,1.01241,1.00946,1.00178,1.02708,1.01256,1.01457,1.01373,1.01146,1.02522,1.00995,1.00784,1.00768,1.01393,1.01812,1.02076,1.0151,1.00642,1.01036,1.03697,1.01787,1.02168,1.01634,1.01185,1.01371,1.01626,1.00993,1.03406,1.0135,1.01538,1.02243,1.0026,1.01592,1.01447,1.02332,1.02113,0.998492,1.0255,1.00706,1.01872,1.0235,1.00979,1.00934,1.01159,1.01169,0.992655,1.01062,1.02427,1.03594,1.00324,1.02367,1.01488,1.02196,1.01234,1.01969,1.01297,1.00397,1.00823,1.02047,1.0251,1.00464,1.01975,0.99802,1.00553,1.0244,1.01031,1.02122,1.00602,1.01978,1.00032,1.02934,1.02521,1.01265,1.00569,1.0248,1.01745,1.0007,1.0189,1.00812,1.01194,0.997649,1.02114,1.01591,1.01571,1.03032,1.01002,1.01745,1.01551,1.01359,1.00771,1.02849,1.02431,1.021,1.01792,1.01015,1.01169,1.02755,1.00115,1.02718,1.00925,1.0151,1.0168,1.01414,1.00918,1.01239,1.00301,1.02519,1.00306,1.02969,1.00312,1.00859,1.02168,1.02031,1.02509,1.01013,1.03377,1.01993,1.01362,0.993299,1.01332,1.01365,1.01631,1.02823,1.02286,1.01114,1.02408,1.02366,1.0162,1.01187,1.00073,1.011,1.00441,1.02803,1.00962,1.00999,1.01505,1.03197,1.0111,1.03465,1.02591,1.01957,1.03044,1.01946,1.01921,1.01603,0.998525,1.00828,1.04543,1.00423,1.03643,1.03208,1.02749,1.01128,1.03185,1.03685,1.02665,1.01673,1.02467,1.02657,1.02781,1.00397,1.04253,1.02735,1.03723,0.99281,1.02473,1.00484,1.02776,1.01079,1.01542,1.00911,1.02362,0.999371,1.01313,1.02192,1.01009,1.01532,1.01025,1.0206,1.03335,1.04737,1.03501,1.02918,1.02334,1.02079,1.03515,1.00463,1.03877,1.02062,1.02077,1.02643,1.01665,0.999245,1.0462,1.01164,1.02515,1.03178,1.02862,1.03181,1.02121,0.997214,1.02768,1.02355,1.0297,1.00554,1.04524,1.0514,1.02377,1.05372,1.05247,1.03084,1.04222,1.05012,1.07518,1.04587,1.0588,1.05014,1.01733,1.04386,1.01291,1.03772,1.0586,1.049,1.04349,1.03207,1.02772,1.03304,1.0152,1.01888,1.04104,1.05016,1.03256,0.996337,1.01572,1.01407,1.00196,1.04742,1.00942,0.998903,0.991182,0.977623,0.987043,0.974763,1.01599,0.962442,0.989462,1.00252,0.916919,0.918388,0.912166,0.934653,0.86845,0.905178,0.930775,0.901515,0.907316,0.960059,0.929722,0.92956,0.861491,0.817701,0.817117,0.881605,0.885894,0.883976,0.828462,0.876073,0.868949,0.892557,0.842547,0.854523,0.852857,0.890033,0.901394,0.743272,0.87134,0.687616,0.712885,0.682286,0.698869,0.843736,0.829491,0.638425,0.788247,0.647258,0.491039,0.582439,0.816306,0.613459,0.758095,0.648913,0.544377,0.62026,0.974694,0.411724,0.752521,0.446735,0.556211,0.501681,0.721649,0.852857,0.170571,0.243674,0.319822,0.852857,0.213214,0.341143,1.06607,1.13714,0.852857,0.426429,1,0.213214,1,1,0.852857,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, + // (-105,-95)cm + { 0.687984,0.71876,0.950024,1.06892,1.09749,1.08394,1.08628,1.07845,1.06462,1.06484,1.06336,1.05136,1.03688,1.0495,1.03794,1.03374,1.04297,1.01927,1.02072,1.02343,1.01687,1.01583,1.01172,1.01195,1.01519,1.00912,1.01205,1.0224,1.01887,1.01768,1.00974,1.01278,1.02927,1.01486,1.00578,1.01502,1.02764,1.00948,1.01165,1.00571,1.01319,1.0208,1.01485,1.00891,1.01198,1.00179,1.00119,1.00929,1.01433,1.01314,1.01812,1.02382,1.02031,1.01284,1.01314,1.00925,1.0072,1.00779,1.01906,1.02441,1.01594,0.99724,1.02189,1.02173,1.03195,1.01712,1.01031,1.00554,1.00043,1.01772,1.01525,1.02096,1.0191,1.01365,1.00741,1.01002,1.00873,1.00865,1.00188,1.02192,1.0236,1.01312,1.02319,1.01522,1.00504,1.01466,1.00845,1.01143,1.00056,0.992513,1.02038,1.01754,1.00872,1.029,0.985028,1.00431,1.0147,1.01523,1.02102,1.0158,1.01584,1.0054,1.02442,1.02359,1.01023,1.01572,1.01742,1.03079,1.01071,1.03293,1.02728,1.01345,1.00325,1.01745,1.02427,0.998728,1.01996,1.00646,1.01641,1.00639,1.00922,1.003,1.02057,1.00902,1.01232,1.02544,1.01004,1.00193,1.01025,0.996335,1.01007,0.987924,1.02344,1.01628,1.02369,1.01817,1.00441,1.00174,1.01133,1.0082,1.02265,1.0151,1.00888,1.02958,1.01652,1.0027,1.0058,1.02908,1.01236,1.02067,0.997202,1.01919,1.00948,1.0124,1.00075,1.02378,1.02208,1.03394,1.03003,1.02218,1.00252,0.996872,1.00821,0.999054,1.03223,1.02119,1.02227,1.02706,1.02406,1.0075,1.03355,1.02304,0.999952,1.02722,1.00417,1.03402,1.01417,1.00719,1.00662,1.03672,0.997378,1.01157,1.01345,1.01198,0.999918,1.02676,1.02797,1.01609,1.01254,1.01404,1.0216,1.03798,1.00254,1.03282,1.03528,1.02611,0.988195,1.02573,1.00574,1.02333,1.03069,1.00275,1.01168,1.00514,0.997309,1.00794,1.00194,1.02076,1.01535,1.00762,1.00123,1.00469,1.02335,1.04618,1.01037,1.01777,1.01092,1.03444,0.98992,1.02783,1.00552,1.03118,1.04097,1.03083,0.981656,1.05325,1.01587,1.00643,1.014,1.03249,1.00534,1.02952,1.00283,1.02745,1.00976,1.02707,1.00889,1.02847,1.02306,1.0273,1.04701,1.0264,1.041,1.0477,1.05222,1.04925,1.06875,1.01548,1.04609,1.01891,1.04791,1.03164,1.03465,1.045,1.03669,1.03608,1.02657,1.04022,1.02454,1.01895,1.0298,1.03422,1.01035,1.01173,1.0291,1.01353,0.993407,0.992379,1.04005,0.991185,0.99731,0.97559,0.990465,0.992295,0.972223,0.983627,0.94232,0.97531,0.952409,0.906273,0.920852,0.914379,0.939483,0.918784,0.89241,0.964206,0.903354,0.866784,0.909504,0.872878,0.898794,0.893079,0.864897,0.872269,0.87399,0.852534,0.853446,0.890835,0.778209,0.811793,0.845867,0.828453,0.788227,0.812527,0.793776,0.888044,0.822832,0.79226,0.811176,0.691015,0.683523,0.854523,0.809137,0.708789,0.75154,0.733237,0.631064,0.437904,0.537777,0.704688,0.489501,0.683992,0.498744,0.60238,0.673135,0.517165,0.294497,0.509706,0.694171,0.60238,0.679608,0.607399,0.785324,0.220873,0.220873,0.378639,6.18443,0.176698,0.88349,0.736242,1.76698,0.294497,0.126213,1,1,1,1,0.441745,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, + // (-95,-85)cm + { 0.717455,0.748545,0.958051,1.06144,1.08173,1.06383,1.06596,1.06613,1.05462,1.0518,1.04899,1.04886,1.03366,1.03662,1.03243,1.03604,1.02504,1.00929,1.01793,1.02075,1.01645,1.01746,1.01054,1.00478,1.01288,1.0135,1.01361,1.0221,1.01866,1.01826,1.01224,1.0049,1.02303,1.01373,1.01223,1.00734,1.01935,1.00603,1.01584,1.01143,1.01136,1.01117,1.01385,1.0014,1.00246,1.01077,1.00633,1.00989,1.00766,1.00564,1.02005,1.02579,1.01533,1.00851,1.01582,1.0136,1.0033,1.00997,1.0152,1.02448,1.01562,1.01477,1.01665,1.00692,1.02169,1.01771,1.01559,1.01928,1.01271,1.01309,1,1.01326,1.01952,1.0018,1.00076,1.0112,1.01148,1.00292,1.00977,1.02258,1.02155,1.00643,1.01248,1.02549,1.01267,1.0131,1.01023,1.00497,0.998737,0.99302,1.01256,1.02375,1.01712,1.01064,1.01893,1.01689,1.00978,1.00226,1.0173,1.00544,1.01118,0.99868,1.01327,1.0133,1.00811,1.00338,1.01354,1.01359,0.996103,1.01238,1.02578,1.01876,0.992731,1.00823,1.00779,1.01194,1.00746,1.01387,1.0062,1.01277,1.00393,1.02069,1.01113,1.00721,0.99999,1.00837,1.00347,1.01234,1.01795,1.00297,1.02158,1.01624,1.02067,1.00124,1.02364,1.01819,0.997384,1.01276,1.0022,0.995084,1.01695,1.00069,1.01609,1.01482,1.0013,0.995162,1.00952,1.02742,1.01732,1.0277,0.998476,0.988662,1.01288,1.02114,1.01862,1.01734,1.02009,1.00888,1.01546,1.00022,0.998636,0.998658,1.0009,1.00069,1.02004,1.00763,1.01678,1.03728,1.04921,1.02237,1.02139,1.01478,0.999921,1.00294,1.03315,1.02615,1.01086,0.99769,1.00861,1.05448,1.00973,1.02269,1.00924,1.02121,1.00301,1.03258,1.0216,1.03284,1.01883,1.01305,1.01106,1.01117,1.01216,1.00726,1.02416,1.05874,0.996541,1.01195,0.990475,1.0223,1.0332,1.00064,1.02252,1.01425,1.03007,1.02321,1.01674,1.01329,1.032,1.01681,1.02079,1.01916,1.03954,1.03176,1.02386,1.0293,0.995516,1.0128,1.01346,1.00696,1.01977,1.02996,1.0185,1.01706,0.999321,1.02419,1.0126,0.992025,1.00802,1.03452,0.99686,1.00954,0.99455,1.02953,1.01721,1.03251,1.02514,1.0543,1.02687,1.02517,1.02796,1.01081,1.0319,1.04445,1.05029,1.00676,1.04667,0.993084,1.03899,1.01103,1.02931,1.01564,1.0201,1.07342,1.03535,1.04114,1.03563,1.02782,0.967687,1.06988,1.03313,1.02297,1.05634,1.03024,1.01034,1.01873,1.02482,1.03961,1.03772,1.0081,0.995567,0.964782,0.972144,1.02017,0.997279,1.00321,0.958896,0.962828,0.944746,0.924097,0.890556,0.947566,0.998425,0.880542,0.959813,0.955324,0.925768,0.866117,0.93193,0.928356,0.921077,0.917997,0.881934,0.855654,0.894412,0.880325,0.831813,0.922289,0.776119,0.853094,0.896304,0.844952,0.82608,0.843299,0.772813,0.882025,0.785538,0.837801,0.770977,0.773652,0.682662,0.810665,0.834722,0.684775,0.765364,0.950376,0.73086,0.436565,0.593487,0.726971,0.533835,0.729141,0.664581,0.546855,0.767516,0.683569,0.455713,0.621427,0.477413,0.719547,0.828569,0.626605,0.810156,0.202539,0.182285,0.303809,0.911426,0.182285,0.455713,2.27856,1.21523,0.303809,1,1,0.911426,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, + // (-85,-75)cm + { 0.710504,0.763641,0.967287,1.05481,1.06933,1.05179,1.06298,1.05267,1.04316,1.03623,1.04907,1.04088,1.03144,1.03112,1.03556,1.03459,1.02844,1.01145,1.01939,1.02015,1.01335,1.02122,1.01004,1.01081,1.0183,1.01629,1.02273,1.02383,1.01602,1.01593,1.01732,1.01257,1.02189,1.01264,1.00493,1.00352,1.01948,1.0104,1.01142,1.01137,1.00191,1.01524,1.01456,1.00832,1.00168,1.01059,1.00661,1.01544,1.01237,1.0075,1.01403,1.02606,1.01861,1.01672,1.02258,1.00816,1.01035,1.00991,1.01892,1.02658,1.01001,1.01607,1.02252,0.999732,1.02822,1.02173,1.01076,1.0151,1.0068,1.01163,1.0081,1.01451,1.01251,1.01572,1.00355,1.01256,1.01781,0.999169,1.00828,1.01619,1.02239,1.01234,1.02578,1.0194,1.00629,1.02565,1.01045,1.01067,0.992199,1.00622,1.02721,1.00678,1.01733,1.0163,1.00246,1.01211,1.01857,1.00148,1.02384,1.00397,1.02192,1.00765,1.01332,1.01339,1.02004,1.02077,1.00856,1.01321,1.00816,1.02341,1.01931,1.01023,1.00359,1.00442,1.03484,1.01646,1.01865,1.00903,1.02361,1.00538,1.00957,1.01091,1.00568,1.00202,1.00876,1.00904,1.00795,0.998526,1.01253,1.0056,1.02078,1.0143,1.0194,1.01454,1.0174,1.02191,0.991903,1.01115,1.01457,1.00338,1.02097,1.01802,1.00838,1.02098,1.00665,1.02327,1.01529,1.02468,1.01006,1.0016,0.991509,0.995892,1.02102,1.0136,1.01749,1.00592,1.01306,1.01089,1.00972,1.01832,0.998894,0.990029,1.00506,1.00965,1.01202,1.00589,1.01439,1.02569,1.03164,1.0011,1.01272,1.00424,1.01618,1.01377,1.02802,1.03883,1.00621,0.99757,1.02494,1.04552,1.00779,1.00886,1.01783,1.04054,0.995188,1.02595,1.01455,1.02136,1.02245,1.00413,1.01305,1.01588,1.01195,1.0134,1.01679,1.02814,0.98606,1.02468,1.03164,1.00784,1.0426,0.999551,1.01991,1.00246,1.01063,1.00398,1.01678,1.01104,1.01073,1.00389,0.998988,1.00982,1.04541,1.02504,1.01143,1.03734,1.0087,1.02443,1.02204,1.02836,1.00505,1.03508,1.03988,1.01578,0.996188,1.03583,1.0161,1.02327,1.01973,1.02238,1.0138,1.02876,1.01078,1.02797,0.998248,1.04365,0.993184,1.04119,1.02761,1.03164,1.03387,1.0176,1.01876,1.04357,1.0461,1.03754,1.02868,1.02827,1.05494,1.02759,1.03585,1.00831,1.01903,1.03565,1.02527,1.05064,1.04251,0.99905,1.02399,1.0233,0.999523,1.0114,1.04261,1.01421,1.01507,0.999369,0.995799,1.04501,1.0249,1.00919,1.02495,0.98158,0.991483,1.01392,0.978765,0.977725,0.958681,0.968641,0.988774,0.944102,0.912674,0.965472,0.956856,0.941923,0.941625,0.940025,0.920764,0.850216,0.957606,0.9229,0.93306,0.952811,0.897032,0.857535,0.868378,0.891905,0.850304,0.833182,0.77223,0.821043,0.872278,0.859528,0.863431,0.825604,0.840093,0.891183,0.791949,0.824272,0.776621,0.683316,0.706256,0.713447,0.76879,0.694595,0.872562,0.725182,0.739162,0.569497,0.577951,0.806723,0.574716,0.739019,0.801731,0.687198,0.969466,0.626113,0.410887,0.485778,0.607698,0.612502,0.552453,0.607698,1.07334,0.187834,0.375668,0.93917,0.730466,0.093917,0.375668,1.17396,1.87834,0.93917,0.93917,1,0.93917,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, + // (-75,-65)cm + { 0.68065,0.774624,1.00097,1.06227,1.06535,1.0474,1.05136,1.04251,1.03797,1.03608,1.04159,1.03483,1.02481,1.02783,1.02073,1.02293,1.02541,1.01161,1.01943,1.0154,1.02054,1.01089,1.01257,1.01214,1.02244,1.01799,1.02665,1.02124,1.01388,1.02027,1.01676,1.0104,1.02075,1.02067,1.01246,1.0094,1.02261,1.01172,1.01581,1.01168,1.01146,1.01614,1.0094,1.01088,1.01631,1.01831,1.00301,1.01673,1.01428,1.00601,1.02766,1.03143,0.997499,1.01085,1.0177,1.0161,1.02112,1.00903,1.02435,1.02246,1.02305,1.00643,1.01639,1.0124,1.00947,1.01298,1.02248,1.02396,1.01048,1.01715,1.01662,1.0192,1.01173,1.01357,1.01341,1.0231,1.01326,1.00226,1.01562,1.02308,1.02225,1.01038,1.01322,1.0127,1.0079,1.0225,1.03141,1.01397,1.00081,1.00674,1.01033,1.00366,1.00218,1.01609,0.991641,1.01716,1.02731,1.01302,1.02653,1.02134,1.00558,1.0074,1.0281,1.02844,1.00609,1.01594,1.02706,1.03127,1.01162,1.02401,1.02996,1.02218,1.01127,1.00517,1.01454,1.00705,1.02951,0.998609,1.03088,1.01459,1.00785,1.00121,1.0051,1.00323,1.01145,1.00976,0.998072,1.009,1.01897,1.00429,1.03022,1.01459,1.00216,1.02048,1.02882,1.02015,1.02151,1.01007,1.00089,0.999181,1.0204,1.00241,1.00289,1.03302,0.997545,1.0137,1.00201,1.03658,1.019,1.01017,0.996838,1.0076,1.01844,1.0061,1.02821,1.028,1.03035,1.02649,1.03256,0.999228,1.01558,0.99896,1.03016,1.01008,1.02023,0.998584,1.01605,1.01965,1.03354,1.00884,1.0107,1.02489,1.00887,1.01667,1.00927,1.02586,1.02272,0.997336,1.003,1.04057,1.00673,1.01673,1.02297,1.01294,1.00446,1.0292,1.0402,1.02463,1.01125,1.01391,1.0082,1.01723,1.01257,1.03964,1.01106,1.04454,0.993064,1.01631,1.01383,1.02132,1.02303,1.01307,1.00415,0.999492,1.00019,1.00241,1.01417,1.00449,1.02406,1.00242,1.01057,1.02478,1.04587,1.02529,1.02326,1.02681,1.02251,1.02736,1.01139,1.02988,1.01075,1.01528,1.04645,1.00265,0.991337,1.02064,1.00812,1.02014,1.01045,1.02142,1.00762,1.01657,0.99814,1.02358,1.01269,1.03825,1.01107,1.04543,1.03502,1.03936,1.03858,1.04535,1.02471,1.01304,1.05608,1.05386,1.02714,1.01412,1.05114,1.00475,1.06823,1.02725,1.03985,1.03756,1.01867,1.05427,1.02906,1.00812,1.00784,1.00994,1.02759,1.00571,1.04893,1.0263,1.02236,1.02306,1.00445,1.02248,1.05001,1.00714,1.02266,0.995172,0.988761,0.969716,0.969548,1.00232,0.971046,0.964122,0.941247,0.936956,0.920736,0.936028,0.974226,0.90892,0.918083,0.93838,0.940996,0.879317,0.977004,0.925318,0.943185,0.909531,0.851085,0.886757,0.900745,0.911677,0.843007,0.841636,0.800555,0.801452,0.834325,0.859846,0.91539,0.806791,0.746995,0.878018,0.704059,0.885732,0.875355,0.66991,0.702135,0.696129,0.943176,0.731694,0.841517,0.679511,0.676887,0.494805,0.469216,0.860788,0.589646,0.585459,0.535316,0.444724,0.717074,0.856505,0.518845,0.628414,0.529963,0.60223,0.437986,0.662453,1.10122,0.32119,0.275305,0.361338,0.843123,0.240892,0.275305,1.60595,1.28476,0.481784,1,1,0.481784,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, + // (-65,-55)cm + { 0.718837,0.717043,0.959335,1.05987,1.06505,1.04434,1.04567,1.04035,1.03525,1.02756,1.03562,1.02663,1.02529,1.03076,1.02922,1.02952,1.0266,1.01844,1.02112,1.0168,1.0203,1.01901,1.01721,1.01764,1.03228,1.01493,1.02513,1.02881,1.02008,1.01558,1.01667,1.01915,1.03326,1.02198,1.01834,1.02143,1.02927,1.01899,1.02617,1.02112,1.01438,1.02624,1.02173,1.01685,1.01755,1.01642,1.02683,1.02641,1.01652,1.01978,1.01833,1.02767,1.02135,1.01771,1.01737,1.0202,1.01038,1.01239,1.01642,1.03222,1.01743,1.0212,1.02636,1.01488,1.02286,1.03234,1.02465,1.03006,1.0176,1.02515,1.01154,1.02865,1.02348,1.00768,1.01957,1.01372,1.01391,1.01691,1.00594,1.01815,1.02775,1.01042,1.03622,1.03367,1.02118,1.01937,1.0283,1.0072,1.00429,1.0046,1.01688,1.01598,1.00837,1.02949,1.00898,1.01735,1.02072,1.00588,1.0245,1.02261,1.01323,1.01457,1.02441,1.04058,1.00788,1.01866,1.01029,1.02775,1.00975,1.03522,1.0236,1.01845,1.01454,1.01579,1.02375,1.01963,1.01982,1.00433,1.0186,1.00273,1.01192,1.02764,1.01117,1.00689,1.00475,1.01021,1.00917,1.01217,1.01318,1.02359,1.01851,1.01603,1.01433,1.02656,1.03344,1.02425,1.00516,1.01005,1.0182,0.998762,1.01861,1.01586,1.01795,1.02561,1.01329,1.01899,0.998903,1.0267,1.02118,1.02761,1.00982,1.00404,1.02006,1.02073,1.01751,1.03339,1.03003,1.02052,1.02204,1.03152,1.01356,0.984591,1.00572,1.0105,1.00363,1.02139,1.01318,1.03586,1.03412,1.01349,1.02321,1.02278,1.01624,1.01984,1.00831,1.02794,1.00475,1.00451,1.00299,1.03456,1.01041,0.9934,1.00749,1.03453,1.01751,1.03793,1.04605,1.02872,1.01177,1.03294,1.01978,1.02623,1.01147,1.02694,1.01958,1.04422,0.989353,1.02145,1.02792,1.01546,1.04261,1.00178,1.0249,1.0378,0.993493,1.01178,1.02089,1.01966,1.04674,1.01603,1.00287,1.00707,1.05282,1.02314,1.00926,1.03247,1.01751,1.02049,1.01949,1.03537,1.00281,1.01767,1.03574,1.01449,1.00123,1.02614,1.01717,1.01738,1.02027,1.00558,1.01529,1.00715,1.01371,1.04596,1.04013,1.05726,1.00654,1.02915,1.04496,1.02688,1.04355,1.02975,1.0441,1.04914,1.07989,1.04616,1.05396,1.04874,1.04672,1.03989,1.03576,1.03838,1.02984,1.03608,1.02277,1.04893,1.05272,1.02451,1.01095,1.02047,1.03928,1.05696,1.03596,1.02557,1.02173,1.00854,0.998912,1.06234,1.06257,0.989665,1.01292,1.0051,1.00175,1.04939,1.00263,0.977971,0.965003,0.99472,0.952543,0.965855,0.940581,0.961114,0.952447,0.938697,0.977106,1.02169,0.980924,0.886712,0.967604,0.91602,0.945798,0.920116,0.921282,0.883491,0.907557,0.904726,0.824865,0.948207,0.872863,0.89894,0.927547,0.790944,0.849804,0.826658,0.813421,0.923371,0.802179,0.905022,0.769555,0.753373,0.697789,0.816596,0.895343,0.815094,0.829076,0.955954,0.777039,0.446634,0.607567,0.837328,0.487701,0.77689,0.595783,0.617061,0.686815,0.658198,0.813068,0.528909,0.638839,0.643889,0.448771,0.835405,0.493649,0.493649,0.197459,0.296189,1.38222,0.16455,0.329099,0.987297,3.94919,0.493649,0.987297,1,0.493649,1,1,0.987297,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, + // (-55,-45)cm + { 0.770536,0.777391,0.989942,1.05765,1.05991,1.02981,1.02842,1.02283,1.02023,1.013,1.02241,1.02464,1.01295,1.01651,1.01708,1.0171,1.02238,1.00415,1.01613,1.00846,1.01047,1.01897,1.01812,1.01219,1.01862,1.0129,1.02566,1.01198,1.01592,1.01591,1.00494,1.01803,1.01736,1.0139,1.0085,1.00764,1.0287,1.01302,1.01832,1.01512,1.01274,1.01967,1.01292,1.01763,1.00654,1.01168,1.01639,1.01604,1.01766,1.00794,1.03189,1.02922,1.02073,1.01149,1.01463,1.02169,1.00981,1.00751,0.998874,1.02899,1.0078,1.00751,1.00991,1.00199,1.01129,1.01872,1.02536,1.01079,1.01885,1.02021,1.02399,1.02095,1.02067,1.00289,1.01605,1.02828,1.01305,1.00822,1.00618,1.01393,1.02379,1.01062,1.01843,1.02058,1.00491,1.01887,1.01415,1.00878,0.999895,1.00532,1.01047,1.02025,1.02021,1.01951,0.996111,1.00668,1.01877,1.02302,1.0199,1.00712,1.01993,1.00393,1.01872,1.02641,1.0226,1.01629,1.01541,1.03001,1.00807,1.01108,1.01656,1.01095,1.00172,1.01685,1.01419,1.00388,1.01595,1.0129,1.02178,1.0089,1.01016,1.01586,1.01515,0.99524,1.0122,1.00561,1.01051,0.996851,1.00641,0.996078,1.0131,1.01331,1.01936,0.997176,1.01389,1.01939,0.991576,1.01182,1.01499,1.0123,1.01331,1.00337,1.01342,1.02752,1.00925,1.00539,1.00138,1.02547,1.01598,1.01171,1.00243,1.0059,1.01182,1.00922,1.0252,1.01814,1.0068,1.01934,1.00964,1.00536,1.01956,0.986105,1.0138,1.01003,1.00564,0.998962,1.02581,1.01413,1.01177,1.00492,1.01202,1.01286,1.01694,1.0083,0.998974,1.01649,1.01199,0.996628,1.00531,1.04002,0.99166,1.02304,1.01225,1.02837,1.01077,1.02996,1.02894,1.02719,1.02673,1.01373,1.02097,1.017,0.992248,1.02761,1.01576,1.02926,1.00496,1.01527,1.00339,1.00149,1.01692,0.997714,0.990651,1.01635,0.987506,1.0135,1.00804,1.01195,1.01231,1.00568,1.02272,1.0044,1.04491,1.03051,1.01571,1.02991,1.03132,1.01719,1.00984,1.00317,1.00803,1.0104,1.01127,1.01655,1.00203,1.01738,1.00939,1.01093,1.02439,1.02642,0.979455,1.02796,1.00746,1.02995,0.998017,1.02605,0.992856,1.03313,1.03431,1.01575,1.03501,1.03712,1.02448,1.05058,1.03354,1.04488,1.03438,1.00773,1.01425,1.01981,1.02716,1.01759,1.03282,1.04297,1.03828,1.03097,1.01895,1.01601,1.00183,1.01036,1.01607,1.00872,1.04549,1.02001,1.02404,1.01712,0.980197,1.03378,1.05066,0.994045,1.03034,1.00754,1.00119,0.99951,0.977892,0.995455,0.995403,0.977153,0.959749,0.963814,0.970759,0.946706,0.949655,0.929835,0.970496,1.00908,0.947455,0.886401,0.979522,0.927442,0.926452,0.968494,0.883033,0.903264,0.959714,0.91869,0.909205,0.9124,0.826728,0.907068,0.966575,0.929593,0.909365,0.844946,0.86823,0.938472,0.851567,0.92088,0.815955,0.76552,0.725931,0.794287,0.849316,0.744547,0.767679,0.942166,0.717619,0.535706,0.633961,0.866845,0.60963,0.590355,0.81088,0.830187,0.777541,0.597735,0.498112,0.786493,0.391374,0.747168,0.553458,0.913206,0.724527,0.249056,0.221383,0.747168,1.39471,0.199245,0.39849,2.49056,1.3283,0.996225,0.249056,1,0.498112,1,1,0.996225,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, + // (-45,-35)cm + { 0.83206,0.912882,1.03726,1.05913,1.05047,1.01913,1.01739,1.01169,1.00129,1.00395,1.01238,1.0074,1.00364,1.00326,1.00412,1.00787,1.00713,1.0009,1.01033,1.00375,0.997128,1.00707,0.998956,0.994536,1.01062,1.00361,1.01574,1.00913,1.00708,1.01164,1.00386,1.00281,1.01247,1.00338,1.00612,0.994966,1.02097,0.997379,1.01253,1.00445,1.00484,1.01145,1.01122,0.990715,0.99927,0.99895,0.99327,1.00016,1.00151,0.998532,1.00373,1.00909,1.01153,1.00479,1.00291,1.00667,1.00036,1.00503,1.00952,1.01576,1.01135,1.00655,1.0116,1.00136,1.01408,0.996893,1.0135,1.01721,0.99912,1.0112,1.00529,1.00466,0.999376,1.00396,1.00416,1.00647,1.01394,1.00932,0.999101,1.00823,1.01091,0.998751,1.01606,1.00261,1.00096,1.00945,1.0051,0.996123,0.99037,0.992742,1.0001,1.01026,1.00501,1.00856,0.995211,1.0166,1.00806,1.00005,1.00657,0.995541,1.00223,1.00107,0.996531,1.01266,1.01091,1.00578,1.00534,1.01164,0.994198,1.00441,1.00929,1.01046,0.9943,1.01658,1.0085,1.00809,0.992675,0.992863,1.00383,0.994198,1.0034,1.0044,0.987121,0.981331,1.0055,1.0061,1.00337,0.977568,0.99312,0.998557,1.01785,0.988439,1.01367,0.989339,1.00271,0.995924,0.995951,1.00007,0.999355,0.986223,1.00162,1.00203,1.00005,1.00977,0.988387,0.980257,0.983221,1.02079,0.999889,0.997952,1.00562,0.984458,1.00035,1.00311,1.00782,1.01255,0.998386,1.01872,1.00141,1.00625,0.993206,0.982935,0.992905,0.988884,0.999854,0.988176,1.0034,1.00998,1.00992,0.998111,1.01022,1.01145,0.98074,1.01649,1.00393,1.00122,1.01409,0.99067,0.989082,1.01266,0.984902,1.00159,1.00851,1.02288,1.00108,1.03948,1.00192,0.991671,1.01181,1.00408,1.00048,1.01033,1.00564,1.03174,0.99758,1.02307,0.997746,0.996908,1.00655,1.00709,1.01418,0.993694,0.997285,0.993493,0.990466,1.02539,1.00362,1.00081,1.0154,0.988732,1.00028,0.999213,1.02,1.01554,1.02117,1.01373,1.00893,0.991851,0.981869,1.01952,0.993376,1.00937,1.02224,0.994844,0.990442,1.02228,1.00255,1.00959,1.00651,0.991528,1.00087,0.996028,0.990056,1.0023,1.0046,1.00567,0.984832,1.00807,1.00564,0.992309,1.00794,1.0228,1.02489,1.03089,1.00817,1.00153,1.01802,0.998332,1.03194,0.9949,1.02599,1.00077,0.992935,1.0304,1.03533,1.00427,1.00425,1.01125,1.01477,0.984371,0.995517,1.00605,1.01683,1.00521,0.978744,0.987827,0.981416,1.01177,1.02549,0.971903,1.01994,1.01171,0.989034,0.987776,0.968382,0.987361,0.96286,0.973807,0.982057,0.967591,0.912104,0.94706,0.932887,0.914433,0.932069,0.982094,0.922593,0.89524,0.964909,0.934777,0.912435,0.898264,0.898558,0.893114,0.937024,0.918007,0.942341,0.921322,0.834368,0.866453,0.915817,0.88168,0.880563,0.858565,0.910079,0.841864,0.789728,0.884688,0.782066,0.763655,0.825945,0.896038,0.922489,0.837956,0.801499,0.958022,0.652071,0.568453,0.607043,0.879186,0.560119,0.938621,0.742659,0.650403,0.839819,0.854816,0.55848,0.575357,0.406301,0.650403,0.474898,0.997285,0.569877,0.124661,0.284939,0.373982,0.872625,0.332428,0.997285,1.66214,3.98914,0.332428,0.498643,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, + // (-35,-25)cm + { 0.923966,0.94735,1.02345,1.03735,1.03622,1.01753,1.01547,1.00465,0.997963,0.995426,1.00472,1.00149,0.993121,0.998675,1.00945,1.00209,1.0098,0.99362,1.00272,0.998346,0.994893,1.00181,0.99242,0.987533,1.00024,1.00579,1.00848,1.00659,1.00282,1.00967,1.00126,0.994975,1.01161,1.00735,1.00101,0.997079,1.0156,1.00844,1.0064,1.00267,0.996066,1.00687,1.00593,0.992393,1.00234,0.999503,0.997915,0.997429,1.00331,0.994166,1.00778,1.01576,1.0046,0.993296,1.00358,1.00102,0.99531,0.994105,0.996185,1.01324,1.00786,1.0004,1.00661,0.995733,1.00474,1.00413,1.00078,0.99685,1.00183,1.00585,0.987572,1.00093,1.00883,0.997546,0.996228,0.999089,1.0143,0.99262,0.998942,1.00478,1.01059,0.997565,1.00541,1.00046,1.00386,1.0088,1.0138,0.992343,0.986911,0.989425,1.00228,1.00492,0.995856,1.00768,0.989221,1.00149,0.99674,0.994885,1.01608,0.999603,1.00073,0.99131,0.996641,1.00865,1.01395,1.00155,1.00528,1.00415,0.987108,1.00111,1.00759,1.01147,1.00122,0.990499,1.01439,0.989218,1.01215,0.995765,1.01765,0.993298,0.983213,0.989175,0.993825,0.979732,1.00206,0.999178,0.988888,0.992389,0.997951,0.996739,0.999722,1.00144,1.00492,0.993511,0.991462,1.00471,0.987316,1.00928,1.00486,0.994749,1.00268,1.00497,1.00128,1.01705,0.990858,0.992076,0.996814,1.00567,0.98924,0.994384,0.971736,0.976957,1.00319,1.01715,1.00934,0.990658,0.996875,0.998592,1.01086,0.994786,0.985105,0.984457,0.991339,0.998603,1.01164,0.999883,0.992243,0.983874,1.02345,0.999675,1.00989,0.984709,0.993409,1.00899,1.00273,1.01231,0.998367,0.988361,0.99266,1.0166,1.00145,1.00227,0.998622,1.02884,0.988619,1.02211,1.00506,0.998855,0.996474,1.01058,1.0028,1.01139,0.999506,1.0161,1.01071,1.02703,0.991084,1.0074,0.991863,0.994546,1.01416,0.983009,0.983852,1.00525,0.988681,0.99565,0.982188,0.992091,1.00718,1.00816,0.99033,1.0066,1.01171,1.00819,1.00465,0.995786,0.999305,0.994638,0.992505,1.02045,1.00123,1.01974,1.01866,0.998606,0.980013,1.02328,0.993423,0.996832,1.00573,1.00741,0.988171,1.0041,1.00158,1.01321,1.00501,1.02698,0.969786,1.00904,1.00772,0.994356,1.00406,1.01486,1.01751,1.02012,1.01385,1.00619,1.00239,0.985994,1.02676,0.991189,1.03584,0.983947,1.00157,1.0233,1.00108,1.01927,0.984494,1.00138,0.994128,1.01565,0.99671,0.975336,1.00256,0.999246,1.01223,0.988474,0.986886,0.987466,1.02128,1.00833,0.973274,0.999182,0.995083,0.976168,0.961557,0.996327,0.963336,0.989334,0.974905,0.943986,0.943595,0.947029,0.976744,0.943938,0.943299,1.00757,0.954426,0.887766,0.987654,0.966612,0.951468,0.9326,0.924169,0.926773,0.941828,0.968382,0.995218,0.933613,0.899119,0.95059,0.969468,0.97181,0.903795,1.00951,0.879659,0.993054,0.874555,1.02555,0.902723,0.802754,0.734884,0.823826,1.12199,0.934858,0.834973,0.939112,0.766296,0.671053,0.57772,0.870733,0.532836,1.06741,0.778317,0.484206,1.03297,0.75052,0.778317,0.600416,0.611534,2.14434,0.769764,0.550381,0.727777,0.181944,0.222376,0.600416,2.33495,0.200139,0.400277,5.00346,1.00069,1.00069,1,1,0.500346,1,1,1.00069,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, + // (-25,-15)cm + { 0.985898,0.9687,1.01008,1.02131,1.02227,1.00935,1.0109,1.00627,1.00011,0.99837,1.00814,1.00441,0.994153,0.997114,1.00404,1.00174,1.00637,0.992117,1.0099,1.00444,1.00317,1.00176,1.00126,0.992339,1.00821,1.00332,1.00752,1.00548,0.994585,1.00492,1.00309,0.995164,1.00833,1.00299,0.996486,0.991068,1.00423,1.00098,1.0059,0.995296,0.985326,1.00793,1.00191,0.993395,0.998205,1.00643,1.00161,1.00449,0.99486,0.992835,1.00025,1.02143,1.00006,0.988343,0.995511,1.00151,0.999853,1.00307,0.997296,1.0076,0.999315,1.00159,1.01848,1.00034,1.00198,1.00415,0.99914,1.00037,1.00306,1.00434,0.994162,0.998054,1.00792,0.996354,0.997956,0.997349,1.00455,0.981458,0.987956,1.0035,1.00233,0.995829,1.00704,1.00801,1.00146,1.00002,0.99722,0.987873,0.986401,0.990034,0.998425,1.00469,0.995726,1.00783,0.989027,0.993329,1.00344,0.997365,1.00069,0.995184,0.99278,0.994924,1.00197,1.00393,1.00035,0.995474,1.00931,0.996821,0.994381,1.00893,1.00164,0.99532,0.984499,1.00103,1.01129,0.989242,1.00394,0.989434,1.00784,0.992471,0.992396,1.01083,1.00018,0.987843,0.994105,1.00171,0.997189,0.991592,1.00554,1.00368,0.991359,0.997517,1.00694,0.99835,1.01276,0.991224,0.984813,1.00768,0.993524,0.98028,0.99894,0.987426,1.00223,1.01185,0.992442,1.0047,0.998907,1.01529,0.993661,0.999861,0.990341,0.993386,0.990196,0.996472,1.00745,1.00314,0.99741,0.992241,0.996009,0.992613,0.988083,0.984489,0.988304,0.977321,1.00426,0.997459,0.998766,1.00106,1.02726,1.00494,0.989578,1.00022,0.991196,1.00919,1.00742,1.0059,0.988259,0.981486,1.00357,1.00991,0.984559,1.006,1.00689,1.01145,0.995173,1.0105,1.02838,0.999897,0.993679,0.996074,0.999487,1.0043,0.991797,0.998225,1.01184,1.01573,0.979499,1.00234,0.996531,0.995655,1.01411,0.990372,0.991126,0.984507,0.967031,0.990895,0.99633,0.991347,1.00888,0.989706,1.00156,0.999628,1.0168,1.00005,0.989936,1.01178,1.00653,0.996522,0.995187,1.00977,1.00056,0.98284,1.01897,1.00117,0.972832,0.998075,0.993328,0.999542,0.998505,0.994049,1.00026,0.968521,0.989409,0.998187,1.00051,0.998637,0.978569,1.01533,0.995071,0.992271,1.01283,1.00745,1.00278,0.996022,1.01566,0.992739,1.00034,0.995086,1.03034,0.992176,1.00744,0.988424,0.990647,1.00547,1.01335,1.00669,1.00605,0.994938,0.965495,0.992405,0.989507,0.988803,1.01598,0.995086,1.00772,1.00076,0.978866,0.999058,1.01636,0.991529,1.00512,0.990891,0.960445,1.01733,0.967214,0.97297,0.988487,0.977401,0.956166,0.9506,0.899551,0.930806,0.97104,0.980519,0.961686,0.994568,0.920394,0.910097,0.986613,0.955347,0.90145,0.946905,0.909813,0.953558,0.955092,0.973158,0.977085,0.919497,0.862301,0.963383,0.892321,0.928743,0.900048,0.944091,0.853004,1.00181,0.837973,1.04289,0.839177,0.797804,0.716121,0.806,1.01276,0.831911,0.767467,0.925914,0.655028,0.648898,0.692608,0.907042,0.604031,0.843628,0.815425,0.683051,0.97145,0.890496,0.637514,0.653353,0.918324,0.883948,0.500904,0.787135,0.534298,0.400723,0.286231,0.333936,2.33755,0.200362,0.500904,1.66968,0.801446,0.333936,1,1,1.00181,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, + // (-15,-5)cm + { 1.00931,0.994395,0.997946,1.00284,1.00387,0.996549,1.00531,0.99504,0.997778,0.993767,1.00367,0.994944,0.992689,0.998598,1.00458,1.00544,1.00561,0.990573,1.00083,0.999854,1.00058,0.996587,0.996566,0.993535,1.00581,0.996646,1.00417,1.00227,1.00565,1.00225,0.9973,0.99781,1.00408,0.996995,0.993725,0.995157,1.00885,0.997487,1.00053,1.00094,0.999922,1.00242,0.99852,0.980413,0.997342,0.995457,0.99685,1.0108,1.00243,0.994822,1.00989,1.01304,0.997231,0.998624,1.00056,1.00424,0.99226,1.00268,1.00109,1.00946,1.00261,0.995952,1.00636,0.999976,0.995549,1.00925,1.00336,1.01239,0.994657,1.01724,0.994369,0.998799,1.00631,1.00161,0.987504,1.00264,1.01494,0.999116,1.00074,0.99934,1.01108,1.00127,1.02406,0.99987,0.99233,1.0119,1.00378,0.995099,0.989036,0.988456,0.994962,1.00112,1.00852,1.01218,0.980509,0.993541,1.00062,0.994686,1.00017,1.00515,1.00143,0.994973,0.999824,1.01096,1.01037,0.995961,0.993242,1.00576,1.00399,1.00389,1.01037,1.00406,0.993274,0.997673,0.999141,0.998875,0.993478,0.994929,0.999501,1.00369,1.00693,1.00952,0.992058,0.992547,1.00397,1.00456,0.997562,0.999814,0.995561,0.986912,1.01967,1.00328,1.00922,0.991681,1.01191,1.00442,0.987735,1.00317,0.992676,0.995197,1.01517,0.97852,0.99054,1.01495,1.01251,1.01861,0.979115,0.99871,0.99284,1.00893,0.998113,1.0002,1.00578,0.99533,1.00859,1.0007,1.00034,0.995965,1.0032,0.994986,0.992603,0.987953,0.990123,0.994908,0.99762,0.990293,1.01252,1.00951,1.00469,0.99247,1.02106,1.00348,0.988347,1.01328,1.00115,1.00928,0.99762,0.989521,0.988208,1.03529,0.989356,0.999951,0.999165,1.01805,0.994457,1.01688,1.01134,1.01405,1.00683,1.013,1.00924,0.995814,0.984669,1.03153,1.00117,1.02343,0.98822,1.01263,1.00352,0.991489,0.997463,1.00253,0.990518,0.983215,0.971524,0.986278,1.00653,0.98855,1.00929,0.981,1.00164,0.999703,1.02103,1.00803,0.994891,1.01402,0.990101,0.996674,0.98261,1.02558,0.985132,1.01026,1.00779,0.993558,0.968321,1.01267,0.980337,0.997236,0.994429,0.992124,0.989879,1.00107,1.00362,1.0047,1.02957,0.996991,0.97585,1.03428,0.993271,1.00266,1.0191,1.00511,1.00906,1.003,0.99854,1.00797,1.00395,0.979992,1.01253,0.999619,1.02783,0.991298,0.999507,0.998749,0.997874,1.02678,0.988558,0.998549,0.985581,1.00199,0.994628,0.995134,1.02161,0.996844,0.983504,0.99058,0.973826,0.991402,0.997437,0.977579,1.03623,1.00539,0.983943,0.982526,0.980607,0.980157,0.977666,0.959977,0.970846,0.945346,0.965657,0.952322,1.00138,0.954699,0.993072,1.04048,0.982014,0.912219,1.00601,0.993678,0.985992,0.954317,0.965987,0.971313,0.967095,0.950815,0.967028,0.944298,0.874125,0.95325,0.992997,0.963397,0.903507,0.944399,0.933338,0.957923,0.908913,0.97266,0.91039,0.906891,0.864226,0.90963,1.08418,0.889395,0.893059,0.919252,0.774377,0.560017,0.719481,1.00213,0.76088,0.890787,0.923019,0.939502,0.916238,0.707389,0.584579,0.683274,0.612416,1.07372,0.770873,0.84796,1.00213,0.286324,1.00213,0.601281,1.40299,0.200427,0.501067,1.67022,2.00427,1,0.250534,1,1.00213,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, + // (-5,5)cm + { 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, + // (5,15)cm + { 1.0175,0.999184,0.999699,1.01173,1.00866,1.00075,1.00408,0.997711,0.993871,0.992766,1.00403,0.99482,0.992924,0.999388,1.00019,0.999856,1.00361,0.987255,1.00401,1.00063,0.997198,0.997107,0.990032,0.996502,1.00148,0.998159,1.0038,1.00983,1.00452,0.9991,0.992946,1.00191,1.00742,1.00309,0.993726,0.990577,1.01574,0.998733,0.993264,1.00094,0.992947,1.01046,0.999372,0.991381,0.992551,1.00636,0.991572,0.998559,0.998175,0.993135,1.01045,1.01067,0.998664,0.990321,0.99107,0.996678,0.992407,0.992397,0.992362,1.00724,0.996307,0.991581,1.00804,0.996812,1.00061,0.997916,0.997337,1.00343,0.999787,1.01683,1.01293,0.990718,1.00627,0.991936,1.00124,0.996064,0.99989,0.99025,1.00135,1.00298,1.01932,0.991641,1.01101,1.00171,0.995315,0.998211,0.980182,0.989297,0.99459,0.998966,0.998822,1.01752,0.988754,0.999937,0.98485,0.984797,1.00717,0.992075,1.00436,1.00189,0.997852,0.997073,1.00158,1.00219,0.990446,0.992179,0.996243,1.00841,0.985793,1.00792,1.00144,0.994308,0.979368,1.00012,1.00692,0.995834,1.01186,0.98524,1.00156,0.995045,0.990093,0.995766,0.986835,0.994091,0.984619,1.00465,1.00017,0.997366,0.993777,0.99158,1.00136,1.0022,1.01089,0.997304,1.00315,1.00586,0.995456,0.985913,0.984723,0.992607,1.0005,0.998798,0.995548,0.995855,0.99008,0.993798,0.977387,1.00416,0.988309,1.00884,0.980858,0.989976,1.01238,0.996211,1.0003,1.01255,1.00628,1.00437,1.00105,1.00732,0.991345,0.976727,0.987657,1.00035,0.996532,1.005,1.00567,1.01913,1.01083,1.00408,1.00898,0.996437,1.00144,1.01496,0.998505,1.00202,0.991772,0.97929,0.999538,1.02884,0.973259,1.00678,1.00755,1.00259,1.00195,1.00112,1.02581,1.0191,0.991758,1.00891,1.00951,0.993656,0.978985,0.9963,1.00374,1.03109,0.985209,1.01109,0.99135,1.00298,1.01457,0.98578,0.997767,0.993891,0.980327,1.02295,0.999777,0.991289,1.01954,1.00679,1.00111,1.0007,1.02774,1.02881,0.990367,1.02393,0.999988,0.996331,0.990343,1.01478,1.0027,0.995136,1.01594,1.00799,0.996442,1.01989,0.987618,0.997454,1.00347,0.989633,1.0154,1.00371,0.98531,0.997501,0.997617,1.02649,0.972745,1.0239,0.994412,1.00416,1.01604,1.00561,1.00671,1.01968,1.01078,0.995482,0.997707,1.00332,0.985022,0.983035,0.997937,0.995498,0.983169,1.00955,1.00496,1.00542,0.992396,1.00591,0.985951,0.986731,0.989289,1.00628,1.00856,0.986761,0.997064,1.00771,0.953455,1.006,1.01612,0.986327,0.987189,0.985299,1.01041,1.00187,0.996454,1.02568,0.970755,1.01643,0.989842,0.980483,0.931733,0.961364,1.04797,0.964076,1.04318,1.01223,1.00055,0.995431,1.09195,1.05315,1.03369,1.05767,1.01117,0.979288,1.06328,1.09412,1.03191,1.07048,1.05115,1.05252,1.11216,0.977377,1.07259,1.08849,0.94242,1.03344,1.00067,1.07581,1.03939,0.900577,0.92236,1.03185,1.39957,1.06613,0.961682,0.982989,0.842389,0.733632,0.840888,1.10667,0.700567,1.16025,1.05111,0.632583,1.44152,0.991046,0.730244,0.619404,0.641265,0.991046,0.660697,0.991046,0.991046,0.220232,0.247762,0.743285,1.73433,0.330349,0.991046,1.65174,1.98209,0.330349,0.198209,1,0.495523,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, + // (15,25)cm + { 0.998505,0.984951,1.01666,1.02996,1.02431,1.00738,1.01091,1.00491,1.00692,0.995104,1.00965,0.998992,0.995089,0.996513,0.99727,1.00321,1.00407,0.985662,0.996319,0.995768,0.992529,1.00071,0.993713,0.986634,1.00685,0.991523,1.00681,1.00191,0.999818,0.99537,0.996021,0.992506,1.0007,0.997764,0.999943,0.984697,1.012,0.988476,1.00254,0.997644,0.995978,0.995338,0.999531,0.983855,0.994632,0.994758,0.99047,0.998957,0.998669,0.99519,1.00418,1.00433,0.995191,1.00111,1.00266,0.997344,0.988404,0.997941,0.993835,1.0089,1.00288,0.995154,1.00804,0.99698,0.996524,1.00718,1.00116,0.994856,1.00423,1.00288,0.98612,0.993753,1.00034,0.99521,0.988372,0.986414,0.996466,0.992753,0.996037,0.998349,1.01129,0.990003,0.996221,1.00275,0.996104,1.00778,1.0044,0.989093,0.973766,0.995497,0.998207,1.00477,1.0028,0.997587,0.994612,0.996815,0.990867,0.993819,1.00326,1.00207,1.00219,0.989923,1.00121,1.00902,1.01365,0.9923,0.998301,1.0069,0.992738,1.0017,1.0016,1.00354,0.99051,0.986238,1.00898,0.997844,0.993731,0.992268,1.00773,0.981702,0.988297,0.990827,0.988971,0.98571,0.990275,0.999669,1.00484,0.980878,0.992473,0.989352,0.992726,0.980197,1.01165,0.980268,1.00692,0.992301,0.986877,1.01246,1.00263,0.997672,0.991212,0.996488,0.996019,1.0004,0.992087,0.993192,0.994438,1.00097,0.996181,1.00463,0.981752,0.994301,1.01455,1.00162,0.995975,0.995821,0.999031,0.994138,0.997038,0.999879,0.98962,0.995712,0.982415,0.995535,1.01019,0.991276,0.999303,1.01034,1.01908,0.983563,1.00172,0.998899,1.00369,0.992162,0.985914,1.00585,0.987948,0.98139,1.0065,1.01551,0.995639,1.00579,1.00851,1.00584,0.990491,0.996583,1.00492,1.01853,0.992416,0.995069,1.01125,1.0068,0.988871,1.00828,1.00913,1.03094,0.966839,0.996459,0.99014,0.999119,1.00601,0.987665,0.995627,0.997057,0.981525,1.00285,1.00516,0.994194,1.00301,0.987781,1.00796,1.00254,1.03216,1.01577,1.00819,1.00346,0.997623,1.01475,0.996241,1.00715,0.989539,1.01361,1.01726,0.990352,0.997558,1.00685,0.984005,0.987701,1.01689,1.00495,0.999925,0.991254,0.993447,1.00052,0.983849,1.00282,0.981568,1.01415,1.0096,0.983263,1.0045,0.993553,1.01175,1.01669,1.01863,1.01317,1.00817,0.983209,1.00926,0.963046,1.01562,0.988195,0.997092,1.02212,0.988205,1.00592,0.975956,0.990784,0.964482,0.980888,1.00461,0.972644,1.01022,0.982536,0.994752,1.00159,1.00186,1.00398,0.999263,1.0015,1.04515,0.986414,0.995807,0.992255,1.00324,1.01348,0.976594,0.994732,0.976072,1.0023,0.963576,1.02647,1.00102,0.96148,0.963666,1.00153,0.97436,0.980362,1.00756,1.04074,1.00575,0.982258,1.01848,1.0403,0.964761,1.02186,1.00076,1.09192,0.992586,1.0332,1.10024,1.02348,1.07285,0.987366,0.969217,1.01519,1.02817,1.21881,0.960135,1.02557,0.915441,1.03735,1.21522,1.11185,1.06846,1.42151,0.89455,0.61987,0.884026,1.171,0.743119,1.23631,0.951555,0.734057,1.25279,1.06772,0.721179,1.04865,1.07662,1.12932,1.08749,1.07662,1.11856,0.391497,0.326248,1.46811,1.14187,0.978743,1.95749,4.89371,3.91497,0.489371,1,1,0.978743,1,1,0.978743,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, + // (25,35)cm + { 0.948598,0.965656,1.03457,1.04419,1.03869,1.01244,1.01427,1.00563,0.999244,0.995943,0.999989,0.998308,0.994493,0.996792,0.998394,0.999046,1.00009,0.981687,0.99723,0.998617,0.998604,0.9997,0.992523,0.996509,0.999015,0.998031,1.00513,1.00322,0.989009,1.00258,0.993042,0.995289,1.00418,0.994866,0.998376,0.987219,1.00203,0.99088,1.00289,1.00023,0.99832,0.993323,0.998279,0.987047,0.997351,0.998661,0.977468,1.00479,0.99828,0.99307,1.00636,1.00329,0.996458,0.996307,0.987706,1.00638,0.98155,0.98776,0.991523,1.01258,1.0052,1.00065,1.00078,1.00026,1.02139,1.00218,1.00302,0.991329,0.991618,1.00005,0.990878,0.998113,1.00656,0.979811,0.984624,0.987326,0.993896,0.996429,0.992639,0.99766,1.01079,0.982471,1.00715,1.01506,0.987401,1.00423,0.994393,0.999278,0.978988,0.985818,0.987867,0.997541,0.996254,1.00253,0.974581,0.996445,1.00249,0.995439,1.00697,0.999153,0.997192,0.9996,0.996423,1.0023,1.01113,0.994843,0.994077,1.00077,0.995208,0.986538,1.00768,1.00939,0.996263,0.992922,1.01408,0.995622,1.00082,0.989922,1.00412,0.99248,0.996501,1.00092,1.00066,0.998679,0.99864,0.992864,1.00826,1.00133,0.99494,0.998794,1.01669,1.00694,1.01429,0.990168,1.01683,1.01395,0.998013,1.00309,0.995592,1.0057,1.00567,0.99908,1.01109,1.00824,0.995449,1.00658,0.980399,1.01516,1.01303,0.994606,1.00036,1.00106,1.00783,1.01149,1.00533,1.00027,1.01032,1.00433,1.00007,1.01957,0.999599,0.986389,0.995171,0.99553,0.998269,1.00184,0.997421,1.02665,1.00765,0.996946,1.01633,1.01219,1.00112,1.01075,1.0126,1.00845,1.00443,0.994652,0.99981,1.03334,0.993892,0.998531,1.0004,0.998279,1.00037,1.01918,1.00519,0.988978,1.01319,0.997152,1.01296,1.00652,0.984516,1.00701,0.983915,1.03379,0.976623,0.992762,0.993709,1.01271,1.02214,0.995484,0.998506,0.992081,1.00335,1.01883,1.01727,1.00165,0.996483,0.984929,1.00552,0.987008,1.03848,1.0232,1.00717,1.01145,0.969171,1.00161,0.989727,1.00055,0.989149,1.00927,1.01177,1.00504,0.967163,1.01403,0.97744,0.986375,0.999964,1.00836,0.984361,1.00067,0.992677,0.991464,0.990905,1.01396,0.983905,1.01254,1.01071,0.986293,0.994358,0.997104,1.00382,1.02232,1.01909,0.986335,1.00046,0.978043,1.00237,0.976405,0.996921,0.97354,0.98653,1.00342,0.998304,0.986989,0.963725,0.991091,0.972146,0.991035,0.998832,0.995555,1.0148,1.01247,0.9892,0.994607,0.969651,0.993283,1.01133,0.980188,0.977526,0.98423,1.02633,1.00423,1.0197,0.998144,1.01294,0.991874,1.00197,0.970346,0.93215,0.997811,0.98997,0.991904,1.01932,1.05544,1.05293,0.978625,1.07629,1.04883,1.06628,0.998732,1.01158,1.02784,1.00738,1.05279,1.02875,1.04183,0.988413,1.12231,1.13697,1.09265,1.07858,1.16419,1.04283,1.07991,0.999276,1.22898,1.21518,1.1017,1.15056,1.04337,1.33651,1.03363,1.29763,1.34739,0.938754,0.817433,0.960842,1.14958,0.960842,1.31773,0.800702,1.20105,1.33682,1.04819,0.58486,1.31024,0.660579,1.44126,1.0676,1.17436,3.84337,0.480421,0.960842,0.360316,3.36295,0.480421,0.960842,1.20105,1,0.480421,0.960842,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, + // (35,45)cm + { 0.87147,0.942423,1.05126,1.06794,1.0474,1.02266,1.01063,1.00401,1.00134,0.991022,1.00504,1.00007,0.992486,0.995921,0.995444,0.999034,1.00536,0.99879,0.99793,0.997579,0.995836,0.996429,0.990756,0.990942,1.00056,0.990505,1.00901,0.999481,0.999723,0.996038,0.990362,0.998169,1.00967,1.00013,0.997206,0.991759,1.00311,0.994353,1.00172,0.994271,0.99635,0.999798,1.00509,0.988141,0.99193,0.992788,0.98826,0.990287,1.00468,0.988625,1.00568,1.00043,0.999865,0.998036,1.00015,0.99808,0.999299,1.00264,0.997162,1.00929,1.01102,0.999815,0.999559,0.998632,1.0032,1.01185,0.997041,0.99202,0.996873,1.01012,1.00281,0.999672,1.00807,1.00071,1.00455,0.997142,0.999818,1.00281,1.00065,1.00486,1.00542,0.994658,1.0108,1.0145,0.985778,1.01008,1.0079,0.988409,0.987994,0.985082,1.00106,1.00189,1.00262,1.01175,0.985732,0.998148,0.993932,0.996448,1.00477,1.00758,1.01157,0.990275,1.00157,1.01071,0.996851,0.990517,0.999578,1.00683,0.995724,1.01066,1.01904,1.00686,0.983166,0.994554,1.00654,1.01079,0.994816,0.986143,1.01662,0.994138,1.01181,1.00228,1.01049,0.986082,1.00764,0.998519,1.01392,1.00362,0.999508,0.996727,1.01174,0.996183,1.00151,0.998997,1.0117,1.01559,1.00505,1.01417,0.994364,0.994301,1.01747,0.99966,1.00459,1.00932,1.00701,1.00649,1.00484,0.993406,1,0.997454,1.00028,1.02189,1.01815,1.01052,1.02536,1.0048,1.01172,1.01594,1.00751,1.00067,0.998255,0.988877,0.989023,1.01112,1.00807,0.993385,1.0028,1.01887,1.02182,1.00492,1.01296,1.03087,1.0008,1.0119,1.00976,1.01059,1.00829,0.987907,0.999687,1.02799,0.998125,1.00764,1.00792,1.01508,1.00221,1.01223,1.00648,1.02794,1.00854,0.995107,1.01223,0.998711,0.994481,1.00034,1.01222,1.04206,0.995093,1.013,1.00021,1.01105,0.995863,1.01066,1.0048,1.00028,1.00486,0.995931,1.00858,0.994587,1.01166,0.982989,0.984457,1.00165,1.05013,1.0114,0.995702,0.999907,1.00196,1.00272,1.00541,1.00299,1.02084,1.01998,1.01476,1.00439,0.990499,1.03036,0.992398,1.00708,1.00568,0.981548,0.985466,0.991765,0.98962,1.01445,1.00512,1.00633,0.996394,1.02595,1.01161,1.00384,1.02208,0.991332,1.00261,0.997522,0.994426,0.996628,0.981883,0.987136,0.99162,0.986485,1.00329,0.967736,1.01227,0.995976,1.00511,1.00727,1.00847,0.988663,0.962257,0.991612,0.980027,1.01421,0.992083,1.01378,0.975213,0.965005,0.960256,1.01025,0.998446,0.994484,0.993379,0.964587,1.00884,0.978722,1.00375,1.00858,0.958088,0.970348,0.999555,0.976818,0.988994,1.00854,1.02575,0.967987,1.00959,1.0075,0.956235,0.97114,1.10076,1.03177,1.01299,1.03767,1.03298,1.05055,0.998503,1.10871,1.00644,1.08522,0.976002,1.04451,1.12441,1.00482,1.13598,1.05894,1.0157,1.11824,0.940319,1.02401,1.00156,0.99322,0.933403,1.08422,1.23771,1.21776,1.00469,1.29311,0.943332,0.736575,0.880444,1.03612,0.920872,1.25778,1.57222,0.808571,1.25778,1.132,0.695087,1.01071,1.03767,1.01071,1.04815,2.59416,1.88666,0.377333,0.188666,1,1.32067,0.157222,0.943332,2.35833,1.25778,0.943332,0.471666,1,0.943332,1,1,0.314444,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, + // (45,55)cm + { 0.834842,0.816359,1.00328,1.06932,1.06029,1.02268,1.02327,1.02206,1.01479,1.01071,1.01767,1.01236,1.00434,1.00489,1.01122,1.00465,1.01443,0.995964,1.00836,1.00075,0.994708,1.00155,1.00569,0.996983,1.00928,1.0039,1.0199,1.02073,1.00288,1.00481,1.00322,0.997487,1.01034,1.01068,1.00642,0.995408,1.017,0.999794,1.01061,1.00524,1.00212,1.00164,1.00061,0.994891,1.00205,1.01353,0.994659,1.00187,0.998908,1.00429,1.01326,1.02001,1.00564,0.998945,1.00186,0.998324,1.00055,0.998674,1.01413,1.01339,1.01055,1.00088,1.00481,1.0028,1.01204,1.02025,1.00229,1.01494,1.01308,1.0197,0.994959,1.0075,1.00986,0.998295,1.00097,1.00154,1.00489,0.998439,1.00124,1.01475,1.01034,1.00061,1.01849,1.0075,1.0031,1.00888,0.996802,1.00502,0.990711,1.00351,1.02496,1.01673,0.995679,1.00507,0.981392,0.999535,1.01599,1.00292,1.01903,1.00252,1.01075,1.00319,0.993475,1.0251,1.02013,1.01386,1.00913,1.01492,1.00162,1.02329,1.02505,1.01152,1.01176,0.998793,1.01691,0.998341,1.02212,1.00937,1.02133,1.0019,1.01335,0.999039,1.01657,1.00755,1.02222,1.01933,1.00693,1.00022,1.01093,1.00732,1.0088,1.00974,1.02027,1.00353,1.02263,1.00918,0.993873,1.00897,1.00859,1.01278,1.03246,0.990329,1.01656,1.03649,1.00322,1.00928,1.00295,1.02866,1.01614,1.01492,0.991349,0.999727,1.0223,1.00719,1.02422,1.03209,1.02169,1.00444,1.01117,1.00443,1.00758,0.994632,1.0063,0.996777,1.00608,1.00662,1.00856,1.01254,1.01945,1.01215,1.01542,1.02333,1.01159,1.02591,1.01012,1.00795,1.01441,1.00192,1.01133,1.04232,1.00544,1.02082,0.992639,1.03949,1.0147,1.02488,1.01893,1.0036,1.01104,1.02644,1.01982,1.01556,1.00779,1.04954,1.028,1.04096,0.999782,1.03524,1.01656,0.994951,1.02463,1.01668,1.00721,1.00899,1.01083,0.990027,1.01023,0.983722,1.02585,0.998493,1.01906,0.979754,1.04286,1.04885,1.00431,1.01087,1.00743,1.01865,1.0068,1.02076,1.01719,1.02191,1.02412,1.00871,0.998345,1.00965,0.993391,1.01171,1.01656,1.00128,1.02993,1.0087,1.00831,1.01915,1.00158,1.01624,0.98407,1.0269,1.02522,1.01944,1.01567,1.02208,1.00135,1.02452,1.01695,0.990312,1.01935,1.0104,1.03358,1.00618,1.01597,0.99985,0.997091,1.01248,0.999203,0.999968,0.979387,0.999506,0.99502,0.995988,1.01406,1.01536,1.02153,1.01481,1.02263,0.983655,0.989711,1.01341,1.04328,1.00528,0.991759,1.0027,0.992672,1.02264,1.01003,1.0138,0.991389,0.992859,1.00558,0.978424,0.965826,0.980375,0.998907,0.976228,1.02486,1.03202,1.0579,0.995862,1.04972,1.01156,1.05123,1.0019,0.969781,1.00581,1.01162,1.02155,1.04842,1.14933,0.969219,1.03329,1.15604,1.10046,1.07142,1.13256,1.08453,1.18965,1.04827,1.12505,1.06332,0.935861,1.00772,0.971211,1.28987,1.03684,1.34976,1.20354,0.866173,0.943874,0.837574,1.01853,0.775916,1.43584,0.901556,1.03035,1.56179,0.927314,1.18022,0.695486,1.02005,1.15914,1.32473,1.45721,1.23642,0.927314,0.231829,1,1.6228,0.927314,0.927314,2.31829,3.70926,0.927314,0.927314,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, + // (55,65)cm + { 0.824175,0.792445,0.996505,1.07233,1.0677,1.03038,1.03448,1.02731,1.02386,1.01592,1.02571,1.01448,1.01034,1.01649,1.01139,1.01677,1.01569,0.99602,1.00741,1.00814,1.00589,1.00708,0.995979,1.00155,1.00841,1.0008,1.01282,1.01146,0.999986,1.0082,0.999906,1.0079,1.00196,0.999937,1.00195,1.00057,1.0183,0.998004,1.00531,1.00544,0.997823,1.00875,1.00904,0.994095,1.00377,0.992373,1.00751,1.00739,0.997642,0.999427,1.01436,1.00996,1.00391,1.00073,1.00511,1.00215,0.997323,0.999025,1.00205,1.0118,1.00526,1.00008,1.00812,1.01255,1.00981,1.0137,1.01241,1.01323,1.0037,1.01295,0.991983,1.01146,1.01632,0.996837,1.00874,1.00575,1.00057,1.00055,1.0017,0.999267,1.01107,1.00326,1.01887,1.00629,1.00977,1.01075,1.00837,1.00926,0.999599,1.00094,1.00469,1.01293,0.995899,1.00728,0.986896,1.00117,1.00974,0.998658,1.01548,1.01162,1.0098,0.997325,1.01443,1.01237,1.01095,1.00554,1.02088,1.02766,0.995354,1.02572,1.01469,1.01172,1.0022,1.00399,1.02045,1.00487,0.997335,1.00291,1.00741,0.997406,1.01007,1.00977,1.0127,1.00552,1.01493,0.99892,0.999212,1.01435,0.998998,1.00292,1.03178,1.0086,1.01724,1.00146,1.01109,1.02157,0.998331,1.01172,1.01547,1.00637,1.01713,1.01312,1.01208,1.04123,1.01193,1.00971,1.01252,1.01535,1.00678,1.00556,0.990279,1.00399,1.00986,1.01124,1.03326,1.01879,1.00032,1.00967,1.02248,1.01153,0.996981,1.00948,0.995255,0.989423,1.01554,0.996526,1.01391,1.03095,1.03441,1.01291,1.01499,1.02146,1.02504,1.00382,1.00699,1.02385,1.01607,0.997969,1.00484,1.03947,1.00583,1.0247,1.02938,1.02996,1.01973,1.02055,1.04016,1.02387,1.02287,1.0186,1.01545,1.02455,0.987908,1.03014,1.02518,1.04789,0.993018,1.02719,1.02617,1.00107,1.03876,1.01397,1.00486,1.02152,0.986337,1.02701,1.00654,0.996329,1.02294,1.00968,1.02346,0.994267,1.03975,1.01637,1.00131,1.01727,1.00327,1.03755,1.01402,1.03838,1.00374,1.01452,1.03604,1.02865,0.991937,1.04451,1.00948,0.99995,1.03429,1.02577,1.02431,1.00369,0.985493,1.03717,1.00248,1.02972,0.995445,1.03446,1.025,1.01098,1.01515,1.04628,1.02979,1.03446,1.0225,1.02604,1.01014,1.02479,1.01292,1.00054,1.0255,1.03276,0.989249,1.02477,0.999406,1.00406,1.00746,1.00417,1.00863,1.02534,1.01129,1.00515,1.02875,1.00331,0.996297,1.00298,0.990776,1.0336,1.00794,1.01051,1.02425,1.00691,1.00188,1.02604,0.989587,1.0208,0.966742,1.00602,0.973047,0.981084,0.978204,1.01253,1.03131,0.971919,1.0409,0.995307,1.04437,0.98719,1.10764,1.03724,1.10479,1.04507,0.988737,1.03624,1.12004,1.04437,1.04689,1.09045,0.992947,0.993507,1.20637,1.10123,1.15801,1.12071,1.01517,1.15837,1.09192,1.15941,1.02624,0.955275,0.943061,1.07986,1.20174,1.05095,1.00241,1.55151,1.11231,0.791801,0.991453,1.14144,1.00054,1.1113,1.17047,1.00326,1.60521,1.08352,0.486194,1.693,0.662149,1.3544,0.752442,1.65537,1.20391,0.25798,0.300977,2.70879,2.10684,0.225733,1.80586,2.25733,1.80586,0.902931,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, + // (65,75)cm + { 0.771619,0.849222,1.04094,1.08227,1.0767,1.04238,1.04024,1.03164,1.02622,1.01501,1.0244,1.01754,1.00766,1.0097,1.01445,1.0171,1.01277,0.999377,1.0063,1.00132,0.995691,1.00231,0.997176,0.995972,1.00286,0.998877,1.00865,1.00504,0.997267,1.00624,1.0019,0.997726,1.00565,1.00373,0.998798,0.991753,1.0166,0.992618,1.00229,1.00701,0.999727,1.00653,0.994367,0.996179,0.995159,0.998137,0.998982,1.0039,1.00644,0.998982,1.00055,1.01212,1.00536,1.00382,1.00915,1.00916,1.0026,0.999728,1.00067,1.00474,1.0085,0.997302,1.00427,0.997845,1.0117,1.00871,1.00204,1.00076,1.0024,1.00766,0.991099,0.991112,1.0073,1.00683,1.00516,0.999243,0.994586,1.00407,1.00288,0.993484,1.01869,1.00095,1.01732,1.00018,0.988104,1.00894,0.997112,0.990465,0.99175,0.982294,0.993873,1.01655,1.00911,1.00828,0.981656,0.994272,1.00099,0.997745,1.01602,0.994489,1.00707,0.995831,1.00318,1.02031,1.01595,0.997174,1.01439,1.01957,0.991129,0.99581,1.01335,1.01732,1.00411,1.01168,1.0144,1.01437,1.00096,0.996442,1.00309,0.990852,0.992488,1.00009,0.999274,0.981739,1.01996,1.00006,1.02119,1.00106,1.00606,0.98432,1.01085,0.987121,0.999086,1.01106,1.00256,1.00136,0.990825,1.00447,1.00327,1.00634,1.01952,0.999095,1.00112,1.01308,0.980488,1.00368,1.01471,1.01933,0.995851,1.01068,0.991897,1.01279,0.998599,1.00779,1.01703,1.01184,1.01641,1.01445,1.01185,1.03139,0.979207,0.993593,0.980443,1.00082,1.01085,0.999419,1.00558,1.01452,1.03016,1.01464,1.0124,1.00898,0.979288,1.01349,1.01194,1.00814,0.99319,1.01669,1.00706,1.03119,1.00469,1.02555,1.00717,1.02264,1.00355,1.03691,1.01022,1.0173,1.01799,1.01942,1.0277,1.02474,1.00308,1.01684,1.01521,1.03534,0.994369,1.01403,1.01552,1.01646,1.02202,1.00987,1.00299,0.998294,0.998519,1.01063,1.01483,1.00469,1.02008,1.00606,0.998622,1.02531,1.03812,1.02762,1.00784,1.03218,0.998616,1.02558,1.00224,1.01177,1.01024,1.02282,1.03138,1.02478,1.00537,1.03045,1.02084,0.995892,1.01413,1.01143,1.01408,1.02702,1.02909,1.01012,1.01138,1.01839,1.00024,1.02903,1.0305,1.0326,1.01076,1.03153,1.03705,1.03714,1.0363,1.01536,1.04412,0.990553,1.00257,1.01439,1.0242,0.98373,0.998724,1.0291,1.01705,1.00638,1.00348,0.990852,1.00737,1.01549,1.01949,0.999589,1.02557,1.00247,0.999606,0.975528,0.969571,1.03346,1.00544,1.01364,0.990312,0.998481,0.983438,0.996977,1.02209,1.01649,0.967123,0.969341,1.01392,0.965794,0.968467,0.980638,1.03492,0.992865,1.00916,1.02767,1.02171,0.940485,1.03377,1.05146,1.06094,1.0594,0.9685,1.05409,1.11368,1.06241,1.01195,1.1048,1.01496,1.04112,1.11515,1.0686,1.08662,1.07472,1.10038,1.10955,0.963184,1.17741,1.01174,0.977717,0.919479,1.10857,1.51939,1.23621,1.03677,1.34442,1.05712,0.827042,0.855297,1.49559,0.793186,1.19392,0.761749,1.08821,1.07147,1.09967,1.35422,1.08821,1.06403,0.87057,0.87057,1.36804,0.87057,0.435285,0.29019,1.30586,2.03133,0.87057,0.87057,1.45095,3.48228,0.87057,1,1,0.87057,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, + // (75,85)cm + { 0.794158,0.836011,1.02024,1.08018,1.08258,1.05434,1.06218,1.05114,1.03707,1.02852,1.03718,1.02205,1.01844,1.01808,1.01379,1.01571,1.0115,1.00348,1.00136,0.9985,0.995261,1.00143,0.997598,0.99218,0.99565,0.993794,1.00592,0.998993,0.997762,1.00497,0.993733,1.0029,1.00529,1.00575,0.998505,0.979903,1.01506,0.994221,0.991644,0.999716,0.988997,1.01028,1.00146,0.994941,0.99149,0.990775,0.994996,0.993127,0.998195,0.989401,1.00834,1.00941,0.999088,0.992342,0.999648,0.994982,0.9967,0.999128,0.993368,1.00217,0.999596,1.00049,1.00079,0.991109,1.0094,0.99006,1.00678,1.00104,1.00019,1.0066,0.997009,1.01265,1.00158,0.993064,0.991279,0.999119,1.00209,0.99784,0.989747,1.00393,1.01597,0.994359,1.016,1.00128,0.993393,1.00089,0.992595,1.0009,0.984581,0.994373,0.992319,0.999204,0.997854,0.991214,0.984377,0.993626,1.01021,1.00965,1.00579,1.00473,1.01149,0.99997,1.0044,1.0301,1.01734,1.00254,0.997991,1.01984,0.986575,1.00481,1.00968,1.00793,0.990776,0.991715,0.994271,1.01542,0.999099,0.990659,1.0084,0.986046,1.00197,1.00817,1.00281,0.996963,1.00461,1.00335,1.00085,0.995081,1.00811,0.999673,1.01779,0.992581,1.0088,0.988841,1.00823,1.01412,0.987624,0.998605,1.01676,0.997951,1.00371,0.997815,1.00243,1.00159,0.993129,0.997536,0.996812,1.00977,1.0047,0.996372,0.983155,0.995072,1.01272,1.01334,1.01706,1.01043,1.01928,1.02606,1.01654,1.00264,0.996909,0.990705,1.0071,1.00822,1.00129,0.994705,1.01248,1.00258,1.01243,1.00146,1.01486,1.0272,1.00286,1.01373,1.00167,1.00457,1.00204,0.999974,1.0198,1.03629,0.996062,1.01768,1.0006,1.0151,0.996958,1.02757,1.03043,1.02811,1.03212,1.01355,1.01337,1.02339,1.00589,1.01123,1.02907,1.05653,1.00042,1.01138,1.0178,1.00639,1.02538,1.00016,0.99508,1.00994,1.00203,0.994632,1.01834,1.01977,1.0296,0.999557,1.00463,1.00363,1.03413,1.03037,1.02055,1.03356,0.997117,1.0119,1.01483,1.04081,1.02885,1.02025,1.03968,1.02689,1.00092,1.04331,1.01587,1.00334,1.01535,1.01775,1.01758,1.00475,1.00672,1.03352,1.01465,1.0272,1.00651,1.01355,1.03276,1.02503,1.03839,1.02617,1.01572,1.02779,1.03692,0.992932,1.02023,1.00795,1.01905,0.985474,1.03346,1.00322,0.985812,1.00761,1.01694,1.00307,1.00432,1.01571,1.0061,1.00115,0.989564,0.997024,1.00782,1.02739,0.998547,0.986181,0.963737,0.996342,1.00277,0.996116,1.01531,0.990897,0.985631,1.00602,0.9831,0.988995,1.00276,1.00173,0.993031,0.933883,0.934604,1.01077,0.970344,0.92685,0.979611,1.01186,0.92728,0.938631,1.01075,1.00236,0.98263,0.992761,0.935404,0.971097,1.05712,1.08621,1.00079,1.0047,0.959637,1.05595,1.05662,1.00051,0.963706,1.04559,0.924124,0.958235,0.889138,1.11938,1.08625,0.912872,0.910487,1.02274,1.0993,1.02563,1.15534,1.13574,1.06293,0.654205,0.617357,1.07953,0.673559,0.914009,0.792553,1.00541,1.4111,0.804328,0.689987,0.837842,0.542133,1.14251,1.3964,0.837842,0.837842,0.335137,0.279281,0.837842,1.46622,0.279281,0.837842,1.3964,3.35137,0.418921,0.837842,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, + // (85,95)cm + { 0.797912,0.834582,1.01923,1.08978,1.0957,1.06931,1.0774,1.05908,1.04831,1.02943,1.0428,1.02589,1.02553,1.0176,1.0207,1.01607,1.00814,0.996843,1.00862,1.00149,0.988112,0.994866,0.994954,0.985704,0.992254,0.990661,1.00059,0.99779,0.996108,0.990521,0.992555,0.989151,0.992652,0.994343,0.995562,0.983817,0.997529,0.991948,0.994998,0.989525,0.983446,1.00382,1.00096,0.978148,0.988714,0.987688,0.981272,0.999274,0.98918,0.98873,1.00076,1.00556,0.999287,0.991627,0.995959,0.983549,0.979578,0.986015,0.98999,1.01647,0.992054,0.992592,1.00573,0.988939,0.996413,1.00371,0.993333,0.989505,0.992747,0.994697,0.9922,0.987322,0.988997,0.992456,0.993402,0.999444,0.989102,0.983888,1.00088,1.00228,1.00718,0.99085,0.995691,0.993674,0.989652,0.994204,0.996995,0.989523,0.971954,0.995435,0.995247,0.991248,0.985141,0.9883,0.979506,0.997461,1.00681,0.979523,0.994062,0.974502,0.992884,0.985929,1.00225,1.01119,0.990402,0.995599,0.989668,1.00568,0.998253,1.00602,0.987555,1.00746,0.979276,0.998305,1.00713,0.995586,1.01418,0.997734,0.997306,1.00451,0.987122,0.998279,1.00159,0.98528,0.993611,1.00261,1.00055,0.990053,0.994166,0.988753,0.999751,1.01225,0.994506,0.999532,1.00366,1.00376,0.995248,1.00396,0.989828,0.993498,1.0027,0.994592,0.987244,1.01359,0.984106,1.01428,0.999755,1.00559,0.99953,1.00116,0.982698,0.996253,1.00604,1.01681,1.00389,1.01886,1.01917,1.01115,1.01097,1.00514,0.990982,0.986423,0.984002,0.996076,1.01493,0.982893,0.999903,1.02295,1.02876,1.00387,1.01983,1.0072,1.01107,1.01769,1.01496,1.02996,0.999264,1.0008,1.01572,1.0213,1.00057,1.03142,1.01965,1.02865,1.02126,1.02549,1.03541,1.0091,1.01888,1.03617,1.02617,1.02707,1.00827,1.01475,1.03754,1.02734,1.02487,1.0189,1.02561,1.01814,1.0376,1.01347,1.02448,1.014,1.01455,1.01499,1.03141,1.01156,1.02912,1.0344,1.00401,1.0315,1.04213,1.02256,1.01802,1.03869,1.02185,1.03556,1.01566,1.02788,1.04715,1.05785,1.03072,1.02865,1.00719,1.04971,1.02182,1.03126,1.02486,1.04443,1.04944,1.01848,1.0103,1.02972,1.01871,1.05496,0.999064,1.05115,1.01209,1.03573,1.03858,1.05631,1.04857,1.05011,1.05412,1.04097,1.04617,1.02011,1.03669,1.00947,1.03214,1.02547,1.03102,1.03471,0.999873,1.0265,1.01527,1.02583,1.02719,1.00952,1.0107,1.03022,1.0238,1.00074,1.02286,0.994114,0.979014,1.00028,1.03896,1.02252,1.00618,0.987611,1.01198,1.0074,1.01052,0.962957,1.00481,0.985932,1.02847,0.972224,0.940255,0.989919,0.980076,1.0088,1.02755,0.983747,0.991393,0.952141,1.00516,1.00755,1.0011,0.99928,0.988441,0.998002,1.08257,1.04931,0.998953,1.04161,0.97359,1.01884,1.17381,1.03443,1.03523,0.950576,1.04508,1.1572,0.912248,1.13466,0.94381,0.88611,0.836747,1.00569,1.3001,1.29275,1.2347,1.08599,0.884376,0.815447,0.934664,1.01276,0.995357,0.937921,0.904514,0.775298,1.34929,1.37338,0.700998,0.801141,0.629468,0.924393,0.890156,1.10157,3.20456,0.40057,0.40057,2.40342,1.86933,0.133523,0.534094,1,1.06819,1,0.40057,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, + // (95,105)cm + { 0.777778,0.828612,1.02096,1.10541,1.11995,1.08746,1.08699,1.07165,1.05803,1.04815,1.04221,1.03163,1.0268,1.02077,1.01593,1.01391,1.00713,0.992234,1.0051,0.994254,0.988789,1.00716,0.990587,0.983495,0.988034,0.989474,1.00308,0.997593,0.98507,0.984633,0.983174,0.980021,0.994896,0.987081,0.984127,0.970192,1.00302,0.976031,0.988189,0.973167,0.984815,0.974652,0.986805,0.980883,0.976339,0.984959,0.975293,1.00345,0.97998,0.980874,0.999172,0.999324,0.983159,0.983352,0.979978,0.974825,0.976775,0.979085,0.98631,1.00524,0.995094,0.981146,0.992703,0.985867,0.986764,0.988277,0.993431,0.986647,0.993237,0.990349,0.973815,0.989628,0.985733,0.978064,0.987777,0.983223,0.993141,0.983088,0.983761,0.985117,0.982382,0.983802,0.99678,0.997962,0.981466,0.995185,0.992095,0.983028,0.981084,0.988519,1.0001,1.00044,0.985532,0.995847,0.982387,0.990438,0.983747,0.985351,1.00471,0.983081,0.988849,0.978903,0.984084,1.00576,0.998372,0.976373,0.999369,1.01003,0.986447,1.01078,0.996913,1.00077,0.993871,0.973467,0.998765,0.996471,1.00308,1.00129,0.992542,0.981309,0.991823,0.986109,0.985817,0.97033,0.988469,1.00363,0.99732,0.987332,0.983578,0.99659,1.00617,0.98314,1.00598,0.99065,1.01379,0.996731,0.993051,0.991056,1.00092,0.987809,1.00548,1.00236,1.00173,1.01454,1.00039,0.997767,0.995412,1.01606,1.00792,1.01405,0.987806,0.982506,0.998538,1.00266,1.00793,1.00528,1.00313,1.01859,1.01503,1.02339,0.997919,0.998324,1.00638,0.998805,1.00105,0.987246,0.999609,1.02732,1.02951,1.00498,0.999248,1.02313,1.03247,1.02613,1.01761,1.01422,1.01591,1.00923,1.03616,1.04527,1.00108,1.02347,1.0295,1.03726,1.02488,1.06853,1.04013,1.02676,1.05166,1.02548,1.03208,1.035,1.0394,1.04486,1.04544,1.04911,1.02154,1.05774,1.02197,1.02301,1.05854,1.0363,1.01352,1.03003,1.01369,1.04263,1.02402,1.01923,1.04165,1.02163,1.0391,1.05787,1.08403,1.04641,1.04897,1.04647,1.03749,1.05272,1.0227,1.0449,1.04031,1.03242,1.05424,1.06678,1.01045,1.06978,1.02053,1.04533,1.04046,1.04761,1.04226,1.05051,1.02699,1.06412,1.04245,1.06885,1.03282,1.05342,1.05155,1.0242,1.05978,1.05012,1.06257,1.07473,1.05677,1.042,1.03575,1.0622,1.04879,1.04207,1.05441,1.01533,1.02982,1.03986,1.02828,1.03167,1.02445,1.03362,1.00093,1.02953,1.05996,1.01305,1.04306,1.04373,1.02976,1.01834,0.989595,1.03632,1.03539,1.01048,1.01616,1.00128,1.03568,0.998865,1.05744,1.01832,1.01618,0.995214,0.993071,0.979098,0.959744,1.00176,1.03263,0.96444,1.0293,1.03481,1.03679,1.00366,1.03941,1.05166,1.04545,1.05493,1.03227,0.964533,1.01203,0.987527,1.00476,1.07384,0.876363,0.971707,1.11497,0.996028,1.01626,1.03042,1.04166,0.981684,0.948048,1.16523,1.04667,0.927943,0.853489,1.01501,1.35671,0.984567,0.95155,1.25741,1.08048,0.630051,1.18641,0.964159,0.744533,0.795853,0.834195,1.43005,1.7433,1.22031,1.06777,0.817171,1.0487,1.43005,0.953366,1.39827,2.03385,0.381346,0.217912,0.762693,2.66942,0.762693,0.762693,1.90673,3.05077,1,0.762693,1,0.762693,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, + // (105,115)cm + { 0.741851,0.806977,1.01604,1.12953,1.14362,1.11003,1.10603,1.08871,1.07732,1.06247,1.05898,1.04269,1.03108,1.0314,1.02658,1.01694,1.00995,0.995204,0.990264,0.994237,0.988075,0.995597,0.975805,0.971408,0.99394,0.977027,0.992703,0.978623,0.983494,0.979392,0.980561,0.983175,0.990555,0.97397,0.970876,0.978228,0.990891,0.972404,0.979322,0.982258,0.968587,0.979571,0.97592,0.967716,0.969358,0.983892,0.958099,0.982383,0.9864,0.964252,0.983084,0.988279,0.97954,0.98583,0.976699,0.960618,0.967726,0.970823,0.975921,0.999958,0.988666,0.970771,0.992493,0.981157,0.975637,0.974414,0.983511,0.989417,0.979299,0.9863,0.975571,0.979109,0.971437,0.973901,0.98013,0.978768,0.97411,0.97867,0.98307,0.991418,0.997557,0.976113,0.976515,0.986931,0.983047,0.978709,0.983162,0.981196,0.964327,0.970933,0.99146,0.991436,0.988922,0.990496,0.984088,0.975861,0.989872,0.976559,0.989769,0.981122,1.00574,0.980196,0.997099,0.990117,0.976573,0.97929,0.986282,0.988291,0.993048,1.00489,1.00766,0.993067,0.980327,0.98973,0.99907,0.990291,0.980259,0.968714,0.995995,0.985069,0.99496,0.990208,0.999207,0.975993,0.978524,0.983527,0.988852,0.992626,1.00479,0.992093,0.990029,1.00387,0.995398,0.996183,0.996498,1.01202,0.995984,0.990179,1.00136,0.99762,1.00444,1.0041,0.988931,1.00817,1.0057,1.00897,1.00731,1.01844,1.00905,1.01478,0.989234,0.999493,1.01074,1.0183,1.02997,1.02752,1.02557,1.02246,1.01637,1.00978,1.00814,1.00609,0.99187,1.00427,1.01736,1.00977,1.02827,1.03079,1.021,1.02032,1.02137,1.04003,1.01222,1.02332,1.02373,1.03346,1.0164,1.00773,1.00803,1.04416,1.04514,1.03302,1.01325,1.04435,1.03985,1.05567,1.03176,1.03891,1.04784,1.02515,1.04883,1.03548,1.03827,1.0381,1.06149,1.06441,1.03161,1.03254,1.03839,1.04282,1.08968,1.04533,1.04561,1.04169,1.03801,1.07099,1.05814,1.02556,1.04857,1.06931,1.0608,1.05776,1.08943,1.06612,1.07041,1.0804,1.0702,1.05342,1.05495,1.10033,1.09069,1.05959,1.09375,1.08176,1.04876,1.09736,1.05711,1.03765,1.06498,1.0684,1.093,1.09331,1.06102,1.08562,1.06468,1.0925,1.03553,1.10762,1.10001,1.08462,1.13168,1.09608,1.05961,1.10468,1.11449,1.07711,1.04083,1.05451,1.09989,1.0607,1.09048,1.06771,1.04926,1.07219,1.07146,1.06993,1.07299,1.07608,1.02739,1.06301,1.08526,1.05495,1.05513,1.05686,1.03003,1.06144,1.03619,1.03168,1.05603,1.0374,1.02127,1.04674,1.02339,1.03611,1.06911,0.985075,1.02758,1.01976,1.02371,0.991863,0.99788,0.989594,1.07741,0.981659,0.974679,1.01764,1.0079,1.00752,1.09352,1.0227,1.00656,0.991494,0.939457,1.0507,0.988664,0.966505,0.979273,0.993201,0.911141,1.00936,1.08186,1.00211,1.00894,1.05617,0.960036,1.04259,0.966525,1.16761,0.985309,0.963862,0.976242,0.960586,1.04322,1.0789,1.08684,1.33423,0.973852,0.64285,0.962395,1.07467,1.09606,1.11762,0.935662,0.801996,0.721796,0.911743,0.842096,0.984268,0.882195,1.08269,0.902245,0.882195,0.962395,0.240599,0.360898,0.721796,1.26314,0.240599,1.44359,1.20299,0.962395,0.180449,1,1,0.721796,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, + // (115,125)cm + { 0.70451,0.785358,1.01737,1.15508,1.17307,1.1419,1.13115,1.11198,1.08918,1.07655,1.07557,1.05212,1.03076,1.0262,1.02122,1.01274,1.00568,0.989192,0.987986,0.984593,0.977669,0.980772,0.977383,0.968417,0.975292,0.972265,0.983948,0.980147,0.968644,0.974572,0.974789,0.964147,0.974182,0.962738,0.962688,0.954887,0.983601,0.96152,0.9715,0.966068,0.969322,0.967026,0.976399,0.948876,0.951979,0.963786,0.967841,0.967308,0.972082,0.955945,0.981002,0.976572,0.96903,0.965163,0.969763,0.966509,0.960133,0.964561,0.965036,0.978758,0.962216,0.964432,0.982394,0.957083,0.980971,0.975329,0.970921,0.966487,0.977826,0.980796,0.977461,0.978913,0.981185,0.972405,0.966338,0.965859,0.966748,0.976598,0.967216,0.975441,0.995375,0.978147,0.987985,0.977244,0.972233,0.979866,0.974273,0.968891,0.95714,0.957858,0.979285,0.990791,0.970169,0.96496,0.949256,0.982611,0.977698,0.981255,0.989753,0.967313,0.965992,0.976331,0.97496,0.973555,0.98593,0.970416,0.99082,1.00535,0.980365,1.00844,0.986416,0.981256,0.962739,0.976607,0.991538,0.97776,0.98704,0.982757,1.0032,0.98458,0.982494,0.9811,0.996992,0.975093,0.988801,0.991294,0.989722,0.975766,0.978097,0.978038,1.01095,0.992698,1.00051,1.00064,1.01884,0.990114,0.99323,0.979204,1.01103,0.99747,1.00617,0.999916,1.00113,1.01672,1.00701,1.00592,1.00311,1.01412,0.993438,1.01877,0.994799,1.02056,1.01498,1.03199,1.0252,0.997481,1.03941,1.03456,1.04123,1.03122,1.00537,1.00817,1.02046,1.02072,1.027,0.999748,1.04477,1.05307,1.05946,1.05185,1.02075,1.0377,1.0263,1.04569,1.0458,1.05441,1.04055,1.0441,1.05658,1.06685,1.03082,1.05861,1.04026,1.06001,1.06674,1.05074,1.0702,1.04534,1.06121,1.06795,1.07753,1.06859,1.05304,1.07583,1.06804,1.09333,1.05999,1.09187,1.06502,1.0817,1.07441,1.07847,1.0751,1.08741,1.06467,1.08143,1.07523,1.09457,1.08001,1.09414,1.08684,1.07994,1.12166,1.14348,1.09689,1.12042,1.11045,1.10742,1.09734,1.10656,1.09271,1.12278,1.15013,1.11241,1.08485,1.09046,1.10779,1.09959,1.12037,1.11239,1.12004,1.13127,1.11071,1.11729,1.13278,1.13023,1.1179,1.14378,1.1129,1.13985,1.19021,1.15,1.14882,1.15458,1.1309,1.13287,1.12783,1.11283,1.14931,1.09484,1.14078,1.08846,1.1317,1.13675,1.10431,1.12684,1.07002,1.11047,1.08896,1.08514,1.14374,1.10519,1.14267,1.1241,1.08694,1.08815,1.06346,1.10261,1.09178,1.07539,1.05323,1.06292,1.08246,1.06674,1.06408,1.03279,1.02406,1.02417,1.05454,0.980687,1.0081,0.979371,1.06853,1.0116,1.08235,1.11922,1.0661,0.98769,1.02406,1.00501,1.03234,1.00342,1.02344,0.96753,0.980833,1.01865,0.999996,0.97839,0.958021,1.10045,1.00581,1.05218,0.972644,1.0432,1.00457,1.03406,0.864386,1.17274,1.04863,1.08503,0.892362,0.858153,1.18464,1.00401,1.03393,1.10412,0.812606,0.789584,0.717186,0.967601,0.713573,1.20669,1.0329,0.636342,1.03431,0.857387,0.791892,0.848456,0.829602,2.03629,1.13127,2.4888,1.08602,0.45251,0.339382,1,4.75135,1,0.678765,1.69691,2.71506,0.339382,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, + // (125,135)cm + { 0.621725,0.737289,1.0247,1.20721,1.2234,1.17415,1.16051,1.13856,1.11898,1.09177,1.07904,1.06082,1.04059,1.03423,1.02998,1.01605,1.00723,0.995686,0.987783,0.981307,0.976911,0.972035,0.974027,0.962594,0.974955,0.964254,0.970154,0.974033,0.969987,0.965697,0.970556,0.95347,0.974027,0.954092,0.952152,0.9486,0.961279,0.954477,0.966746,0.967428,0.946058,0.958105,0.947871,0.941686,0.949264,0.955665,0.955427,0.952953,0.968361,0.948266,0.96407,0.960911,0.960456,0.953096,0.956453,0.957091,0.949573,0.953051,0.953252,0.962,0.955668,0.950543,0.962801,0.949081,0.966465,0.971673,0.958319,0.9566,0.9779,0.964635,0.959882,0.956675,0.969011,0.951354,0.95423,0.961221,0.976831,0.94712,0.96601,0.965559,0.967549,0.963001,0.968608,0.956236,0.973243,0.979527,0.957882,0.962834,0.950727,0.97631,0.972664,0.966657,0.961444,0.977424,0.947548,0.971413,0.979623,0.956209,0.981681,0.964967,0.963661,0.978214,0.980139,0.97109,0.993926,0.964884,0.975539,0.991924,0.974387,0.988179,0.986323,0.980516,0.963686,0.978088,1.00073,0.988643,0.979658,0.97583,0.995291,0.980267,0.989374,1.00535,0.995542,0.971712,1.00416,0.998563,0.988367,1.0041,0.980747,1.00007,1.01258,1.00619,1.01534,0.984199,1.00092,1.00849,0.985051,0.99893,1.01,1.00839,1.0227,1.01664,1.0165,1.03383,1.02407,1.01956,1.01204,1.03659,1.00598,1.03376,1.00772,1.02806,1.02975,1.03517,1.03329,1.04256,1.04357,1.03425,1.04721,1.04249,1.03528,1.03604,1.03566,1.0486,1.03296,1.02469,1.06286,1.06803,1.07013,1.04466,1.07485,1.04573,1.07672,1.04255,1.07314,1.08902,1.05643,1.08934,1.06285,1.08243,1.0582,1.05695,1.07062,1.08457,1.08447,1.09472,1.10278,1.09613,1.07235,1.09661,1.12808,1.08458,1.10723,1.09514,1.12572,1.1284,1.07031,1.1182,1.10873,1.13914,1.13773,1.10885,1.1179,1.11502,1.10094,1.11559,1.1633,1.14909,1.13985,1.10337,1.1628,1.13386,1.172,1.16357,1.14584,1.16801,1.15529,1.13199,1.14491,1.19274,1.17497,1.13887,1.15998,1.18121,1.14916,1.17531,1.17325,1.17674,1.20167,1.19506,1.19448,1.21193,1.1869,1.21332,1.20673,1.18002,1.24167,1.21941,1.20239,1.18563,1.22861,1.19926,1.21252,1.20385,1.23556,1.2111,1.21759,1.17827,1.24049,1.20802,1.22705,1.18027,1.20658,1.20168,1.20459,1.19381,1.21683,1.19409,1.14933,1.18194,1.11688,1.16262,1.19905,1.17447,1.13532,1.11227,1.13507,1.16443,1.17115,1.11331,1.11323,1.12457,1.09975,1.09906,1.09702,1.12015,1.11948,1.14431,1.07692,1.07622,1.06467,1.07306,1.13894,1.05981,1.01538,1.04633,1.05112,0.93233,1.01107,1.08848,1.04641,1.05283,0.967241,1.00666,1.0394,1.06879,1.05258,1.00888,1.00882,0.887372,1.08591,1.04904,1.18806,1.16718,1.07164,1.04421,0.970503,1.06839,0.884953,0.847369,0.864472,0.92824,1.27602,1.08563,1.27888,1.19102,0.86996,0.695575,0.987092,1.41718,0.929176,1.12811,1.00953,1.46437,1.35373,0.801549,0.740319,1.5864,1.16336,0.951839,2.1152,1.16336,1,0.253824,0.42304,0.634559,1,1,1,1,2.53824,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, + // (135,145)cm + { 0.574187,0.715587,1.03763,1.23004,1.26574,1.23091,1.20923,1.17108,1.15096,1.11798,1.107,1.08055,1.05167,1.03355,1.03215,1.01295,1.00528,0.974031,0.990901,0.974629,0.976215,0.96854,0.961513,0.948017,0.956546,0.953234,0.95854,0.954105,0.948605,0.946757,0.940649,0.943937,0.956349,0.94883,0.937139,0.944339,0.965083,0.938041,0.937935,0.937317,0.938159,0.934444,0.940503,0.932628,0.948423,0.944934,0.933482,0.938568,0.936793,0.936785,0.939965,0.951393,0.936562,0.935725,0.932498,0.938366,0.93716,0.934369,0.945077,0.955022,0.946381,0.946811,0.947112,0.931284,0.945035,0.951763,0.942602,0.934697,0.947488,0.962801,0.93728,0.935115,0.950952,0.938514,0.934245,0.950411,0.933589,0.944183,0.933123,0.96025,0.949634,0.93795,0.955999,0.945855,0.951049,0.95744,0.947309,0.935285,0.949606,0.954851,0.954657,0.95772,0.949687,0.964992,0.957859,0.962818,0.965081,0.955576,0.964266,0.947057,0.967068,0.96608,0.96819,0.971668,0.968948,0.965451,0.974509,0.978715,0.964133,0.970287,0.971048,0.97409,0.96011,0.968435,0.980313,0.97122,0.971742,0.962505,0.983488,0.974708,0.976587,0.977136,0.984679,0.972103,0.98901,0.999565,0.975829,0.995445,0.985756,0.995439,0.984469,1.01381,1.0046,1.00848,0.989034,0.997795,1.0042,1.00282,1.00184,1.00578,1.00579,1.0048,0.999614,1.0329,1.0017,1.01688,1.01917,1.04622,1.02467,1.04307,1.02098,1.02988,1.04965,1.03158,1.03306,1.06615,1.05375,1.04536,1.04655,1.0239,1.07487,1.03636,1.04412,1.04192,1.0693,1.0549,1.05041,1.07661,1.07525,1.07818,1.0759,1.10176,1.08619,1.09308,1.1023,1.09036,1.10139,1.07959,1.10267,1.12318,1.08154,1.12222,1.13124,1.12105,1.09636,1.12702,1.15186,1.12721,1.11211,1.12943,1.15662,1.14836,1.11208,1.15065,1.15269,1.18549,1.12869,1.17922,1.16042,1.17561,1.15839,1.18357,1.14299,1.15715,1.18487,1.15844,1.20622,1.19655,1.19755,1.16521,1.19489,1.23229,1.23804,1.2221,1.22543,1.2365,1.25219,1.23018,1.21086,1.30624,1.23547,1.26982,1.24645,1.27752,1.22868,1.28408,1.30475,1.27966,1.29966,1.28108,1.26704,1.26795,1.26719,1.30452,1.3067,1.31264,1.26147,1.31219,1.32835,1.29971,1.33833,1.31667,1.33716,1.34738,1.34935,1.32991,1.33578,1.31121,1.32931,1.35579,1.36982,1.38393,1.29687,1.33222,1.3109,1.3221,1.28844,1.30529,1.28859,1.27825,1.26106,1.28669,1.31298,1.26142,1.3085,1.24054,1.23132,1.28543,1.28659,1.21582,1.24347,1.21001,1.24057,1.23553,1.20771,1.24572,1.20976,1.19093,1.20805,1.15394,1.20303,1.17958,1.19342,1.14682,1.17674,1.19269,1.11467,1.12842,1.21458,1.07214,1.10855,1.07539,1.18638,1.18536,1.05127,1.15391,1.05584,1.2236,1.01835,1.07514,1.15196,1.18142,1.21337,1.15799,1.21805,1.18531,1.22008,1.20982,1.13787,1.0115,1.31282,1.14093,1.33972,1.09598,1.18218,1.83494,1.27844,0.879868,1.21661,1.31003,0.829301,1.56421,1.86639,1.35364,1.87705,2.01113,0.912456,2.19967,0.921766,2.19967,1.95526,2.15079,2.34631,1,1,1,1,0.586579,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1} +}; + +//------------------------------------------------ +//------------- Au+Au 17.3 GeV 2021 -------------- +//------------------------------------------------ + +// Number of refMult bins +const int auau17_run21_refMultBins = 500; +// Number of z vertex bins +const int auau17_run21_nVzBins = 29; +// Ranges of vz bins +const double auau17_run21_vzRangeLimits[auau17_run21_nVzBins][2] = { + {-145., -135.}, + {-135., -125.}, + {-125., -115.}, + {-115., -105.}, + {-105., -95.}, + {-95., -85.}, + {-85., -75.}, + {-75., -65.}, + {-65., -55.}, + {-55., -45.}, + {-45., -35.}, + {-35., -25.}, + {-25., -15.}, + {-15., -5.}, + {-5., 5.}, + { 5., 15.}, + { 15., 25.}, + { 25., 35.}, + { 35., 45.}, + { 45., 55.}, + { 55., 65.}, + { 65., 75.}, + { 75., 85.}, + { 85., 95.}, + { 95., 105.}, + { 105., 115.}, + { 115., 125.}, + { 125., 135.}, + { 135., 145.} +}; +// Values of vz correction (refMultAtCenter/refMultElsewhere) +const double auau17_run21_vzCorr[auau17_run21_nVzBins] = { + 1.003210, // (-145,-135)cm + 0.996788, // (-135,-125)cm + 0.994615, // (-125,-115)cm + 0.994879, // (-115,-105)cm + 0.994255, // (-105,-95)cm + 0.994783, // (-95,-85)cm + 0.994508, // (-85,-75)cm + 0.999822, // (-75,-65)cm + 1.002460, // (-65,-55)cm + 1.002040, // (-55,-45)cm + 0.997052, // (-45,-35)cm + 0.999140, // (-35,-25)cm + 0.999868, // (-25,-15)cm + 1.00032, // (-15,-5)cm + 1., // (-5,5)cm + 1.00021, // (5,15)cm + 0.998991, // (15,25)cm + 0.997816, // (25,35)cm + 0.995007, // (35,45)cm + 1.000710, // (45,55)cm + 1.000870, // (55,65)cm + 0.997967, // (65,75)cm + 0.992468, // (75,85)cm + 0.992899, // (85,95)cm + 0.991746, // (95,105)cm + 0.992384, // (105,115)cm + 0.992844, // (115,125)cm + 0.993576, // (125,135)cm + 0.999226 // (135,145)cm +}; + +// Shape correction values +const double auau17_run21_shapeWeightArray[auau17_run21_nVzBins][auau17_run21_refMultBins] = { + //RefMult: -145.0 #leq Vz #leq -135.0 + {0.612344, 0.780558, 0.916665, 1.05467, 1.12067, 1.14132, 1.13205, 1.11436, 1.09902, 1.09265, 1.08076, 1.06209, 1.05309, 1.05099, 1.03945, 1.03822, 1.03327, 1.02878, 1.01666, 1.02503, 1.0178, 1.00809, 1.00804, 1.01231, 0.993313, 0.997889, 1.01174, 1.01277, 1.00402, 1.01294, 1.00294, 0.994955, 1.01582, 1.01458, 1.00719, 1.00319, 1.00635, 1.00605, 1.0064, 1.01308, 1.00508, 1.00589, 1.01449, 1.01446, 1.01009, 1.00382, 1.01139, 1.00881, 1.00353, 1.00438, 1.00826, 1.00006, 0.997198, 0.99309, 1.00718, 1.01087, 1.01931, 1.01123, 1.00869, 1.00829, 1.00359, 1.0109, 1.00963, 1.01217, 1.01013, 1.00017, 1.01302, 1.00934, 1.01247, 0.991854, 1.00627, 1.00662, 1.00937, 1.02489, 1.00772, 1.0205, 1.00637, 1.00294, 1.00853, 1.01185, 1.01308, 1.01486, 1.01594, 1.00333, 1.02297, 0.999832, 0.996169, 1.0172, 0.998967, 1.01732, 1.01111, 1.00963, 1.01254, 1.00606, 1.01192, 1.0161, 1.0109, 1.00471, 1.00602, 1.00527, 0.99453, 1.00921, 1.01892, 0.996562, 1.01958, 1.00995, 1.00601, 1.00798, 1.01324, 1.01793, 0.992558, 1.0155, 0.991024, 1.00695, 1.02123, 0.998748, 1.01778, 0.999828, 0.999738, 1.01228, 1.02169, 1.00004, 1.00785, 0.999517, 1.01694, 0.999034, 1.00843, 1.00993, 1.01724, 0.998276, 1.00938, 1.00669, 1.00221, 1.00952, 0.997449, 1.00095, 1.00337, 0.983348, 1.00694, 0.991138, 1.00719, 1.00095, 1.01124, 1.0189, 1.01866, 1.01981, 1.0032, 1.01653, 1.03542, 1.0113, 1.01814, 1.01211, 1.00885, 1.01084, 1.01162, 1.01112, 1.00765, 1.0073, 1.00441, 0.97927, 1.01882, 1.00223, 0.995797, 1.02571, 0.996189, 1.01658, 1.00232, 0.99349, 1.03211, 1.04149, 1.02344, 1.02671, 1.03303, 1.00219, 1.01753, 1.00688, 1.00674, 1.00335, 1.00474, 1.01374, 1.0045, 1.01313, 1.00491, 0.989409, 1.01535, 1.00565, 1.01798, 1.00104, 1.02679, 1.02255, 1.02395, 1.00711, 1.0306, 1.00103, 1.0324, 1.00511, 1.02039, 1.00105, 1.02823, 1.0136, 0.999175, 0.998119, 1.02141, 1.01713, 0.996003, 1.01743, 1.03196, 1.0187, 1.01992, 1.00947, 1.0177, 1.04266, 1.02228, 1.0177, 1.01516, 0.998753, 1.02228, 1.02712, 0.996374, 0.997524, 1.01905, 1.00912, 1.02126, 1.02995, 1.00873, 1.03097, 0.999359, 1.01474, 1.01952, 1.02895, 1.02693, 1.0187, 1.04038, 1.00913, 1.00771, 1.00934, 1.02191, 1.02288, 1.01092, 1.02292, 1.03615, 0.999071, 0.992986, 1.04014, 1.00336, 1.01893, 1.03266, 1.02282, 1.01896, 1.00096, 1.01047, 1.01035, 0.990686, 0.988973, 1.00039, 1.03164, 1.00923, 1.02, 1.02496, 0.991846, 0.999464, 1.03935, 1.04733, 1.01473, 1.02866, 1.0152, 1.01003, 1.02117, 1.01402, 1.02755, 1.04377, 1.00288, 1.04567, 1.02928, 1.00093, 1.01647, 1.01402, 1.01231, 1.03792, 1.00654, 1.02015, 1.06106, 1.0411, 1.02167, 1.00927, 1.0157, 1.03062, 1.02926, 1.00151, 1.01433, 1.03947, 1.02718, 1.02298, 1.04626, 1.0166, 0.983706, 1.04224, 1.0379, 1.01875, 1.02916, 1.06023, 1.03286, 1.03727, 1.03393, 1.02263, 1.02216, 1.05413, 1.02945, 1.02963, 1.05793, 1.03799, 1.02502, 1.02796, 1.03459, 1.02301, 1.04902, 1.02726, 1.01976, 1.05628, 1.0374, 1.07194, 1.05501, 1.03688, 1.02655, 1.06377, 1.01762, 1.0779, 1.03388, 1.01274, 1.03223, 1.0443, 1.02061, 1.05479, 1.04259, 1.04457, 1.05953, 1.0349, 1.04862, 1.06406, 1.01899, 1.00317, 1.02409, 1.03393, 1.08414, 1.04082, 1.03529, 1.02898, 1.01031, 0.98698, 0.994718, 0.998809, 1.02447, 1.01126, 1.03058, 0.989796, 0.992294, 1.02158, 1.01971, 0.988671, 1.0293, 1.00332, 0.996435, 1.0061, 1.00118, 1.03497, 0.977573, 1.02159, 1.02894, 0.929173, 0.993248, 0.963471, 0.986494, 1.02011, 0.956266, 1.03446, 0.996526, 0.897736, 0.944576, 0.944135, 0.937659, 0.983207, 1.03147, 0.937997, 0.972825, 0.866257, 0.994423, 0.89953, 0.957312, 0.987454, 0.969693, 0.937485, 0.864071, 0.917982, 0.955119, 1.07426, 0.819125, 0.981987, 1.17348, 0.939332, 1.00249, 1.10003, 1.23495, 0.919085, 0.755374, 0.822427, 0.719624, 0.965121, 0.835278, 0.775845, 0.995908, 1.07944, 0.89953, 0.719624, 0.499739, 1.10942, 1.34929, 0.869546, 2.51868, 0.289135, 0.599687, 2.92347, 2.24882, 1, 2.24882, 3.14835, 0.629671, 0.449765, 0.449765, 0.674647, 1.79906, 0.674647, 1, 0.449765, 0.674647, 0.89953, 0, 1, 1, 1, 1, 1, 1, 1, 0.449765, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 }, + //RefMult: -135.0 #leq Vz #leq -125.0 + {0.631612, 0.793471, 0.930131, 1.05406, 1.10692, 1.11654, 1.11085, 1.09435, 1.08534, 1.07436, 1.06752, 1.05112, 1.04803, 1.03498, 1.03669, 1.03323, 1.03454, 1.02377, 1.0209, 1.01557, 1.02398, 1.0065, 1.00206, 1.00596, 0.992611, 0.993793, 1.01488, 0.997611, 0.993647, 1.00561, 1.01143, 1.00302, 1.00853, 1.01235, 1.007, 1.01237, 1.00897, 1.01428, 1.00656, 1.01231, 1.01098, 1.01479, 1.015, 1.00774, 1.01278, 1.00626, 1.01064, 0.998453, 1.01101, 1.01336, 1.01387, 1.00659, 1.01087, 1.00046, 1.00294, 1.00683, 1.01604, 1.00672, 1.00361, 1.01637, 1.01716, 1.01409, 1.01144, 1.01415, 1.00561, 1.01268, 1.00195, 1.00523, 1.0215, 1.00212, 1.00757, 1.00484, 1.01071, 1.00942, 1.00436, 1.00664, 1.01594, 1.00371, 1.008, 1.01893, 1.01707, 1.0241, 1.00675, 1.01015, 1.02205, 0.997107, 1.00204, 1.01657, 0.997748, 1.00603, 1.00929, 1.01745, 1.0118, 1.00878, 1.00827, 0.996485, 0.999107, 1.0141, 1.00344, 1.03273, 1.00288, 1.00721, 1.01948, 1.00138, 1.01078, 1.01024, 1.0097, 1.01133, 1.00179, 1.00942, 1.01848, 1.00734, 1.00109, 1.0027, 1.01732, 0.999618, 1.0116, 0.997982, 1.00743, 1.0042, 0.99978, 0.998428, 1.00069, 0.997375, 1.02184, 1.00892, 1.01531, 1.01251, 1.01894, 1.02074, 1.02844, 1.0179, 1.02133, 1.00834, 0.993697, 1.00046, 0.999305, 0.991911, 1.01962, 0.994578, 1.00996, 1.01595, 1.00624, 1.01492, 1.01692, 1.02105, 1.00948, 1.01106, 1.05467, 1.00962, 1.02768, 1.01357, 1.01305, 1.02597, 1.02652, 1.01174, 1.01032, 1.00444, 1.00475, 1.00606, 0.993237, 1.01614, 0.992965, 1.01341, 1.01093, 0.994589, 1.02484, 0.9943, 1.03127, 1.02439, 1.04157, 1.03884, 1.02042, 1.01489, 0.996833, 1.0129, 1.00012, 1.00715, 1.0099, 1.00062, 1.00577, 1.00149, 1.00929, 0.996514, 1.01013, 1.01504, 1.03142, 1.00357, 1.01949, 1.01618, 1.02409, 1.01162, 1.01473, 1.00942, 1.01954, 1.02176, 1.02999, 0.999304, 1.00509, 1.00019, 1.01051, 0.991269, 1.02, 1.02448, 1.00581, 1.0338, 1.03177, 1.02168, 1.01732, 0.99468, 1.00769, 1.00618, 1.0304, 1.04603, 0.9974, 1.01138, 0.990822, 1.01771, 1.01833, 1.02072, 1.01483, 1.00378, 1.00795, 1.02237, 0.99489, 1.00713, 1.0067, 1.03075, 1.0053, 1.00775, 1.01128, 1.03422, 1.01018, 1.01416, 1.02817, 1.00723, 1.02622, 1.02904, 1.02389, 1.01245, 1.05251, 1.02012, 0.998193, 1.01944, 1.03219, 1.02028, 1.01849, 0.994541, 1.00841, 1.01853, 1.02691, 1.01825, 1.01128, 1.02907, 1.00437, 1.03155, 1.01853, 1.02799, 1.03488, 1.01574, 1.01134, 1.02333, 1.03152, 1.04028, 1.00212, 1.03425, 0.994358, 1.01841, 1.00966, 1.02591, 1.02286, 1.02668, 1.0337, 1.00566, 1.0082, 1.03967, 1.04042, 1.01852, 1.01883, 1.00729, 1.01894, 1.05353, 1.0465, 1.02197, 1.00995, 1.01323, 1.04453, 1.01492, 1.03066, 1.01886, 1.02415, 1.01405, 1.03118, 1.02593, 1.03442, 0.992518, 1.0192, 1.03502, 1.03597, 1.02824, 1.0428, 1.00129, 1.0237, 1.04021, 1.0293, 1.03197, 1.05537, 1.00464, 1.00822, 1.02565, 1.05434, 1.02687, 1.02887, 1.02879, 1.00375, 1.02289, 0.997023, 0.991131, 1.04075, 1.02124, 1.0378, 1.04638, 1.03271, 0.994143, 1.02366, 1.04855, 1.04834, 1.00933, 1.0325, 1.05894, 1.03013, 1.0463, 1.02494, 1.04858, 1.02769, 1.02633, 1.00737, 1.02011, 1.02831, 1.00181, 1.02213, 1.01067, 1.03434, 1.01661, 0.988326, 0.991696, 1.00154, 1.04229, 1.03149, 1.03375, 1.01397, 1.01269, 1.05985, 1.03682, 0.954927, 0.989612, 1.01744, 1.03427, 1.0309, 1.03735, 0.958131, 0.978634, 0.996412, 1.01554, 1.01942, 0.972193, 1.01205, 0.978662, 0.969217, 0.970344, 0.910737, 0.961801, 0.979468, 0.958979, 0.957551, 0.955624, 0.979586, 0.913308, 0.977791, 0.934927, 0.903146, 0.936824, 0.978757, 0.878127, 0.946041, 0.980636, 0.976353, 0.834902, 1.01283, 0.854919, 1.07186, 1.07436, 1.03359, 0.92419, 1.03356, 1.02122, 0.805632, 1.0735, 1.011, 0.918065, 1.15621, 0.955255, 0.812312, 1.04221, 0.801942, 0.815535, 1.07552, 0.930826, 1.08074, 0.757933, 1.25303, 1.18469, 0.911298, 0.683474, 1.03027, 0.563866, 1.8169, 0.825529, 0.37591, 0.729038, 0.542982, 0.501214, 0.501214, 0.835357, 0.501214, 3.5085, 0.250607, 0.668285, 1.50364, 1.00243, 0.751821, 1.00243, 0.250607, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 }, + //RefMult: -125.0 #leq Vz #leq -115.0 + {0.686795, 0.815074, 0.935404, 1.03986, 1.08025, 1.09352, 1.09033, 1.07715, 1.06828, 1.06398, 1.0484, 1.04401, 1.04069, 1.04125, 1.03236, 1.02171, 1.02704, 1.01134, 1.01753, 1.01645, 1.01482, 1.00911, 1.00562, 1.01199, 0.990726, 1.00662, 1.00417, 1.00956, 0.998784, 1.00584, 1.00953, 0.997414, 1.00618, 1.00605, 0.997637, 1.00562, 1.00656, 1.00571, 1.00756, 1.00633, 0.992494, 1.00367, 1.01388, 1.00706, 1.00978, 1.00532, 1.00575, 1.01079, 1.00359, 1.00897, 1.01009, 1.01439, 0.999829, 1.00582, 1.01067, 1.00259, 1.0244, 1.01595, 1.00484, 1.00845, 1.0066, 1.01444, 1.00274, 1.00416, 1.01345, 1.00662, 1.00883, 1.00944, 1.01062, 0.994982, 1.01761, 1.00428, 0.99727, 1.01576, 1.01191, 1.01518, 1.00827, 1.00649, 1.01172, 1.02232, 1.00461, 1.00763, 1.01632, 1.00574, 1.01221, 0.998262, 1.0065, 1.01299, 0.98627, 1.00449, 1.01134, 1.01308, 1.0192, 1.00879, 1.01008, 1.01545, 1.00632, 1.00422, 1.01029, 1.0135, 1.00763, 1.00266, 1.01123, 1.00489, 1.01189, 1.01315, 1.01306, 1.01192, 1.00635, 1.01244, 1.00631, 1.01741, 1.01353, 1.0065, 1.02612, 0.99344, 1.00464, 1.01707, 1.00389, 1.01248, 1.00514, 0.99955, 0.997001, 1.00126, 1.03114, 1.02565, 1.01628, 1.00342, 1.00832, 1.01579, 0.978965, 1.02061, 1.01249, 1.00018, 0.994263, 0.995686, 1.01609, 0.996616, 1.02231, 1.00298, 1.00405, 0.993703, 1.01611, 1.01408, 1.01052, 1.02083, 1.00472, 1.00433, 1.02141, 1.00059, 1.00493, 1.02862, 1.01066, 1.00382, 1.02521, 1.01877, 1.00723, 1.01389, 0.984073, 1.00797, 0.995611, 1.01872, 1.00058, 1.0049, 1.00549, 1.00579, 1.01125, 1.00352, 1.0091, 1.02114, 1.01869, 1.02718, 1.01971, 0.985838, 1.00449, 1.01248, 1.00147, 1.00982, 1.00464, 1.01395, 1.01242, 1.00774, 0.999914, 1.00479, 1.01032, 1.00472, 1.01896, 0.99756, 1.01157, 0.997479, 1.02872, 0.998903, 1.01378, 1.01371, 1.00971, 1.0203, 1.03086, 1.00328, 1.01697, 1.00532, 1.01466, 1.00637, 1.02624, 1.00211, 1.02374, 1.02949, 1.03462, 1.02985, 1.00177, 1.00447, 1.0343, 1.03138, 1.00783, 1.00978, 1.00582, 1.01349, 1.01842, 1.01796, 1.01893, 1.02272, 1.00235, 1.01471, 1.01907, 1.00976, 0.986399, 1.02575, 0.997386, 1.01105, 0.978192, 1.01811, 1.02579, 1.03196, 1.02705, 1.00341, 1.01881, 1.01625, 1.03254, 1.0136, 1.04065, 1.01924, 1.03466, 1.03142, 0.978714, 1.0136, 1.00114, 1.03516, 1.00824, 0.989305, 1.01128, 0.996185, 1.01721, 1.01008, 0.992892, 1.00415, 1.02307, 1.00687, 1.016, 1.0335, 1.016, 1.01861, 1.01323, 1.03788, 1.01066, 1.03654, 1.0045, 1.0348, 0.981973, 0.998839, 1.012, 1.01034, 1.037, 1.00725, 1.03902, 1.00925, 1.00869, 1.02744, 1.04304, 1.01574, 1.02958, 1.01394, 1.02561, 1.02994, 1.01566, 1.00446, 0.995752, 1.01725, 1.02149, 1.03976, 1.03689, 1.03243, 1.01422, 1.02614, 1.0152, 1.02751, 1.01013, 1.00094, 1.04054, 1.02206, 1.02332, 0.99771, 1.04375, 1.01762, 1.016, 1.02118, 1.01228, 1.02104, 1.02896, 1.01927, 1.01502, 1.0334, 1.03885, 1.02193, 1.0108, 1.03746, 1.03531, 1.01806, 1.01562, 1.00569, 1.01772, 1.02853, 0.999405, 1.01971, 1.01336, 1.01333, 1.01422, 1.03439, 1.02959, 1.02525, 1.04487, 1.05083, 1.03243, 0.999575, 1.00799, 1.04309, 1.02592, 0.988526, 1.01656, 1.04271, 1.02891, 0.980802, 0.982937, 1.01566, 1.00899, 1.03937, 1.04311, 1.00724, 0.978979, 1.01596, 0.969249, 1.00215, 1.00293, 1.03397, 1.00874, 1.0442, 0.967189, 0.990657, 1.00938, 1.03453, 0.995727, 0.990702, 0.965086, 1.00098, 1.02988, 0.984287, 1.00666, 1.0279, 1.00128, 1.01905, 0.96948, 1.02088, 0.93902, 0.991673, 0.935207, 0.948695, 0.979555, 0.941049, 0.887869, 0.877489, 0.945094, 1.01392, 0.974306, 0.961056, 0.877553, 0.869189, 0.910706, 1.03558, 0.899199, 0.886147, 0.937212, 1.06962, 0.998207, 1.05492, 0.857421, 1.03606, 0.919078, 1.05552, 0.8483, 1.13501, 0.940029, 0.957265, 0.913766, 0.870807, 0.703299, 0.843368, 0.944915, 0.843674, 0.82648, 0.938817, 0.888433, 1.10732, 1.0716, 0.928722, 1.10732, 0.593209, 1.46325, 0.786782, 0.669007, 1.0335, 0.276831, 0.984287, 0.654327, 0.790945, 0.553661, 1.38415, 0.968907, 0.775126, 0.369108, 0.442929, 0.276831, 0.553661, 1.66098, 1.66098, 0.276831, 1, 1.10732, 0, 0.276831, 1, 1, 0, 1, 0, 1, 1, 0.553661, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 }, + //RefMult: -115.0 #leq Vz #leq -105.0 + {0.720421, 0.826551, 0.944136, 1.02903, 1.06288, 1.07687, 1.07514, 1.06837, 1.05338, 1.05286, 1.0392, 1.03679, 1.03486, 1.02747, 1.02693, 1.02729, 1.02055, 1.0156, 1.01799, 1.01428, 1.01555, 1.00567, 0.993015, 1.00491, 0.989899, 0.997076, 1.0017, 1.007, 1.00347, 1.00975, 1.00665, 1.00029, 1.00478, 1.00813, 1.00992, 1.01664, 1.00456, 1.01682, 1.00815, 1.00625, 1.00022, 1.00051, 1.0095, 1.02099, 1.00513, 1.01427, 1.01334, 0.995171, 1.01246, 1.00933, 1.00951, 1.00953, 1.00104, 1.00612, 1.01874, 1.00159, 1.01847, 1.01558, 1.00919, 1.01515, 1.00859, 1.01098, 0.995588, 1.00102, 1.00933, 1.0079, 1.00874, 1.00942, 1.01585, 1.00938, 1.01106, 0.985992, 1.01291, 1.00653, 1.00712, 1.01505, 1.01305, 1.00772, 1.0156, 1.00884, 1.00433, 1.01141, 1.01235, 1.00734, 1.01051, 1.00123, 1.00076, 1.0136, 0.999162, 1.00028, 1.00572, 1.0208, 1.01084, 0.992911, 1.01292, 1.00753, 1.01396, 1.00927, 1.00872, 1.02152, 1.0139, 1.00039, 1.02218, 1.00491, 1.00465, 1.00283, 1.0054, 1.01571, 1.01344, 1.00781, 0.998817, 1.01348, 1.01736, 1.01394, 1.01408, 1.00768, 1.00153, 1.00295, 1.00466, 1.02646, 1.01424, 1.01627, 0.995261, 1.01696, 1.00998, 1.00761, 1.01668, 1.01193, 1.02039, 1.02215, 1.00995, 1.00934, 1.01857, 0.997608, 1.00038, 1.00837, 0.998018, 0.9935, 1.01503, 1.01645, 1.01482, 1.00783, 1.01117, 1.018, 1.00511, 1.01564, 1.01403, 1.01858, 1.03589, 0.989802, 1.0246, 1.03058, 1.01139, 1.00366, 1.02757, 1.01828, 1.0016, 1.0048, 0.995674, 0.994272, 1.01651, 1.00512, 0.998623, 1.00391, 1.00727, 1.00235, 1.0197, 0.997149, 1.01645, 1.03167, 1.01592, 1.03323, 1.02213, 1.00453, 1.01302, 0.9954, 1.01375, 1.01656, 0.99524, 0.996364, 1.00796, 1.01557, 0.987262, 1.0041, 1.02301, 1.0116, 1.02974, 1.0087, 1.01854, 1.01581, 0.998843, 1.02048, 1.0199, 1.02144, 1.01701, 1.01273, 1.00126, 1.01522, 1.01155, 0.998412, 1.00796, 1.00684, 1.01144, 1.0163, 1.01147, 1.00267, 1.02966, 1.00851, 1.01022, 1.02502, 1.01845, 1.04029, 0.99991, 1.02589, 1.00266, 1.00172, 1.02277, 1.01776, 1.01268, 0.996003, 1.00273, 1.00109, 1.00968, 1.01141, 0.98665, 1.02821, 0.99278, 0.997051, 1.01338, 1.02401, 1.03533, 0.998934, 1.02789, 1.02005, 1.01976, 1.01599, 1.01514, 1.0289, 1.03093, 1.02043, 1.03046, 1.01508, 0.996554, 1.01909, 1.00861, 1.02738, 1.00438, 1.00836, 1.01012, 0.988849, 1.01115, 1.00888, 1.00705, 1.01693, 1.0118, 1.00255, 1.01389, 1.00394, 1.00629, 1.00324, 1.03402, 1.01503, 1.00937, 1.03772, 1.02138, 1.00554, 1.00235, 1.00749, 1.01843, 1.00837, 1.02846, 1.02936, 1.03293, 1.00116, 1.01434, 1.0265, 1.04091, 1.00085, 1.01104, 1.00411, 1.01181, 1.01617, 1.0283, 1.02482, 0.996848, 1.02633, 1.03198, 1.02181, 1.01558, 1.01609, 1.02502, 1.02363, 1.00862, 1.00392, 1.00607, 0.994682, 1.03351, 1.00768, 1.02706, 1.00304, 1.03535, 0.996339, 0.993704, 1.03236, 1.01183, 1.01624, 1.02083, 1.00618, 1.00416, 1.01659, 1.00636, 1.00487, 1.00704, 1.02355, 1.02323, 1.01621, 1.01532, 1.02228, 1.00159, 1.01814, 1.04531, 1.03952, 1.0364, 1.01869, 1.01724, 1.02738, 1.04988, 1.0297, 1.06077, 1.00635, 1.01342, 0.991214, 1.0026, 1.0387, 1.02894, 1.02999, 1.01309, 1.02667, 1.00271, 0.986589, 0.997219, 1.02629, 1.03566, 1.01751, 1.00747, 0.985822, 0.990544, 1.0103, 0.997005, 0.979594, 0.997971, 1.0007, 0.984534, 0.991863, 0.967317, 0.995163, 0.986155, 0.971094, 0.972635, 0.98718, 0.966497, 0.949175, 0.985995, 0.998502, 0.936653, 0.974344, 0.959714, 0.960497, 0.949061, 0.968657, 0.939962, 0.946032, 0.934953, 0.919498, 0.931475, 0.866344, 0.888533, 0.92057, 0.881231, 0.856642, 0.883434, 0.95006, 0.905661, 0.811381, 0.855576, 0.911017, 0.85094, 0.901044, 0.965719, 0.854168, 0.982407, 1.00626, 0.897026, 0.842587, 0.845329, 0.977254, 0.990287, 0.986721, 0.951088, 0.833919, 1.06494, 1.00595, 0.84954, 0.9163, 0.961636, 0.846658, 0.93551, 0.89558, 0.999737, 0.739788, 0.89054, 0.673273, 0.973657, 0.521602, 0.938159, 0.566567, 0.735314, 1.31069, 0.421294, 0.442571, 0.719178, 0.507113, 0.532468, 2.02845, 0.709958, 1.06494, 1.82561, 0.608535, 0.608535, 1.21707, 1.21707, 1, 0.304268, 0.456402, 1.21707, 0, 1, 0, 0.152134, 0, 1, 1, 1, 1, 0.304268, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 }, + //RefMult: -105.0 #leq Vz #leq -95.0 + {0.766833, 0.856066, 0.957477, 1.02951, 1.05416, 1.06054, 1.06063, 1.04479, 1.04042, 1.032, 1.02875, 1.02432, 1.02095, 1.02089, 1.01452, 1.01441, 1.01133, 1.00871, 1.00842, 1.01235, 1.01373, 1.00052, 0.997979, 0.999562, 0.991806, 0.99899, 1.01027, 1.00688, 1.00382, 1.00692, 1.0013, 0.99397, 1.00318, 1.0135, 1.00713, 1.00542, 1.0055, 1.01617, 1.01183, 0.998083, 0.996494, 1.00823, 1.00749, 1.00528, 1.00742, 1.01399, 1.00978, 0.996413, 1.00032, 1.01554, 1.00007, 1.01212, 1.01284, 1.0073, 0.998746, 1.01257, 1.01629, 1.01427, 1.01033, 1.02287, 1.01114, 1.01224, 1.0002, 1.00476, 1.00846, 1.00104, 1.00336, 1.00655, 1.00417, 0.994673, 1.00431, 0.998975, 1.00199, 1.01042, 1.00912, 1.01647, 1.01198, 1.01297, 1.00818, 1.0272, 0.99865, 1.00098, 0.995568, 1.00264, 1.01271, 0.997468, 1.00245, 1.0213, 0.999841, 1.0008, 1.01015, 1.01121, 1.02547, 1.00652, 1.01065, 1.00886, 1.01149, 1.00216, 1.00805, 1.00852, 1.00403, 0.99604, 1.01026, 1.00715, 1.0167, 1.00262, 1.01381, 1.01482, 1.00631, 1.00791, 1.0047, 1.008, 0.998889, 1.00025, 1.01457, 1.00625, 0.994998, 1.00661, 1.00472, 1.01164, 1.01306, 1.00878, 0.998443, 1.00986, 1.0176, 1.00531, 1.02652, 0.99648, 1.01178, 1.00715, 1.01404, 1.01972, 1.00754, 1.00635, 0.993808, 0.996859, 1.00375, 1.00405, 1.00987, 1.00041, 1.01542, 1.00082, 1.01318, 1.0098, 1.01337, 1.00765, 0.994043, 1.03127, 1.01956, 1.01526, 1.01736, 1.00406, 1.00285, 1.01452, 1.01932, 1.01595, 1.01499, 1.01376, 1.01249, 1.0046, 1.00221, 1.00754, 1.00264, 1.01103, 1.01637, 0.997472, 1.00799, 0.989077, 1.00655, 1.02114, 1.01847, 1.02062, 1.00943, 0.98774, 1.0147, 1.00878, 1.01321, 1.00866, 1.00005, 1.01383, 1.00773, 1.00431, 0.9983, 0.995919, 0.997737, 1.0139, 1.01823, 0.995865, 1.01399, 1.01362, 1.01365, 1.00814, 1.00947, 0.995281, 1.01477, 1.01359, 1.01507, 1.01603, 1.02361, 1.01271, 1.0169, 0.986847, 1.02238, 1.00522, 0.996027, 1.01522, 1.02504, 1.00732, 1.01752, 0.987198, 1.01884, 1.02815, 1.00787, 1.01604, 1.00823, 1.02015, 1.00877, 1.00499, 1.00914, 1.01126, 1.00648, 0.99398, 0.997061, 1.01821, 1.00586, 1.02039, 0.999851, 1.00943, 1.01146, 1.01263, 1.01523, 1.01654, 1.02612, 1.00019, 1.01528, 1.009, 1.02548, 1.00571, 1.00757, 1.01504, 1.04676, 1.00611, 0.995885, 1.02535, 1.00029, 1.00574, 1.0231, 1.01409, 1.01019, 0.97967, 0.987762, 1.0206, 0.994212, 0.988538, 1.01225, 0.999851, 1.01644, 1.01559, 1.00678, 1.01038, 1.01834, 1.03014, 1.02344, 1.01128, 0.996446, 1.01176, 0.972995, 1.01879, 1.01635, 1.02119, 1.02666, 1.02885, 1.0291, 1.02245, 0.976496, 1.02828, 1.02924, 1.01067, 1.02418, 0.989387, 1.00813, 1.00818, 1.02443, 1.01717, 1.00019, 1.02277, 1.01408, 1.02198, 1.01544, 1.00047, 1.02881, 1.00411, 1.03094, 1.02374, 0.993401, 0.999428, 1.02112, 1.02855, 1.01818, 1.01862, 1.02401, 1.00549, 1.01966, 1.02737, 1.02736, 1.01725, 1.03328, 0.989811, 1.01168, 1.01847, 1.02867, 1.01508, 1.02291, 1.02353, 1.0257, 1.00337, 1.00955, 1.02592, 1.00385, 1.01561, 1.01959, 1.02301, 1.0381, 1.01897, 1.01912, 1.02759, 1.02942, 1.02174, 1.02237, 1.01863, 1.03725, 0.99657, 1.02084, 1.05656, 1.0044, 1.01052, 0.986784, 1.00763, 1.00825, 0.977091, 0.981711, 1.01464, 1.0119, 1.03068, 1.03089, 0.988562, 0.979217, 1.01751, 0.989603, 0.987946, 0.973796, 1.01115, 1.0016, 0.984081, 0.974797, 0.992721, 0.98532, 0.980424, 0.963857, 1.03594, 0.942337, 0.973741, 1.01239, 0.991274, 0.942408, 0.983606, 1.02298, 1.05351, 0.936077, 0.976801, 0.92871, 0.990236, 0.967311, 0.956412, 0.918599, 0.91701, 0.945809, 0.899018, 0.894649, 0.899523, 0.942919, 0.947864, 0.916285, 0.886546, 0.86738, 0.855156, 0.915542, 0.95387, 0.847101, 0.886588, 0.885041, 0.956124, 0.935562, 0.898103, 0.891004, 0.977831, 0.959536, 1.17437, 0.888869, 0.875956, 1.05129, 0.78385, 0.881763, 0.975708, 1.03475, 0.757583, 1.13795, 0.749349, 0.952898, 0.955788, 0.970076, 0.931623, 1.10481, 0.509912, 0.98107, 0.745746, 1.20148, 0.773366, 0.397731, 0.883847, 0.574501, 0.828607, 1.16005, 1.10481, 2.3201, 1.16005, 0.994328, 0.530308, 0.220962, 0.530308, 1.32577, 1.98866, 0.331443, 0.994328, 1.32577, 0, 1, 1, 1, 0, 0.331443, 1, 1.32577, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 }, + //RefMult: -95.0 #leq Vz #leq -85.0 + {0.811159, 0.880892, 0.971682, 1.01922, 1.04487, 1.0494, 1.04868, 1.03941, 1.03951, 1.03127, 1.02488, 1.01818, 1.01933, 1.01907, 1.01587, 1.0105, 1.01008, 1.00666, 1.00059, 1.00617, 1.00607, 0.996826, 0.991909, 1.00245, 0.986347, 0.984202, 1.00498, 1.00771, 0.998316, 1.00886, 1.00015, 1.00234, 1.00319, 1.01092, 1.00146, 1.00654, 1.00748, 1.00659, 1.0076, 0.995386, 0.995034, 1.00459, 1.01135, 1.00807, 1.00871, 1.0125, 1.00283, 0.996855, 1.00394, 1.00669, 1.00668, 1.00415, 1.00071, 0.994415, 1.01697, 1.00088, 1.01076, 1.0003, 1.0057, 1.02013, 1.00792, 1.00402, 1.00118, 1.00821, 1.00078, 1.00648, 1.00485, 0.998478, 1.00665, 1.00202, 1.00577, 1.00129, 1.00643, 1.00331, 0.997696, 1.01688, 1.0149, 1.00961, 1.00959, 1.01683, 0.996372, 1.00747, 1.0027, 0.997085, 1.01443, 0.995006, 0.995271, 1.01083, 0.990136, 1.00438, 1.00515, 1.00598, 1.01646, 0.99939, 0.998118, 1.00299, 1.00202, 1.00506, 1.00844, 1.01029, 0.998611, 0.999827, 1.01295, 1.00926, 1.00722, 1.01047, 0.994039, 1.00958, 1.00076, 1.01253, 1.00148, 1.0081, 0.998397, 1.00258, 1.01304, 0.993949, 0.999583, 1.00963, 1.00011, 1.01554, 1.00874, 0.996793, 1.00331, 0.998472, 1.01659, 1.00814, 1.00591, 1.01878, 1.00756, 1.00586, 1.00461, 1.00659, 1.01151, 0.996945, 0.989103, 0.997535, 1.00881, 0.994398, 1.01928, 0.997157, 0.997774, 1.01268, 0.994376, 1.01627, 1.01144, 1.02086, 1.0039, 1.01756, 1.02961, 1.00218, 1.02724, 1.01748, 1.00666, 1.00571, 1.01914, 1.01723, 1.01097, 1.01345, 1.00243, 1.00458, 1.01079, 1.01611, 0.999322, 1.00925, 0.995026, 1.01021, 1.01455, 0.999148, 1.01557, 1.02565, 1.01408, 1.0216, 1.01228, 0.989109, 1.00368, 1.00962, 1.01206, 1.02271, 0.995194, 1.00297, 1.00701, 1.00178, 0.999475, 0.99193, 1.00192, 0.998884, 1.01246, 0.994559, 1.00806, 1.01688, 1.01027, 1.00551, 1.02198, 0.982644, 1.02341, 1.00944, 1.0165, 1.00893, 1.0059, 1.00854, 1.00457, 0.997316, 1.00517, 1.01345, 0.987021, 0.997889, 1.01418, 1.0039, 1.00674, 0.987614, 1.01524, 1.02579, 1.01306, 1.01098, 0.989151, 1.00012, 1.01425, 1.00994, 0.99224, 1.01097, 1.01068, 1.00716, 1.00291, 1.00938, 1.00639, 1.01641, 0.99498, 1.00272, 0.996065, 1.01481, 1.02163, 1.01056, 1.00846, 1.01431, 1.01609, 0.997715, 1.01556, 1.00863, 1.01284, 1.01551, 1.03109, 1.00983, 0.98499, 1.01698, 1.00317, 1.00292, 1.01164, 0.996072, 1.00898, 0.995961, 0.999471, 0.99956, 1.00592, 1.00075, 0.997934, 1.02351, 1.00989, 1.01502, 1.01201, 1.00181, 1.00472, 1.02664, 1.02183, 1.01088, 0.994582, 1.0085, 1.01324, 0.979235, 1.01032, 1.01786, 1.02108, 1.00581, 1.01474, 1.00641, 0.986771, 1.01663, 1.0094, 1.01114, 1.01755, 0.996064, 1.00006, 1.02791, 1.01251, 1.01527, 0.980732, 1.01744, 1.00636, 1.00599, 1.01457, 1.0181, 1.0118, 1.02515, 0.996948, 1.00874, 1.01205, 0.991081, 1.00684, 1.00903, 1.0137, 1.00918, 1.02097, 0.991716, 1.00987, 1.02652, 1.02268, 1.01619, 1.04, 1.00041, 1.00437, 1.01349, 1.01897, 0.997721, 1.01028, 1.03465, 1.00474, 1.0232, 1.00895, 0.997654, 1.01555, 1.02985, 1.03885, 1.0221, 1.03623, 1.01543, 1.00264, 1.03051, 1.04265, 1.01974, 1.04256, 0.996348, 1.01137, 0.997572, 1.03579, 1.01305, 0.99689, 1.00729, 1.00909, 1.02472, 1.00766, 0.967543, 0.968905, 1.00041, 1.02639, 1.05572, 0.990743, 1.0129, 0.978538, 0.986073, 0.974869, 1.00458, 0.980717, 1.00205, 0.989679, 0.964699, 0.954456, 0.990753, 0.981087, 0.975643, 1.02817, 1.0075, 1.00111, 0.962457, 1.02389, 0.961353, 0.947923, 0.99323, 0.993324, 0.978627, 0.939668, 0.953797, 0.925934, 0.967477, 0.934668, 0.93483, 0.953361, 0.925314, 0.906039, 0.917849, 0.936169, 0.940506, 0.921566, 0.932409, 0.886076, 0.880302, 0.865534, 0.953258, 0.973633, 0.859521, 0.915617, 0.967905, 0.956626, 1.00833, 0.922872, 0.9994, 1.01225, 0.961232, 0.929323, 0.926288, 0.988856, 0.813207, 0.944479, 0.943685, 0.935432, 1.00927, 0.899139, 0.772855, 1.08529, 0.834136, 0.797397, 0.85429, 0.977047, 0.955335, 0.796113, 0.580947, 0.828455, 0.921216, 1.09361, 1.54323, 0.379324, 0.955335, 0.665323, 0.796113, 0.557279, 1.433, 1.25388, 1.0031, 1.07475, 1.433, 1.07475, 0.955335, 1.433, 1.433, 0.716501, 1.07475, 1.433, 0, 0.716501, 0, 0.716501, 0, 0.358251, 0, 0.716501, 0.716501, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 }, + //RefMult: -85.0 #leq Vz #leq -75.0 + {0.843202, 0.906347, 0.984849, 1.02165, 1.03149, 1.03481, 1.03617, 1.03028, 1.02492, 1.02274, 1.0161, 1.0105, 1.01353, 1.00987, 1.01044, 1.01022, 1.00305, 1.00024, 1.00326, 1.00526, 1.00132, 0.994714, 0.992122, 0.993792, 0.984624, 0.982719, 0.995337, 1.00658, 0.997107, 1.00204, 1.00194, 0.995213, 0.997801, 1.00846, 0.99759, 1.0084, 1.00572, 1.01419, 1.01547, 0.99103, 1.00401, 1.00113, 1.00422, 1.01327, 0.99958, 1.00447, 1.01231, 1.00066, 1.00345, 0.997872, 1.00277, 1.00767, 1.00197, 1.00051, 0.996549, 1.00825, 1.0154, 1.01636, 1.00999, 1.00731, 1.00718, 1.00468, 1.00449, 1.0014, 1.01161, 1.00593, 1.00547, 1.00279, 1.01103, 0.988389, 1.00412, 0.989673, 0.995659, 1.00962, 1.01105, 1.00389, 1.00517, 1.00681, 1.00796, 1.01261, 0.996071, 1.01071, 1.00778, 1.00452, 1.00721, 0.999576, 0.998616, 1.01059, 0.998281, 0.997985, 1.00111, 1.00689, 1.00444, 1.00712, 0.996754, 1.00395, 1.01182, 1.00187, 1.00884, 1.01334, 0.993674, 1.01061, 1.00371, 0.992906, 1.01386, 1.0197, 0.999065, 1.0146, 1.00897, 1.01734, 1.00906, 0.999865, 1.00586, 0.994183, 1.01097, 1.00216, 1.00353, 0.99557, 1.00627, 1.01513, 1.01506, 0.991158, 0.992346, 0.998197, 1.00976, 1.00976, 1.01765, 1.0101, 1.01019, 1.00465, 1.00074, 1.01461, 1.00838, 0.996883, 1.00167, 1.00179, 1.00526, 1.00739, 0.997939, 0.992398, 1.00706, 0.999733, 0.999743, 1.00639, 1.00323, 1.01874, 1.00339, 1.00853, 1.02999, 0.998445, 1.00835, 1.00968, 1.00826, 1.00953, 1.01237, 1.00886, 1.00256, 1.01118, 1.00805, 0.992942, 0.994013, 1.02834, 0.99599, 1.01646, 1.00183, 1.00243, 1.00502, 1.00171, 0.999947, 1.01677, 1.01487, 1.02755, 1.01276, 1.00216, 1.00304, 0.999112, 0.996685, 1.00466, 1.00035, 1.00983, 0.991736, 1.00906, 0.981747, 0.994148, 1.00853, 1.00202, 1.01929, 0.995765, 1.01284, 1.00566, 1.01003, 1.00104, 1.01166, 1.00009, 1.03182, 1.0138, 1.00706, 1.0253, 1.0088, 0.99463, 1.01027, 1.00057, 1.0113, 1.00148, 0.994222, 1.00405, 1.02073, 1.00684, 1.01588, 1.01436, 1.00642, 1.02884, 1.00807, 1.01111, 1.00462, 1.00023, 1.00884, 1.02467, 0.984908, 1.0141, 1.00871, 0.991875, 1.01401, 1.00496, 1.008, 1.01228, 0.999186, 1.01603, 0.99374, 1.00907, 1.01012, 1.01571, 0.995925, 1.00454, 1.00477, 0.982654, 1.02017, 1.02099, 1.00756, 0.995344, 1.02046, 0.996896, 0.99661, 1.00808, 0.989409, 1.01926, 1.01765, 0.994887, 0.996096, 0.976378, 1.01643, 1.0037, 1.00365, 0.992647, 1.00668, 1.01955, 1.00545, 1.01884, 0.994655, 1.01946, 1.00029, 1.02163, 1.03414, 1.00693, 0.995857, 1.00053, 0.989622, 1.01095, 0.997567, 1.013, 1.01297, 1.00523, 1.01211, 1.02751, 1.00584, 1.0317, 1.02191, 1.01307, 1.00763, 1.00505, 1.00179, 1.01501, 1.00511, 1.00774, 0.989846, 1.01068, 1.00716, 1.0244, 1.01169, 1.01234, 0.99875, 1.0074, 1.02264, 1.01218, 1.01223, 0.984059, 1.01692, 1.01908, 1.00215, 1.01395, 1.03735, 0.994216, 1.01384, 1.03101, 1.01073, 1.0269, 1.0316, 1.00515, 0.9992, 1.00737, 1.01307, 1.02199, 0.998123, 1.01358, 1.02373, 1.02045, 0.99638, 1.00507, 0.986975, 1.01853, 1.00721, 1.04936, 1.02104, 0.997073, 1.01821, 1.01257, 1.0296, 0.990619, 1.03222, 1.01878, 1.01542, 1.00411, 1.00189, 1.02224, 0.988885, 1.0165, 1.01426, 1.01917, 1.03099, 0.97713, 1.01064, 1.00203, 0.994867, 1.02161, 0.993495, 0.984408, 0.973617, 0.978268, 0.970633, 0.965681, 0.980503, 1.01056, 1.00126, 1.01701, 0.958412, 0.992334, 0.98943, 0.988612, 1.01517, 1.03224, 0.942405, 0.98056, 0.986856, 0.990637, 0.951879, 1.01226, 0.984794, 1.01398, 0.927807, 0.98134, 0.957279, 0.989103, 0.939964, 0.926215, 0.948871, 0.925487, 0.924713, 0.884338, 0.892539, 0.892545, 0.983289, 0.94107, 0.917409, 0.906475, 0.861247, 1.01408, 0.907537, 0.84312, 0.876968, 0.895052, 0.915207, 0.944235, 0.956255, 0.89423, 0.977998, 0.924888, 0.822197, 1.02632, 0.859944, 0.736979, 1.01348, 0.864954, 0.881363, 1.07148, 0.92842, 0.868346, 1.18196, 0.869133, 0.803796, 0.934678, 0.96106, 0.832919, 0.732236, 0.887133, 0.948246, 0.902561, 1.06174, 1.07639, 0.461309, 1.36684, 1.11056, 1.09835, 0.89699, 1.28141, 0.538194, 0.768848, 0.461309, 1.02513, 0.384424, 0.615079, 2.30654, 2.30654, 0.256283, 0.576636, 1.5377, 1, 0.768848, 0, 1, 1, 0.384424, 0, 1.5377, 1, 1, 1, 0, 1, 1, 0.768848, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 }, + //RefMult: -75.0 #leq Vz #leq -65.0 + {0.871957, 0.933238, 1.006, 1.02738, 1.02883, 1.01911, 1.02781, 1.01972, 1.01522, 1.02006, 1.01119, 1.00857, 1.0095, 1.00704, 0.998639, 1.00041, 1.006, 1.00237, 1.00184, 1.00577, 0.996956, 0.993808, 0.98523, 0.991064, 0.982619, 0.98407, 0.994233, 1.00622, 1.00049, 0.999293, 1.00547, 0.994866, 1.00155, 1.01258, 1.00654, 0.999619, 1.00845, 1.00253, 1.00338, 0.996689, 0.998935, 0.997867, 1.00044, 1.00579, 1.0028, 1.00016, 1.00896, 0.995723, 0.998963, 0.99618, 1.00999, 1.01189, 0.998778, 0.989569, 1.00423, 1.01139, 1.0075, 1.01343, 1.00259, 1.00697, 1.00243, 0.997658, 0.997279, 1.00208, 1.00145, 1.00093, 1.00334, 1.00084, 0.995019, 1.00305, 1.01061, 0.996196, 0.993737, 1.00119, 1.00524, 1.00392, 1.00235, 0.999934, 1.01381, 1.00256, 0.998775, 1.00501, 1.00548, 0.999891, 1.00113, 1.00182, 0.991996, 1.00685, 0.997023, 1.0063, 0.996741, 1.0096, 1.01353, 1.00942, 1.00531, 1.00307, 0.99454, 0.991871, 0.999253, 1.01342, 0.993305, 0.99365, 1.01153, 1.0036, 0.996277, 1.00791, 1.0058, 0.998296, 1.00004, 1.0013, 0.990896, 1.00034, 1.01015, 0.994406, 1.02833, 0.991995, 0.996921, 0.997391, 0.996604, 1.00483, 0.992052, 1.00273, 0.987322, 0.993616, 1.0118, 1.00506, 1.00811, 1.0169, 0.988752, 0.999288, 1.00706, 0.993874, 1.01613, 0.985182, 0.995883, 1.00191, 0.999038, 0.991058, 1.00947, 0.988078, 1.00065, 1.0101, 0.994404, 1.00535, 1.00363, 1.01427, 1.00691, 1.00919, 1.02094, 1.00095, 1.01556, 1.01643, 0.994991, 0.999024, 1.02401, 1.01041, 1.00699, 1.00848, 0.986902, 0.993704, 0.995963, 1.0077, 0.998433, 1.01931, 1.00061, 1.0097, 1.00382, 0.995317, 0.998288, 1.02004, 0.99697, 1.02538, 1.00676, 1.00817, 1.00181, 0.997362, 0.999757, 0.996114, 0.999463, 1.00342, 1.0118, 1.01414, 1.01799, 0.991104, 0.992638, 1.01193, 1.01642, 0.996995, 1.01717, 1.00836, 1.00781, 0.98659, 1.01188, 0.995151, 1.01288, 0.998912, 1.00393, 1.00233, 1.01204, 1.00677, 1.01291, 1.00046, 1.01054, 1.00633, 0.99541, 1.00063, 1.02276, 1.00317, 0.997685, 0.992726, 1.00802, 1.01393, 1.01437, 0.998899, 0.993631, 1.00927, 0.996782, 1.00882, 0.981876, 1.00465, 0.983987, 1.00594, 1.00522, 1.00173, 1.00597, 1.01776, 1.00179, 1.00698, 0.995914, 1.01004, 1.00637, 1.00908, 1.01593, 0.994012, 1.00891, 0.997379, 1.01632, 0.993658, 1.00872, 1.00018, 1.03719, 1.00152, 1.00102, 1.00205, 0.997836, 1.00114, 1.00343, 1.00589, 1.0125, 0.984302, 0.997375, 1.01391, 0.989867, 0.99465, 0.996379, 1.00722, 1.02539, 1.01335, 1.01252, 1.00123, 1.00552, 1.01084, 0.989904, 1.01471, 1.00321, 1.01679, 0.985598, 0.992503, 1.00719, 1.00909, 1.01812, 0.992772, 1.01182, 1.00266, 1.00056, 1.00826, 1.00225, 0.997774, 1.02711, 0.98504, 0.997025, 1.05112, 1.01147, 1.01817, 0.993325, 1.01679, 1.01586, 1.00494, 1.02922, 0.998182, 0.998322, 1.00918, 1.00835, 1.0174, 1.02736, 0.969409, 1.01569, 1.02078, 0.995378, 1.01394, 1.01598, 1.01701, 0.996118, 1.02152, 1.02253, 1.01386, 1.02223, 0.982653, 0.988944, 1.01528, 1.02223, 1.00184, 0.994136, 1.03097, 1.00484, 1.03673, 0.996898, 1.0063, 1.00087, 1.01512, 1.02247, 1.02548, 1.00698, 1.00614, 0.990405, 1.04128, 1.05179, 0.985201, 1.04503, 1.0242, 1.0107, 1.01471, 1.01278, 1.0385, 1.00646, 1.01807, 1.0093, 1.01118, 1.0042, 0.986423, 1.00749, 1.01308, 1.00115, 1.03903, 1.01919, 1.03321, 1.00211, 0.990195, 0.989347, 1.01413, 0.989291, 0.994119, 1.02263, 0.998586, 0.962912, 0.989036, 1.00868, 0.998465, 1.01239, 1.02635, 0.9798, 0.983774, 0.992204, 0.976082, 0.973341, 0.999065, 0.980151, 0.973003, 1.00081, 0.983724, 0.974654, 0.99927, 0.945922, 0.929988, 0.965396, 0.944143, 0.965752, 0.887444, 0.934909, 0.907499, 0.979508, 0.926075, 0.968935, 0.999723, 0.846268, 1.00986, 0.888294, 0.914047, 0.890301, 0.955381, 0.952028, 0.965125, 0.959339, 1.08377, 1.01987, 0.968665, 0.914901, 1.07576, 0.936124, 0.889225, 1.23788, 0.80716, 0.968191, 0.856347, 1.14936, 0.862022, 0.924878, 0.796697, 0.704771, 0.938181, 1.0895, 0.867153, 0.990455, 0.662534, 1.07977, 0.787942, 1.69262, 1.63425, 0.387059, 0.769059, 0.885219, 0.742841, 0.408563, 1.16732, 0.571988, 0.635542, 1.22569, 1.0895, 0.612844, 1.63425, 1.22569, 1.63425, 0.408563, 0.612844, 1.63425, 0, 1, 1, 0.817125, 1, 1, 1, 1.63425, 1, 0.408563, 1, 1, 1, 0.817125, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 }, + //RefMult: -65.0 #leq Vz #leq -55.0 + {0.877624, 0.935932, 1.01332, 1.03289, 1.03003, 1.01777, 1.01815, 1.01285, 1.00833, 1.00866, 0.997298, 1.00479, 1.00056, 0.998781, 0.99791, 1.00315, 0.997688, 0.995911, 0.996143, 1.00442, 0.999891, 0.982465, 0.981898, 0.991599, 0.975011, 0.983986, 0.990022, 1.00236, 0.995989, 1.00143, 0.995408, 0.993004, 1.00544, 1.00409, 1.00508, 1.00403, 1.00315, 1.00162, 0.998824, 0.999212, 0.998313, 0.995791, 1.00222, 1.00738, 0.999856, 1.0072, 1.00171, 0.993208, 1.00049, 0.995522, 1.00507, 0.999705, 1.00016, 1.00643, 1.00408, 1.00044, 1.02687, 1.00889, 1.00532, 1.01713, 1.0088, 1.00812, 1.00471, 0.997017, 1.00533, 1.00126, 1.0081, 1.00127, 1.00904, 0.996325, 1.00637, 0.994035, 0.994044, 1.00435, 1.00035, 1.0153, 1.00243, 1.00632, 1.00166, 1.00428, 0.999638, 1.01045, 1.00727, 1.00398, 1.01167, 0.991816, 0.998076, 1.00445, 0.999073, 1.00653, 0.999197, 1.00785, 1.01677, 1.00596, 1.00852, 1.00135, 1.00507, 1.0035, 1.00702, 1.01145, 1.00206, 0.998961, 0.997326, 0.998689, 1.00261, 1.01081, 0.997296, 1.01418, 0.994247, 1.0039, 1.0041, 1.00097, 1.00889, 0.995207, 1.01953, 0.998639, 1.00536, 1.009, 1.00893, 1.00187, 1.01753, 0.997234, 0.996267, 1.00072, 1.01369, 0.996948, 1.01408, 1.00894, 1.00585, 1.01274, 1.00238, 1.01054, 0.991734, 0.989449, 0.995987, 0.995707, 1.00038, 0.992547, 1.00369, 1.00431, 1.00132, 1.01076, 0.999591, 1.02244, 1.00544, 1.00395, 1.0069, 0.998886, 1.02723, 1.009, 1.01065, 1.01838, 1.00382, 1.00751, 1.01568, 1.00102, 1.00704, 1.00562, 1.00085, 1.00233, 0.994027, 1.0072, 0.999191, 1.00114, 1.01447, 1.00813, 0.996493, 1.002, 1.00725, 1.02543, 1.02324, 1.02543, 1.01548, 1.00082, 1.00449, 0.993637, 0.996993, 0.997109, 0.985864, 1.00009, 1.01018, 1.0011, 0.995881, 0.990122, 1.01129, 1.00845, 1.01403, 1.00502, 1.02224, 1.0019, 1.01602, 0.997961, 1.01173, 0.996766, 1.02376, 1.00626, 1.01307, 1.01243, 1.0224, 0.984583, 1.00813, 0.999279, 0.991959, 1.00182, 0.990558, 0.996123, 1.03172, 1.00326, 1.00838, 0.994588, 1.01818, 1.01991, 1.01544, 0.99958, 1.00481, 1.00202, 1.01679, 1.00855, 1.00484, 1.01156, 0.992668, 0.997969, 0.993695, 1.01538, 1.00115, 1.03092, 0.99836, 0.994235, 0.977022, 1.02592, 1.00181, 1.01358, 1.00549, 1.00693, 0.987812, 0.996796, 1.00767, 0.995792, 0.993009, 1.00821, 1.03602, 0.993298, 0.996895, 1.01498, 1.00389, 1.00225, 0.998247, 0.988922, 0.994708, 0.98168, 1.01158, 1.01148, 0.994933, 1.00342, 1.0154, 0.998596, 1.00848, 1.02984, 1.00724, 1.0124, 1.01782, 1.0184, 1.01204, 1.0278, 1.00402, 1.01565, 0.993723, 0.993238, 0.993165, 1.01479, 1.02214, 1.00229, 1.01074, 0.997707, 0.996918, 1.0168, 1.00461, 1.01036, 1.00247, 0.984575, 1.00754, 1.0197, 1.01793, 1.00523, 1.01087, 1.00074, 1.02146, 1.02321, 1.0032, 0.98881, 1.02137, 1.01968, 1.00205, 1.00658, 1.01555, 0.984824, 1.0138, 1.0049, 1.00282, 0.99811, 1.0249, 1.0171, 1.00863, 1.02995, 1.03286, 1.02876, 1.04748, 1.00856, 0.995576, 1.01904, 1.02135, 0.982701, 1.01169, 1.02417, 1.00919, 1.00814, 0.994162, 0.984961, 0.997562, 1.00699, 0.995136, 1.03404, 1.01828, 1.00107, 1.00546, 1.03409, 1.05074, 0.998532, 1.02866, 1.00353, 1.0404, 1.01062, 1.02617, 1.03316, 1.02154, 1.01462, 0.996779, 1.02777, 1.02421, 0.997501, 1.02327, 1.00894, 1.00569, 1.02874, 1.01123, 1.01953, 1.00086, 1.03601, 0.991489, 1.03509, 0.991099, 0.999656, 1.01354, 0.999444, 0.986552, 1.01309, 0.999213, 0.997398, 0.991994, 1.06848, 0.987102, 0.982159, 1.02295, 0.981573, 0.986802, 1.01354, 0.98169, 0.996632, 0.997205, 0.980719, 0.95361, 1.03289, 0.988837, 0.928139, 0.977797, 1.00341, 0.942555, 0.931736, 0.954224, 0.962286, 0.938979, 1.02368, 0.97824, 0.941439, 0.909855, 1.0185, 0.907129, 0.940798, 0.957517, 1.03495, 1.01389, 1.01538, 0.864061, 1.02387, 1.01726, 1.13582, 0.924016, 1.13755, 0.975686, 0.868757, 1.11015, 0.972068, 0.876493, 1.02902, 1.18924, 0.882445, 1.17103, 0.923243, 1.12491, 1.01079, 0.925779, 0.99847, 0.93412, 0.720051, 1.22962, 0.666561, 1.56611, 0.756053, 0.388827, 1.3825, 0.660752, 0.664662, 0.864061, 0.960067, 0.549857, 1.51211, 0.57604, 1.15208, 1.29609, 0.864061, 5.18436, 1.72812, 0.28802, 0.864061, 1.72812, 0, 1, 0, 0.43203, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 }, + //RefMult: -55.0 #leq Vz #leq -45.0 + {0.922671, 0.968334, 1.02788, 1.03695, 1.02728, 1.01289, 1.00937, 1.00645, 1.00313, 1.00185, 0.99684, 0.996171, 1.00047, 1.00121, 0.992797, 0.995595, 0.992214, 0.990057, 0.999099, 1.00085, 1.00064, 0.992551, 0.990864, 0.986947, 0.985964, 0.980003, 0.99911, 1.00089, 0.996512, 0.996171, 0.996985, 0.994026, 0.993802, 1.00576, 1.00028, 0.995105, 0.998346, 1.00051, 0.997457, 0.996237, 0.99434, 1.00242, 1.00716, 1.00341, 0.994755, 0.997757, 0.999195, 0.996974, 0.994117, 1.00751, 1.00568, 1.00573, 1.00445, 0.99008, 0.99983, 1.00151, 1.01557, 1.00474, 1.0069, 1.00848, 1.00345, 1.00193, 1.00118, 0.998702, 1.00252, 1.00147, 1.00156, 0.994201, 0.996624, 0.999889, 1.00952, 0.995402, 1.00351, 1.00784, 1.00657, 1.01188, 1.0028, 1.00018, 1.00042, 1.00181, 0.996986, 1.00929, 0.994443, 0.984985, 1.00508, 0.990291, 0.991869, 1.00737, 0.992436, 1.00311, 1.00076, 1.00143, 1.01731, 0.996381, 0.992427, 0.998065, 1.01514, 1.01165, 1.00089, 1.00549, 1.00151, 1.00112, 1.00589, 0.996337, 1.00619, 0.9976, 1.00242, 1.021, 1.00096, 0.997522, 0.997795, 1.00449, 1.0155, 0.998725, 1.00662, 0.982578, 1.00235, 0.99211, 0.998385, 1.00828, 1.00281, 1.00239, 1.00045, 0.996687, 1.00213, 1.00323, 1.0102, 1.01915, 1.00568, 0.993652, 1.00243, 0.996171, 1.00644, 0.991784, 0.997878, 0.981188, 0.99012, 0.996583, 0.999043, 0.994693, 1.00409, 0.995641, 0.997031, 1.00554, 0.994615, 0.995289, 1.00475, 0.999188, 1.01442, 0.998448, 1.01123, 1.01036, 1.00036, 0.999791, 1.00216, 1.00268, 1.0072, 0.997194, 1.00507, 0.987131, 0.993679, 0.996639, 1.00071, 1.00208, 0.992509, 0.988837, 1.00149, 0.996234, 1.0086, 1.02548, 1.01454, 1.02177, 1.013, 0.995747, 0.985257, 1.00935, 1.00552, 0.998132, 0.986112, 0.997909, 1.00081, 0.998324, 0.989885, 0.993553, 1.00341, 0.995792, 1.01409, 0.992055, 1.0058, 0.998288, 1.00266, 0.996557, 1.01088, 0.999443, 1.03133, 1.00679, 0.997762, 1.00402, 1.00357, 0.993308, 1.0052, 0.99581, 1.00629, 1.00729, 0.996373, 0.987464, 1.01061, 1.00931, 1.006, 0.999225, 1.02231, 1.00714, 1.00326, 1.02168, 0.979363, 1.00487, 1.00096, 1.00598, 0.99521, 1.01537, 0.996602, 0.989309, 1.00302, 1.00009, 0.987018, 1.00895, 0.999048, 1.00567, 1.00035, 1.0242, 1.00648, 1.00465, 1.01222, 1.01079, 1.00446, 0.990348, 1.0101, 0.99816, 1.00986, 1.00976, 1.02699, 1.01026, 0.997268, 1.00471, 1.00924, 1.00975, 1.00492, 0.995168, 1.0077, 0.997431, 1.00534, 1.00521, 0.989824, 1.00443, 0.990816, 1.00237, 1.00634, 1.00195, 1.00162, 0.98713, 1.00462, 1.00959, 0.999654, 1.00524, 0.995785, 1.01229, 0.983553, 0.98813, 1.00572, 1.00031, 0.998227, 1.00148, 1.02055, 1.00411, 1.00884, 1.01096, 1.01589, 0.980864, 1.00397, 0.993667, 0.998543, 1.01581, 1.00611, 0.989439, 0.981545, 1.00015, 1.01422, 1.00889, 1.02567, 1.00115, 1.00563, 1.00193, 1.00804, 1.00755, 1.01349, 0.983793, 0.999529, 1.01359, 0.995835, 1.00867, 1.01718, 0.987749, 1.01138, 1.01094, 1.00518, 1.00519, 1.0118, 0.999919, 0.990278, 1.02214, 0.999799, 1.00013, 1.00596, 1.00183, 1.01191, 1.01336, 0.994734, 1.01842, 0.998901, 1.01238, 1.00527, 1.02565, 1.00952, 1.02533, 0.988825, 1.01298, 1.03304, 0.993197, 1.04883, 1.02466, 1.00838, 1.00767, 1.00706, 1.03242, 0.998372, 1.0068, 1.01383, 1.00735, 1.00476, 0.971026, 0.996391, 1.03126, 1.02091, 1.01599, 1.02535, 0.995958, 0.985209, 0.99118, 0.97525, 1.00633, 0.98663, 0.990219, 0.981763, 1.03182, 0.966613, 0.988631, 0.967318, 0.977719, 0.993039, 1.05335, 0.978383, 0.979477, 0.992972, 0.964102, 0.991974, 0.997122, 1.00886, 1.00373, 0.928924, 1.01124, 0.969168, 0.975635, 0.964032, 0.950555, 0.953968, 0.935138, 0.961417, 0.924765, 0.922572, 0.950144, 0.966991, 1.00064, 0.942054, 0.934274, 0.850349, 0.984174, 0.891189, 0.89276, 0.938146, 0.98084, 0.928855, 0.997006, 0.880087, 0.993801, 0.877966, 0.941975, 0.852359, 1.05515, 0.988153, 0.894738, 1.11948, 0.837226, 0.828065, 0.840268, 1.01548, 0.923654, 1.02367, 0.860294, 0.843302, 0.890055, 1.06401, 0.922145, 0.904411, 0.733306, 0.83658, 0.976764, 0.904411, 1.01294, 0.542647, 0.85121, 1.30637, 0.646008, 0.904411, 0.695701, 0.703431, 0.904411, 0.678308, 0.904411, 2.71323, 0.516806, 5.42647, 1.80882, 0.30147, 2.71323, 0.602941, 0, 0.30147, 1, 1, 0, 1, 1, 1, 0.904411, 1, 0, 1, 1, 1, 0.904411, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 }, + //RefMult: -45.0 #leq Vz #leq -35.0 + {0.976647, 1.00013, 1.03596, 1.03809, 1.02592, 1.01222, 1.00912, 1.00044, 0.997347, 0.997871, 0.995269, 0.988976, 0.99455, 0.992531, 0.995871, 0.992944, 0.994617, 0.991175, 0.985353, 0.994126, 0.996851, 0.985679, 0.987775, 0.985604, 0.978932, 0.977327, 0.99533, 1.00317, 0.99316, 0.992336, 1.00327, 0.99624, 0.992766, 1.00259, 0.998357, 1.00017, 0.999519, 1.00616, 0.99839, 0.991988, 0.990657, 0.998776, 1.00294, 1.00284, 1.00119, 0.997879, 1.00303, 0.987684, 1.00794, 1.00334, 0.997281, 1.00638, 0.999673, 0.998096, 0.996403, 0.995677, 1.01206, 1.00385, 1.00661, 1.00279, 1.00314, 1.00483, 1.00395, 0.991247, 1.00235, 0.995322, 1.00134, 0.994335, 0.995544, 0.996495, 1.0083, 0.982127, 0.994305, 0.99824, 0.99633, 0.999879, 0.990935, 0.998837, 0.989252, 1.00174, 0.991391, 1.00749, 1.00194, 1.00207, 1.00655, 1.00489, 0.991506, 1.00278, 0.999312, 0.998539, 0.999771, 1.00167, 1.00716, 1.00105, 1.00185, 0.998488, 1.00459, 1.00761, 1.00028, 1.00994, 1.00287, 1.00039, 0.997945, 0.997137, 0.988806, 1.00404, 1.00075, 1.00804, 0.995298, 1.00777, 0.989161, 0.997769, 1.00808, 0.991775, 1.00877, 0.994398, 1.00509, 0.988928, 0.993552, 1.00175, 1.00648, 0.989671, 0.989493, 1.00124, 1.00491, 1.00051, 0.995217, 1.00598, 1.00288, 1.01118, 1.00418, 1.00896, 0.991342, 0.98651, 0.981058, 0.990842, 0.998498, 0.996461, 0.999257, 0.993703, 1.00625, 0.998064, 0.986894, 1.0148, 1.01025, 1.00562, 1.008, 1.0065, 1.01939, 0.994049, 1.01144, 1.0072, 0.990762, 1.00229, 1.01797, 0.993039, 0.998276, 1.00058, 0.997564, 0.985977, 1.00925, 1.00398, 0.992427, 1.00109, 0.993919, 0.995389, 0.990082, 0.980443, 0.98815, 1.01482, 1.00874, 1.01461, 1.00517, 0.994547, 0.990803, 0.996984, 1.00366, 0.99976, 0.983247, 1.00389, 0.998367, 0.98622, 0.986836, 0.993075, 0.992567, 0.997204, 0.996463, 0.985429, 0.998708, 0.99558, 1.01907, 0.993901, 1.00509, 0.999741, 1.00368, 1.00452, 1.00339, 1.00319, 0.994386, 1.00204, 0.998857, 0.988955, 0.999057, 1.00424, 0.992905, 0.988949, 1.00478, 0.988833, 1.00842, 0.971597, 1.00156, 1.0004, 1.00329, 0.992255, 0.986746, 1.00139, 1.00409, 0.998853, 0.986579, 0.99333, 0.996712, 0.981835, 0.995909, 0.992756, 0.985823, 1.01112, 0.995179, 1.0047, 0.996598, 1.00458, 0.993077, 1.00542, 0.988286, 1.00487, 1.0092, 0.994298, 0.99535, 1.00067, 0.987037, 1.00479, 1.01835, 1.00253, 0.988467, 1.02365, 0.991192, 1.01905, 0.987942, 0.991161, 0.995067, 0.976885, 1.00123, 1.02334, 0.994025, 0.989427, 1.00273, 1.00651, 0.98803, 1.00058, 0.998518, 0.996308, 1.00767, 1.02141, 1.01018, 1.00153, 0.999484, 1.01219, 0.965018, 0.990081, 0.998541, 0.998038, 1.01693, 0.98244, 1.00691, 1.02018, 0.997549, 1.00356, 1.01346, 0.979757, 0.995715, 0.96965, 0.989837, 1.00839, 1.00834, 1.00389, 0.982927, 0.994644, 1.01385, 1.01045, 0.998927, 0.999837, 1.01427, 1.01441, 0.994065, 1.0054, 0.996724, 0.983561, 1.01176, 0.987196, 1.00724, 0.990307, 1.01307, 1.00064, 1.00234, 1.02265, 1.03245, 1.00469, 0.997725, 0.996835, 0.98492, 1.00351, 0.987316, 0.989468, 1.00316, 0.992423, 0.996383, 1.0193, 0.987152, 0.980784, 1.0078, 0.995503, 1.02414, 1.01857, 1.01466, 0.989399, 0.989275, 1.01292, 1.0165, 0.988073, 1.03677, 1.00803, 1.01753, 0.990751, 0.981902, 1.01067, 0.992579, 0.992386, 1.01363, 1.02164, 1.00637, 0.965538, 1.00803, 0.995371, 0.982556, 1.01307, 0.999347, 1.01675, 0.979173, 0.986676, 0.999419, 0.991217, 0.975682, 0.990172, 1.00304, 0.989296, 0.950852, 0.981021, 0.992629, 0.970217, 0.969001, 1.00281, 0.956202, 0.95765, 0.979065, 0.958239, 0.984236, 0.990503, 1.03441, 0.957629, 0.968427, 0.987313, 0.958351, 0.971959, 0.91972, 0.920762, 1.00102, 0.922847, 0.957565, 0.939218, 0.914118, 0.899098, 0.923237, 0.954984, 0.992461, 0.932891, 0.866033, 0.904061, 0.935762, 0.796773, 0.984345, 0.931964, 0.935257, 0.964224, 0.973854, 0.975876, 1.03025, 0.960727, 0.892849, 1.04249, 0.991783, 0.968564, 1.0569, 0.992277, 0.943845, 0.94436, 1.06155, 0.977896, 1.02688, 0.880696, 0.798314, 1.00178, 0.851955, 0.902441, 0.892525, 0.702863, 1.28424, 0.87252, 0.823557, 1.31201, 0.401636, 0.71402, 1.10754, 0.624767, 1.31201, 1.17144, 0.728895, 0.728895, 1.12458, 0.468575, 0.468575, 3.7486, 5.6229, 1.40573, 0.234288, 0.937151, 0.468575, 0, 0.312384, 0, 0.468575, 0, 1, 0, 1.8743, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 }, + //RefMult: -35.0 #leq Vz #leq -25.0 + {0.996034, 1.00418, 1.03103, 1.0346, 1.02587, 1.01733, 1.015, 1.00224, 0.998612, 0.996034, 0.992851, 0.993878, 0.992603, 0.994764, 0.993501, 0.995693, 0.991858, 0.985881, 0.992184, 0.988801, 0.992475, 0.987694, 0.989397, 0.998357, 0.984776, 0.984277, 0.994717, 1.00035, 0.996614, 0.990997, 0.998699, 0.98993, 0.995643, 1.00041, 0.995208, 1.00291, 1.00139, 1.00055, 0.999977, 0.992848, 0.995825, 0.998454, 0.999676, 0.993258, 0.997845, 1.00086, 0.998106, 0.985646, 0.994367, 0.995825, 0.997849, 1.0012, 0.997699, 0.997849, 1.00162, 1.00077, 1.01426, 1.01069, 0.998729, 0.995932, 0.995487, 0.997119, 0.987978, 0.992025, 0.999461, 0.99923, 0.990549, 0.996648, 0.996938, 0.993736, 1.00591, 0.986494, 0.997782, 0.994209, 0.998626, 1.00346, 0.998418, 0.99352, 1.00422, 0.99482, 0.995681, 0.992873, 0.995736, 0.995351, 1.00293, 0.994715, 0.989141, 0.999146, 0.991081, 1.00234, 0.998868, 1.00182, 1.01177, 1.00037, 0.993, 0.991654, 1.00022, 1.00864, 0.997216, 1.00488, 1.00859, 0.997284, 1.00007, 0.993246, 0.999228, 1.00602, 1.00276, 1.00321, 1.0052, 1.00633, 0.998101, 1.00006, 1.0065, 0.999658, 1.00654, 0.986779, 0.994197, 0.992006, 1.00003, 0.996506, 1.00787, 0.996584, 0.978907, 0.998041, 1.00061, 1.01033, 1.00916, 0.998582, 0.999042, 0.997054, 1.01149, 1.01517, 1.00431, 0.989715, 0.996635, 0.999908, 0.984705, 0.981792, 0.989954, 0.986423, 0.996907, 1.00329, 1.00207, 0.997809, 1.00641, 1.00109, 0.995738, 1.00309, 1.0152, 0.992643, 0.994502, 1.01162, 0.993359, 0.998434, 1.01859, 1.00342, 0.996356, 1.00041, 0.991899, 0.995425, 0.999678, 1.00008, 0.993338, 1.00073, 1.00005, 0.988953, 1.00484, 0.992664, 0.993679, 1.01524, 1.00836, 1.02331, 0.997907, 0.990245, 0.99008, 0.997386, 0.992387, 0.997338, 0.993059, 1.00618, 0.9948, 0.989706, 0.984578, 0.994566, 0.992641, 0.982987, 1.00791, 0.988931, 0.995038, 1.00096, 1.0152, 1.00134, 1.0022, 0.996891, 1.00649, 1.00077, 1.0025, 1.00801, 0.991069, 1.00113, 0.995665, 0.993924, 1.0102, 0.991201, 0.978904, 0.998578, 1.0093, 1.00088, 1.00027, 0.990597, 1.01901, 1.00541, 0.993355, 0.993531, 0.99727, 0.98947, 0.997235, 1.00857, 0.994075, 1.01215, 1.00553, 0.982851, 0.99755, 1.00057, 0.98924, 1.00888, 1.00854, 0.992418, 1.00142, 1.0028, 0.996976, 0.998597, 0.994125, 1.00993, 1.00189, 0.990699, 1.00092, 1.00555, 0.990474, 1.00336, 1.01216, 1.0077, 0.991942, 0.980198, 0.990247, 1.00927, 1.0038, 0.990854, 0.998217, 0.966947, 1.00405, 1.00714, 0.984238, 0.996454, 0.995781, 1.00708, 0.988765, 1.00686, 1.00118, 1.0084, 1.00291, 1.00768, 0.983066, 1.00442, 0.987152, 0.999514, 0.979244, 0.986542, 1.00497, 0.998643, 1.00452, 0.988501, 1.00666, 0.990845, 0.984513, 0.998015, 0.996714, 0.988667, 1.00376, 0.979549, 0.982335, 1.02174, 0.998142, 1.00293, 0.978072, 0.977128, 1.00881, 1.00789, 0.997345, 1.00814, 1.01312, 1.00552, 1.01083, 1.0027, 0.988619, 0.984373, 0.985829, 0.991766, 0.990713, 1.00354, 1.01734, 0.991146, 1.00434, 1.0076, 0.995059, 1.00488, 1.01111, 0.984868, 0.975381, 0.992402, 1.01569, 0.992696, 0.994659, 1.00867, 0.978481, 1.00631, 0.978484, 0.980236, 0.979509, 0.990475, 1.00729, 1.01346, 1.003, 1.02361, 0.99393, 1.00241, 1.03521, 0.999298, 1.02772, 1.01955, 1.0009, 0.994023, 1.00187, 1.01179, 0.994778, 1.01632, 1.0006, 1.00911, 1.00802, 0.955049, 0.978918, 0.997704, 0.978025, 1.0287, 0.980228, 0.969138, 0.974526, 0.994199, 0.983111, 1.01961, 0.962067, 1.00771, 1.00356, 0.977251, 0.978747, 0.979307, 1.00668, 0.979504, 0.993675, 1.03146, 0.944853, 0.991635, 0.973728, 0.956226, 0.979456, 0.965262, 1.00241, 0.969563, 0.928794, 0.993074, 0.935501, 1.00526, 0.925411, 0.926177, 0.950686, 0.959291, 0.925786, 0.92527, 0.931633, 0.918164, 0.920573, 0.976496, 0.919214, 0.914532, 0.862921, 0.955896, 0.940911, 0.928299, 0.914532, 0.915392, 0.988659, 0.907784, 0.911943, 0.913873, 0.950331, 1.02434, 0.919042, 0.995873, 1.00289, 0.905883, 1.0585, 0.919248, 0.931608, 1.08938, 1.0376, 0.873639, 0.879277, 1.1065, 0.756368, 0.920121, 0.997907, 0.796213, 0.857461, 0.689031, 1.08157, 0.651134, 0.822784, 1.22773, 0.510693, 0.812331, 0.696687, 0.964643, 0.482322, 0.803869, 2.25083, 0.482322, 0.578786, 0.42873, 0.578786, 0.771715, 1.44696, 1.15757, 0.964643, 0.723482, 0.964643, 0, 0.482322, 1, 0.482322, 1, 0.964643, 1, 1.92929, 1, 0.964643, 1, 1, 1, 0.964643, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 }, + //RefMult: -25.0 #leq Vz #leq -15.0 + {1.00577, 1.00839, 1.01797, 1.01992, 1.01496, 1.01154, 1.01151, 1.00924, 1.00738, 1.00293, 0.995393, 0.996039, 0.996974, 0.996831, 0.99555, 0.994878, 0.992812, 0.990912, 0.994366, 0.99565, 0.999011, 1.00485, 1.00171, 1.00236, 0.993656, 0.993824, 0.999162, 1.00246, 0.987201, 0.996927, 0.999221, 0.988044, 1.00125, 1.00175, 0.991518, 1.0063, 0.997187, 1.00392, 1.00062, 1.00194, 0.991419, 0.992211, 0.995216, 1.00128, 0.992777, 0.989838, 1.00129, 0.990222, 0.993148, 0.993958, 0.995532, 1.00335, 0.990548, 0.990312, 0.99351, 0.993077, 1.01147, 1.00572, 0.991065, 1.00319, 0.991111, 0.9985, 0.994673, 0.98901, 0.999003, 1.0021, 0.996091, 0.994189, 0.997364, 0.986404, 1.00071, 0.983212, 0.999035, 1.00256, 1.00128, 1.00688, 1.00289, 0.996223, 1.00249, 1.00036, 0.993932, 1.00022, 0.9914, 0.998144, 0.996304, 0.985608, 0.98442, 1.00797, 0.992024, 1.00478, 0.995321, 1.00941, 1.01409, 0.996325, 1.00093, 0.996724, 0.995854, 1.002, 1.00218, 1.00751, 0.996281, 1.00646, 0.997088, 0.994143, 1.01038, 0.996264, 0.996793, 1.00315, 1.00131, 0.99397, 0.990593, 0.990413, 1.002, 0.996529, 1.00488, 0.9866, 1.00016, 0.98707, 0.986888, 0.996841, 0.999895, 1.0003, 1.001, 0.991509, 1.01271, 0.997178, 1.00126, 0.992031, 1.00865, 0.990426, 0.996898, 1.00126, 1.00323, 0.979938, 0.986983, 0.987142, 0.994853, 0.994545, 1.0061, 0.987994, 0.991943, 0.990801, 0.994351, 0.996919, 1.00104, 0.99993, 0.991045, 0.999257, 1.02184, 0.992341, 1.01032, 0.993077, 0.98154, 0.998699, 1.01774, 1.00828, 0.993714, 0.999767, 1.00347, 0.987197, 1.00258, 1.00003, 0.999625, 1.00769, 1.00139, 0.987243, 0.986399, 0.988317, 1.01106, 1.01991, 1.00001, 1.01095, 1.00013, 0.98501, 0.990776, 0.999377, 0.998429, 0.989149, 0.984592, 0.99378, 0.99817, 0.993791, 0.984069, 0.992633, 0.982847, 0.985787, 1.01286, 0.988532, 1.00324, 1.00565, 1.01241, 0.991023, 1.00696, 0.993654, 1.00472, 0.995919, 0.998389, 0.996686, 1.00572, 0.982905, 1.00676, 0.988932, 0.992906, 1.00582, 0.982632, 1.00492, 1.00994, 0.99878, 0.993758, 0.987103, 1.00608, 1.01671, 1.00248, 0.995438, 0.992628, 0.989183, 1.00921, 1.00934, 0.991632, 0.999267, 0.994736, 0.982582, 1.01033, 0.9996, 0.992631, 0.996199, 0.990636, 0.994016, 0.989331, 0.992496, 1.01346, 1.00265, 0.998851, 1.01735, 0.993522, 0.980676, 1.01008, 1.00206, 1.01054, 0.988043, 1.01064, 0.991132, 0.97483, 1.011, 0.989023, 1.01034, 0.996094, 0.999642, 0.986941, 0.981843, 0.997268, 0.992778, 0.999289, 0.988115, 1.00413, 1.0081, 1.00678, 1.02461, 0.98677, 0.998579, 0.987215, 1.00519, 0.994425, 1.00421, 0.996761, 1.00108, 0.972786, 0.993422, 1.00108, 0.992694, 1.01715, 0.979413, 0.994718, 0.98784, 0.993996, 1.00781, 1.01119, 0.976123, 1.00375, 1.00717, 0.994138, 1.01347, 1.02713, 0.985963, 0.985169, 0.991944, 1.00147, 1.00799, 0.989143, 1.01915, 1.00711, 0.985462, 0.979489, 1.00169, 0.997741, 0.964942, 1.01688, 0.991275, 1.01446, 0.991897, 1.01724, 0.981684, 0.999782, 0.999583, 1.00318, 1.00501, 1.00873, 0.991766, 0.956133, 0.99685, 0.998012, 1.00204, 0.981877, 0.987226, 0.995071, 1.00335, 0.996081, 0.99008, 0.994472, 0.996533, 0.989083, 1.00289, 1.00277, 0.98614, 0.993013, 1.02086, 1.02531, 0.992383, 1.02065, 1.01398, 1.00459, 0.991757, 1.00267, 1.02063, 0.993781, 0.982312, 1.00832, 1.01151, 1.0032, 0.980749, 0.984232, 0.98982, 1.00076, 1.01302, 1.00442, 0.999668, 0.975607, 0.978652, 0.985279, 1.00881, 0.984189, 1.00576, 0.9935, 0.980378, 0.965299, 1.01305, 1.00439, 1.00086, 0.996638, 1.04193, 0.988646, 0.983573, 0.976847, 0.988996, 0.978615, 1.00894, 0.991082, 1.0081, 0.993747, 0.987939, 0.945508, 0.981649, 0.990777, 0.952004, 0.955751, 0.945659, 0.945307, 0.925931, 0.949225, 0.959665, 0.930721, 1.00981, 0.920472, 0.901038, 0.916383, 1.00137, 0.943747, 0.976389, 0.950186, 0.917935, 0.978412, 1.01279, 1.03644, 0.984353, 0.961192, 0.987382, 0.934422, 1.08657, 1.02791, 0.933874, 1.0462, 0.972349, 0.901259, 1.02341, 1.06777, 0.828929, 1.207, 0.971893, 1.01374, 0.824728, 1.03616, 0.898006, 0.855959, 0.64197, 0.958449, 0.590612, 0.89207, 1.14841, 0.590612, 1.31247, 0.853106, 0.546863, 0.574206, 0.984353, 0.626407, 0.861309, 0.843731, 0.562488, 0.590612, 1.31247, 1.96871, 0.843731, 0.492177, 1.47653, 0.492177, 0, 1, 0, 0.984353, 1, 1, 0, 1, 0.984353, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 }, + //RefMult: -15.0 #leq Vz #leq -5.0 + {1.00812, 1.00466, 1.00991, 1.00983, 1.00441, 1.00129, 1.00653, 1.00005, 1.00241, 1.00303, 0.999437, 1.00274, 1.00316, 0.999333, 1.00215, 0.995538, 0.997172, 0.999857, 0.996075, 0.996144, 1.00314, 1.00841, 1.00204, 0.999352, 0.990795, 0.991522, 1.0087, 0.998486, 0.991824, 0.995766, 0.991685, 0.992912, 0.995902, 1.00271, 0.99768, 0.999341, 1.00051, 0.998238, 1.00282, 0.992447, 0.990741, 0.995503, 1.002, 1.00251, 0.99542, 1.00189, 1.00062, 0.994684, 1.00055, 0.993434, 0.990523, 0.99509, 1.00763, 0.994753, 0.997479, 1.00341, 1.00981, 1.00001, 1.0002, 1.00106, 1.0014, 1.00535, 1.00623, 0.997506, 1.00466, 0.996099, 1.00712, 0.995435, 0.999274, 0.994596, 1.00671, 0.988092, 1.00552, 1.01042, 0.999309, 0.998986, 1.00376, 1.00243, 1.00072, 0.9951, 0.993845, 1.00429, 0.996815, 0.9939, 0.999552, 0.993138, 0.987514, 0.993027, 0.986865, 0.997145, 1.00586, 1.00202, 1.00451, 1.00013, 1.00006, 0.986492, 0.993506, 0.998277, 0.999594, 1.00379, 0.989906, 0.995104, 1.00402, 0.993022, 0.994815, 1.0003, 0.993603, 1.00496, 1.00059, 1.00077, 0.991171, 1.00518, 1.00604, 0.99354, 1.01557, 0.994093, 1.00026, 0.984787, 0.988818, 1.00145, 0.989996, 0.9982, 0.986529, 0.994554, 1.00004, 0.999062, 0.997287, 1.00377, 1.00011, 1.00321, 1.00552, 1.00649, 1.00409, 0.994752, 0.988791, 0.996664, 1.00145, 1.00044, 0.9929, 0.996274, 1.00468, 0.987125, 0.997288, 1.00005, 1.0104, 1.00666, 0.986308, 0.991212, 1.01207, 0.989718, 0.999507, 1.0114, 0.988817, 1.00098, 1.01085, 0.994128, 0.997197, 1.00812, 0.987134, 0.983749, 1.00247, 0.996156, 0.988853, 1.00586, 0.99979, 0.985677, 0.993331, 0.991739, 0.999661, 1.00762, 1.00993, 1.01495, 0.999136, 0.996546, 0.993953, 0.996506, 1.00261, 1.0004, 0.993251, 0.996944, 0.998077, 1.01512, 0.993387, 0.996044, 0.99687, 0.996498, 1.01042, 0.980214, 1.00874, 1.00215, 1.00508, 0.995767, 1.01239, 0.979269, 1.01036, 1.00268, 1.01029, 1.00481, 1.01555, 0.993779, 0.997957, 0.985436, 1.00555, 0.99068, 0.991999, 0.989926, 1.01981, 0.990884, 1.00208, 0.996617, 1.01455, 1.01316, 1.00511, 0.990536, 0.98393, 1.00321, 1.00897, 1.0074, 0.993141, 0.997888, 0.991904, 0.980996, 0.991329, 0.999312, 0.990319, 1.00666, 0.989075, 0.993968, 0.985267, 0.980822, 0.993187, 0.999461, 1.01038, 1.00453, 0.995977, 0.983545, 0.988534, 0.997147, 0.992919, 1.00116, 1.02272, 0.992915, 0.978797, 1.01031, 0.991647, 1.01963, 1.00155, 0.989489, 0.994566, 0.979923, 0.999987, 0.994781, 0.974197, 0.991842, 1.00258, 1.01126, 0.996664, 0.999595, 1.00507, 1.00369, 0.998956, 1.01522, 0.997874, 1.0033, 0.994886, 1.00338, 0.980562, 0.993867, 1.00018, 0.994357, 1.00541, 1.00107, 1.00555, 0.995577, 0.989001, 1.00182, 1.00809, 0.993826, 0.99929, 0.996797, 0.986035, 1.01343, 1.01699, 0.970835, 0.979631, 0.992257, 1.01964, 0.995432, 1.00522, 1.00318, 1.00529, 1.00493, 1.00242, 1.00285, 0.991329, 0.983354, 1.00965, 1.00478, 0.994918, 0.991466, 1.01928, 0.984322, 0.994567, 0.999966, 1.01816, 1.004, 1.00737, 0.996272, 0.985578, 1.00732, 1.0169, 0.997795, 0.981338, 1.00168, 0.990231, 0.999791, 0.981696, 0.985929, 0.968844, 0.999848, 0.993985, 1.02022, 1.01031, 0.99947, 1.00052, 1.008, 1.03242, 0.989136, 1.03748, 1.00429, 0.995577, 1.00727, 1.01447, 0.999245, 0.980803, 1.01679, 1.0053, 1.00268, 1.01002, 0.983055, 1.00012, 0.994292, 0.981211, 1.00524, 0.997884, 0.985993, 1.00315, 0.999201, 0.997132, 0.98597, 0.982362, 1.0247, 0.992972, 0.972993, 0.977939, 0.972844, 1.03785, 0.986684, 0.974857, 1.03687, 0.981867, 1.01627, 0.966172, 1.00019, 0.98511, 1.02831, 1.00451, 0.999925, 0.95636, 0.992661, 0.981596, 0.974734, 0.965367, 0.951991, 0.973575, 0.976682, 0.930922, 0.958682, 0.978178, 0.944909, 0.96501, 1.03233, 0.909623, 0.966863, 0.855092, 1.01255, 0.943471, 0.920113, 0.935774, 1.00412, 1.06339, 0.959366, 1.08976, 1.01821, 0.956336, 1.01535, 0.913027, 1.07132, 1.03618, 0.903837, 1.01161, 0.990549, 0.930659, 0.946108, 1.05432, 1.25894, 1.19368, 1.03653, 0.982426, 1.013, 0.996664, 0.89356, 0.906058, 0.711903, 1.0846, 0.689998, 1.2043, 1.03358, 0.597998, 0.797331, 0.925473, 0.664442, 2.32555, 0.830553, 0.872081, 1.16277, 1.99333, 0.797331, 0.597998, 0.797331, 2.98999, 1.495, 0.249166, 0.996664, 0.996664, 0, 0.332221, 0, 1, 1, 0.996664, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 }, + //RefMult: -5.0 #leq Vz #leq 5.0 + {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 }, + //RefMult: 5.0 #leq Vz #leq 15.0 + {0.999957, 1.00096, 1.0085, 1.00678, 1.0033, 1.00503, 1.00607, 1.00274, 1.00127, 1.0032, 1.00164, 1.00056, 1.00154, 1.00005, 0.998141, 0.998198, 1.00049, 0.998516, 0.999885, 1.00441, 1.01287, 1.00418, 0.996543, 1.00769, 0.995004, 0.992746, 1.00472, 0.997701, 0.994821, 1.00112, 0.996903, 0.99078, 0.995666, 0.999688, 0.996798, 1.00053, 1.00312, 1.00287, 1.00049, 0.991759, 0.991007, 0.994868, 1.00683, 1.00098, 0.995536, 0.996921, 0.995909, 0.997866, 0.999885, 1.00617, 1.00241, 1.00027, 0.993408, 0.996415, 0.997428, 0.993843, 1.01314, 1.01228, 1.00032, 1.00548, 1.00507, 0.996517, 0.988176, 0.991384, 1.00367, 0.998061, 1.00031, 0.988422, 1.00246, 0.987564, 0.996234, 0.99121, 1.00372, 0.998814, 1.00008, 0.997481, 1.00382, 1.00094, 1, 1.01613, 0.994891, 1.00355, 0.989519, 0.993321, 1.00582, 0.998048, 0.985531, 0.999074, 0.989525, 1.00377, 0.994133, 1.00711, 1.00458, 0.997733, 0.998011, 0.99733, 0.989428, 1.00074, 1.00183, 1.01275, 0.987556, 1.00049, 1.00474, 0.99522, 0.998926, 0.995702, 0.999144, 1.00694, 0.995037, 1.00025, 0.99138, 0.998613, 1.00127, 0.989143, 0.99994, 0.992978, 0.999078, 0.991268, 0.995852, 1.00538, 0.993592, 0.996025, 0.998289, 0.993422, 1.00994, 0.991472, 1.00446, 1.00256, 0.995337, 1.00273, 0.997501, 0.998945, 0.997607, 1.00111, 0.984449, 0.990595, 1.00021, 0.99742, 0.998153, 0.982578, 0.995552, 0.993004, 0.997421, 1.00524, 1.01116, 0.998928, 1.00459, 0.995707, 1.01897, 0.992359, 1.00043, 1.0111, 0.990508, 0.995839, 1.01669, 0.996544, 0.996905, 1.00205, 0.974694, 0.985914, 1.00186, 1.00701, 0.993184, 1.00555, 0.985379, 0.996096, 1.00036, 0.987049, 1.00069, 1.01695, 1.00792, 1.02083, 0.993335, 1.00773, 0.993239, 0.999854, 0.991526, 0.995118, 0.986855, 1.00733, 1.00629, 0.987374, 0.984863, 0.991383, 0.998556, 1.00228, 1.00624, 0.992469, 1.00576, 0.997857, 1.00919, 0.999809, 1.00896, 0.990175, 1.00762, 0.997167, 0.997389, 0.991891, 1.00678, 1.00303, 1.00867, 0.993114, 0.999651, 1.00306, 0.985639, 0.985351, 1.01004, 0.995817, 1.00297, 0.991696, 1.01162, 1.01033, 1.00661, 0.997048, 0.979203, 0.996005, 1.00639, 1.00291, 0.987734, 0.992984, 1.00909, 0.985156, 0.990431, 1.01175, 0.999415, 1.00871, 1.0001, 1.00413, 0.985987, 1.01147, 1.0021, 1.00703, 0.995181, 0.998113, 0.990602, 0.98306, 1.00229, 1.00544, 1.00654, 1.0099, 1.022, 1.00001, 0.973148, 1.00741, 0.984345, 1.00339, 0.992566, 1.00084, 1.00202, 0.980694, 0.997166, 1.00513, 1.0017, 0.982102, 0.999004, 0.991966, 0.996671, 1.0126, 0.995077, 1.00112, 0.997415, 1.01371, 1.01081, 1.01118, 1.00853, 1.0083, 0.985064, 0.98745, 1.00551, 1.00397, 1.01986, 0.999803, 1.00313, 0.992914, 0.986023, 1.02005, 0.991863, 0.994852, 0.993949, 0.975059, 0.988957, 1.02066, 1.02355, 0.995232, 0.972623, 0.993398, 0.998493, 1.01114, 0.994877, 0.997232, 1.00073, 1.01446, 0.993372, 1.00009, 1.00303, 0.96012, 1.00247, 1.0118, 0.983686, 1.00459, 1.00373, 0.995157, 0.992845, 0.995162, 1.00411, 1.00232, 1.01161, 0.992473, 0.987949, 1.00887, 1.01409, 0.977312, 0.996476, 1.00863, 0.984175, 1.00218, 0.979808, 0.998372, 0.997285, 1.00099, 1.01067, 1.03349, 1.00442, 0.999712, 0.995818, 1.01845, 1.02715, 0.984153, 1.0301, 0.990027, 1.01096, 0.997643, 1.00395, 1.01032, 0.984552, 0.993953, 0.994799, 1.0009, 1.00371, 0.972208, 1.00235, 0.989328, 1.01571, 1.00802, 1.00852, 0.993953, 0.963755, 0.998594, 1.00092, 0.998936, 0.968204, 1.00337, 0.993446, 0.999593, 0.9514, 0.995506, 1.01769, 1.00009, 0.983561, 1.01934, 0.951436, 1.01386, 1.01173, 0.980375, 1.00023, 0.972523, 1.02371, 0.98555, 1.00382, 0.991113, 0.957854, 1.00467, 0.974523, 0.971286, 1.02484, 0.957902, 0.958858, 0.89363, 0.88883, 0.989341, 0.968436, 0.968772, 0.961532, 0.960811, 0.896199, 0.981792, 1.01858, 0.934904, 0.908767, 1.05668, 0.944297, 1.02241, 0.969124, 1.00926, 0.992918, 1.08222, 0.955781, 1.10357, 0.96722, 0.980017, 1.00084, 0.971911, 0.917798, 1.03543, 0.988189, 0.846082, 1.03615, 0.754183, 1.20557, 0.79162, 1.01279, 1.15083, 0.766084, 1.10657, 1.05282, 0.840298, 0.962712, 0.961567, 0.689475, 0.796727, 0.863121, 0.829924, 3.48568, 1.10657, 1.16189, 0.995909, 1.19509, 0.663939, 0.597545, 0.663939, 1.19509, 1.49386, 0.497954, 1.49386, 0.497954, 0, 0.995909, 1, 0.497954, 0, 1, 1, 1.99182, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 }, + //RefMult: 15.0 #leq Vz #leq 25.0 + {0.987533, 0.990567, 1.0103, 1.01679, 1.01672, 1.01111, 1.01276, 1.00758, 1.00402, 1.00491, 0.998536, 0.999413, 0.998342, 0.997007, 0.997071, 0.994504, 0.99644, 0.987742, 0.994486, 0.99518, 1.00121, 1.00207, 0.997126, 1.00319, 0.986684, 0.992888, 1.00448, 0.996728, 0.994169, 0.999828, 1.00463, 0.988487, 0.991633, 1.00255, 0.998041, 0.992386, 0.99785, 0.995773, 0.998856, 0.985389, 0.995476, 0.99264, 1.00191, 1.0021, 0.999185, 0.996327, 0.999326, 0.987693, 0.996769, 1.00271, 1.0027, 1.00091, 1.00115, 1.00124, 1.00218, 0.997718, 1.01481, 1.00975, 1.00423, 1.00079, 0.993828, 1.00362, 0.99047, 0.989744, 0.998095, 1.00363, 0.999526, 1.0002, 1.00158, 0.991983, 0.998448, 0.988905, 0.991936, 1.00399, 0.991019, 1.00636, 1.00375, 1.00448, 1.01029, 0.997081, 0.996112, 1.00601, 0.995025, 1.00448, 1.00436, 0.990666, 0.991673, 1.00001, 1.00724, 1.00012, 0.999051, 1.00276, 1.00956, 0.9998, 1.00541, 0.992544, 1.00408, 1.00223, 1.00085, 1.01516, 0.999466, 0.997195, 0.999799, 0.993312, 0.997976, 1.00285, 1.0123, 1.00275, 0.997413, 0.996447, 0.99802, 0.994546, 1.00238, 0.989257, 1.00202, 0.991798, 0.991899, 0.998442, 0.992119, 1.00485, 0.991757, 0.996549, 0.989234, 0.987308, 1.00938, 1.00015, 1.00777, 1.00701, 1.00152, 0.997835, 1.00437, 1.0103, 0.996925, 0.989451, 0.990214, 0.99193, 1.00136, 0.995091, 1.00809, 0.994669, 0.999454, 0.985324, 0.991942, 1.00163, 1.0083, 1.01286, 1.00103, 0.994976, 1.01984, 0.987462, 1.01467, 1.00608, 0.99668, 0.98979, 1.01212, 0.997101, 0.995796, 0.988785, 1.0026, 0.983175, 0.998477, 0.992921, 1.00483, 1.00346, 0.99347, 0.99208, 0.994348, 0.982051, 1.00296, 1.01292, 0.998997, 1.02386, 1.00566, 0.99509, 0.987555, 1.0064, 0.997551, 1.00269, 0.984919, 1.00903, 1.00168, 1.00123, 0.995084, 0.995406, 0.99953, 0.992211, 1.01061, 0.983631, 1.00508, 1.00195, 0.999397, 0.994623, 1.00691, 0.988094, 1.01395, 1.01096, 1.00939, 0.999009, 0.995192, 0.982866, 1.00206, 1.00225, 1.00439, 0.996316, 0.985008, 1.00688, 1.0172, 0.999041, 1.00706, 0.99117, 0.994773, 1.01284, 0.99511, 1.00359, 0.98645, 0.998787, 1.00282, 1.00252, 0.984255, 1.00584, 0.999539, 0.980087, 0.992071, 0.998495, 0.990511, 1.01048, 0.995574, 0.999043, 0.992198, 1.00525, 1.01873, 1.00299, 0.993718, 1.00944, 0.991643, 0.992791, 1.00973, 1.00041, 0.995388, 1.00479, 1.01991, 0.998496, 0.999644, 1.00072, 0.990085, 1.01057, 0.988012, 0.986422, 0.989775, 0.978902, 0.997916, 1.00807, 0.982358, 0.974375, 1.00469, 1.00433, 0.999475, 1.00948, 0.987503, 1.00859, 0.994957, 1.00235, 1.00974, 1.01075, 1.00686, 1.01353, 0.979956, 0.997751, 0.995403, 0.999888, 1.01204, 0.997982, 0.999107, 1.01504, 0.986404, 1.01161, 1.01066, 1.00308, 0.99667, 0.992949, 0.98654, 1.01225, 1.00975, 0.983429, 0.977489, 0.98531, 1.00399, 1.00075, 1.00389, 0.987134, 1.0065, 1.00974, 1.01056, 1.01775, 1.0037, 0.97631, 1.01294, 1.01269, 0.995681, 1.00014, 0.997894, 0.988444, 0.993386, 1.01098, 1.00332, 1.00243, 1.01437, 0.994448, 0.982005, 1.00595, 1.02618, 0.994757, 0.989598, 1.00934, 0.982752, 0.99793, 0.986387, 0.990621, 0.996161, 1.00304, 0.998108, 1.02192, 1.01599, 0.999169, 1.0034, 1.02424, 1.0315, 0.98368, 0.998985, 0.997664, 1.01188, 0.999917, 1.01383, 0.996317, 0.984388, 1.00765, 1.01047, 0.991716, 1.00151, 0.954044, 1.00483, 0.993566, 0.993324, 1.01817, 1.00374, 0.9997, 0.972247, 0.992564, 0.994708, 1.00056, 0.986771, 1.04504, 0.989923, 0.995151, 0.966226, 0.97783, 1.00848, 1.00654, 1.01025, 0.994353, 0.992584, 0.992356, 1.02738, 1.0058, 1.00792, 1.01287, 0.991706, 0.992961, 0.987464, 1.00174, 0.957172, 1.00425, 0.996388, 0.984495, 1.01255, 0.964237, 0.946143, 0.957959, 0.957574, 0.98642, 0.984837, 1.08866, 0.999732, 1.04226, 0.882295, 1.01446, 0.93539, 0.922278, 1.02248, 1.01213, 1.0683, 1.10042, 1.00415, 1.03893, 0.978072, 1.15386, 0.961935, 1.27782, 0.940144, 0.887967, 1.06815, 0.900577, 1.1011, 0.934053, 1.00758, 1.0049, 1.22106, 1.05136, 0.87043, 0.824402, 1.03575, 1.31195, 0.894513, 0.670884, 1.13771, 0.830219, 1.24065, 1.25232, 0.737973, 0.787171, 0.639576, 0.81997, 0.459183, 0.983964, 1.72194, 2.29592, 1.18076, 0.983964, 0.983964, 0.655976, 1, 5.90378, 0.491982, 2.95189, 1, 0, 0.983964, 0, 0.983964, 1, 0.983964, 1, 0.983964, 0.983964, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 }, + //RefMult: 25.0 #leq Vz #leq 35.0 + {0.96724, 0.987127, 1.0186, 1.02591, 1.02502, 1.01711, 1.01379, 1.00496, 0.999928, 1.00079, 0.997608, 0.994962, 0.995401, 0.992157, 0.996969, 0.995556, 0.990084, 0.982782, 0.990474, 0.991535, 0.997081, 0.989662, 0.993028, 0.995346, 0.979906, 0.984631, 0.999061, 0.999314, 0.997501, 0.9943, 0.993364, 0.990069, 1.00236, 0.995958, 0.998137, 1.00673, 0.999462, 1.00886, 0.996695, 0.992872, 0.990203, 1.00155, 1.00131, 1.00544, 1.00195, 0.996321, 1.01369, 0.991116, 1.00226, 1.00134, 0.999431, 1.00262, 0.997178, 0.998558, 1.00179, 1.00217, 1.00941, 1.01046, 1.00774, 0.997661, 1.00231, 1.0048, 0.999665, 0.998802, 0.998682, 1.00099, 0.999285, 0.996518, 0.993159, 0.992909, 1.00749, 0.998053, 0.997005, 1.00817, 1.0015, 1.01583, 1.00415, 1.00643, 1.00538, 1.00071, 0.995983, 1.01069, 1.00261, 1.00392, 0.998621, 0.992792, 0.996163, 1.00807, 1.00453, 1.00351, 0.998554, 1.01242, 1.00968, 0.99599, 0.994532, 1.0026, 0.996079, 1.00343, 1.00529, 1.00507, 0.999088, 1.00052, 1.00583, 0.996034, 0.990754, 1.0021, 0.998466, 1.00564, 1.00417, 1.00198, 0.996071, 0.99883, 1.00369, 0.992973, 1.00168, 0.985664, 1.00226, 0.99273, 0.994185, 1.00622, 1.0021, 0.995255, 0.998558, 1.00237, 1.01302, 1.00049, 1.00161, 0.987753, 1.00112, 1.00724, 0.993, 1.00767, 1.00162, 0.988942, 0.998208, 0.993598, 0.993341, 0.999907, 1.00316, 0.991231, 0.993479, 0.99545, 1.00011, 0.999774, 0.997675, 1.00577, 1.00489, 0.999487, 1.0245, 0.991705, 1.00438, 1.01307, 0.997692, 0.999003, 1.01803, 0.995379, 1.00301, 0.997958, 1.00117, 0.987478, 1.00676, 0.994122, 0.979029, 1.00886, 0.990893, 1.00197, 0.995058, 0.980207, 0.998593, 1.02, 1.00247, 1.01262, 1.0022, 0.9887, 0.990093, 1.01123, 1.00497, 1.00036, 0.986515, 1.00356, 0.993335, 0.995082, 0.991627, 0.985622, 1.00019, 1.00513, 1.00804, 0.980395, 1.01352, 1.00559, 1.00982, 0.988689, 1.00592, 0.988113, 1.00032, 1.00676, 1.0154, 0.992787, 1.00324, 0.994028, 0.997275, 0.988518, 1.0115, 0.998009, 0.98176, 1.00453, 1.00855, 1.00307, 1.00389, 1.00704, 1.01221, 1.00927, 1.00608, 1.00565, 0.988151, 0.997877, 1.02147, 0.998955, 0.988455, 1.00173, 1.00451, 0.991868, 0.996124, 1.00282, 0.989, 1.00139, 0.996578, 0.999177, 0.997962, 0.995131, 1.01002, 1.01977, 1.00624, 0.992653, 0.994327, 0.99277, 1.01043, 0.990309, 0.994933, 1.01468, 1.01353, 0.999546, 0.985227, 1.01108, 0.989869, 1.01758, 0.992977, 0.992383, 1.00329, 0.987167, 0.977324, 1.00773, 0.991965, 0.987061, 1.02035, 1.00954, 1.01081, 1.01475, 0.99171, 0.993974, 1.00116, 1.00349, 1.00545, 1.01165, 0.989287, 1.00228, 0.989571, 0.992148, 0.980424, 1.00599, 1.01108, 0.994786, 1.00241, 1.01554, 0.990217, 1.01916, 1.00565, 0.985838, 0.995172, 0.986661, 0.983601, 1.01727, 1.00391, 0.986047, 0.994221, 0.998633, 1.02156, 0.997795, 0.983081, 0.99956, 0.98965, 1.01253, 0.991037, 1.01722, 1.00304, 0.982492, 1.0311, 0.993965, 1.03071, 0.997165, 1.0178, 0.984787, 1.01475, 1.00814, 1.00083, 0.999016, 0.996098, 0.976944, 0.985973, 1.02065, 1.01681, 0.993718, 1.00515, 1.01905, 1.013, 1.00248, 0.973175, 0.998419, 0.999353, 1.00125, 1.00146, 1.01969, 1.01701, 1.00755, 1.01058, 1.01118, 1.00846, 0.994179, 1.0217, 1.00167, 0.995932, 0.981575, 0.991485, 1.00114, 1.00586, 1.00453, 1.00458, 1.00155, 1.01176, 0.976913, 0.97666, 0.983615, 1.02202, 1.01237, 0.996191, 1.00729, 0.989261, 1.00354, 0.970795, 0.992767, 0.9891, 1.00555, 1.00951, 1.01243, 0.957868, 0.979971, 0.995121, 0.978742, 0.976817, 1.02226, 0.97886, 0.990547, 0.997787, 1.00357, 0.959665, 1.01009, 0.990674, 1.01332, 0.941488, 1.00251, 0.960638, 0.985834, 0.989778, 0.996352, 0.965198, 0.946504, 0.975152, 0.911289, 0.946226, 0.978728, 0.963254, 0.99094, 0.945223, 0.955383, 0.906478, 1.00074, 0.919107, 0.947112, 1.07656, 0.883765, 0.926594, 0.996388, 0.954515, 1.00951, 0.925098, 1.13057, 0.918532, 1.08937, 1.08347, 0.943703, 0.99854, 0.929675, 0.97798, 1.21441, 1.17529, 0.771286, 1.05642, 1.01622, 0.821277, 1.10694, 1.11243, 0.879537, 0.820517, 0.642739, 1.15071, 1.08462, 0.964108, 1.34975, 0.347079, 0.81188, 0.783338, 0.876462, 0.674875, 0.964108, 0.964108, 0.562396, 5.78465, 0.642739, 0.413189, 3.85643, 1, 2.89232, 0.241027, 1.44616, 1.92822, 0, 0.241027, 1, 0.964108, 0, 0.482054, 1, 1.92822, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 }, + //RefMult: 35.0 #leq Vz #leq 45.0 + {0.937215, 0.973014, 1.02149, 1.03015, 1.02143, 1.01107, 1.0078, 1.00077, 1.00046, 1.00225, 0.998379, 0.992582, 0.995814, 0.995262, 0.991778, 0.992956, 0.996218, 0.994825, 0.993576, 0.998317, 0.993145, 0.991176, 0.980803, 0.987122, 0.974684, 0.989639, 1.00306, 0.996057, 1.00388, 1.00294, 0.99876, 0.999798, 1.00641, 1.00738, 0.998161, 1.00058, 0.997387, 1.00631, 0.999852, 0.995953, 0.994941, 0.994524, 1.00231, 1.0069, 1.00661, 1.00571, 1.0067, 1.00002, 0.996175, 1.0045, 1.00327, 1.00327, 1.00936, 0.987698, 1.00909, 1.00191, 1.01202, 1.00265, 1.00128, 1.00266, 1.0039, 1.00044, 1.00241, 1.00003, 1.00377, 1.00532, 1.00726, 1.00716, 1.00038, 0.995346, 1.00642, 0.994566, 1.00028, 1.00098, 1.00051, 1.00709, 1.00666, 1.00921, 1.01069, 1.00125, 0.996677, 1.0118, 0.990468, 1.00571, 1.00396, 0.996286, 0.997478, 1.01398, 1.00868, 0.999015, 0.99771, 1.0141, 1.01712, 1.00346, 0.999696, 1.00131, 1.00252, 0.988982, 0.999591, 1.00158, 0.998682, 0.994854, 1.0017, 1.00609, 0.995693, 1.00768, 1.00422, 1.0127, 1.00654, 1.0114, 1.00056, 0.995278, 1.0075, 0.999014, 1.01498, 0.986491, 0.99022, 1.00172, 0.998487, 0.998513, 1.00197, 1.00337, 0.988984, 0.994401, 1.02147, 1.0097, 1.01246, 1.00965, 1.00413, 1.00905, 1.00391, 1.00166, 1.00743, 0.99097, 0.985827, 1.00771, 1.00227, 0.991223, 1.00576, 0.99673, 1.0073, 1.0041, 1.00139, 0.994416, 1.00798, 1.00738, 0.998427, 1.00063, 1.01434, 0.997653, 0.998219, 1.01264, 1.00873, 0.99773, 1.01498, 1.00366, 0.999724, 0.994605, 0.998146, 0.992685, 0.991097, 1.00705, 0.996229, 1.00347, 0.99767, 1.0105, 0.995683, 0.985533, 1.00554, 1.00704, 1.00829, 1.0292, 0.996138, 1.00329, 1.00077, 1.00057, 0.99175, 1.01079, 0.990616, 0.998108, 1.00011, 1.00133, 0.994718, 0.987364, 1.00534, 1.00028, 1.01375, 1.0058, 1.01347, 1.00243, 1.00783, 1.01295, 1.00462, 0.997823, 1.02565, 0.997715, 1.00304, 0.998096, 1.00957, 1.00298, 1.01225, 0.998218, 1.00131, 0.985988, 0.987441, 1.00642, 1.02174, 1.00727, 0.988476, 0.990295, 1.00571, 1.01387, 1.00584, 0.99965, 0.998459, 0.997161, 1.0059, 1.01494, 0.994153, 1.00897, 0.99477, 0.990927, 0.995377, 0.997031, 0.988728, 1.00162, 1.0005, 0.996441, 0.983522, 1.00502, 1.00298, 1.0181, 1.00107, 1.00037, 1.00863, 1.0062, 1.01079, 1.00154, 1.002, 1.00684, 1.01641, 1.01274, 1.00372, 1.00717, 0.984877, 1.01063, 0.995609, 1.00673, 1.00931, 0.976777, 0.992435, 1.00709, 0.980976, 0.986999, 0.998439, 0.997197, 1.00442, 1.0083, 0.998217, 0.98504, 0.993685, 1.01647, 1.00103, 1.01019, 1.00618, 1.01707, 0.985533, 1.00356, 1.00848, 1.00646, 1.01044, 0.992966, 1.00448, 0.996736, 0.991393, 1.02074, 1.01705, 0.986979, 1.00714, 0.985746, 1.00436, 1.01912, 0.99273, 0.994424, 0.990849, 1.0171, 0.998728, 1.00892, 0.992741, 1.01623, 1.01354, 0.998267, 0.997785, 1.00736, 0.990341, 0.984446, 1.01322, 1.01685, 0.988873, 1.00518, 1.03072, 0.997794, 1.00474, 1.03354, 1.0211, 0.999679, 1.02293, 0.982582, 0.97387, 1.00357, 1.02527, 1.00386, 0.996804, 1.01865, 1.01445, 1.00409, 0.997995, 0.994756, 0.975576, 0.992218, 0.996663, 1.01865, 0.999352, 0.999517, 0.984587, 1.02251, 1.02014, 0.991084, 1.01147, 1.00919, 0.985557, 0.985209, 1.00792, 1.0054, 0.995653, 0.995735, 0.995724, 1.0038, 1.00777, 0.970208, 0.982582, 0.99566, 0.98498, 1.02483, 1.02417, 1.00438, 0.98542, 0.99898, 0.986138, 1.02446, 1.00157, 1.00568, 0.990538, 1.00961, 0.952655, 0.98029, 1.0067, 0.99899, 0.987778, 1.0375, 0.957344, 0.981125, 1.00994, 1.01155, 1.00531, 1.03383, 0.996945, 0.981144, 0.965178, 1.03977, 0.946879, 1.0024, 1.00955, 0.979857, 0.965955, 0.99569, 1.0097, 0.933622, 0.949003, 0.983573, 0.992478, 0.9791, 0.954103, 0.981882, 0.884338, 0.966093, 0.974645, 0.95101, 1.01153, 1.00812, 1.0107, 1.0686, 0.898662, 0.932115, 1.06177, 1.1356, 1.04471, 1.28063, 1.2565, 0.817706, 1.10593, 0.992168, 0.993411, 1.20346, 1.16449, 0.908652, 1.10938, 1.10742, 0.994712, 0.880257, 1.17131, 1.16015, 0.734939, 0.937047, 1.38683, 0.903581, 0.905812, 1.38091, 0.468524, 1.2494, 1.5227, 0.551204, 0.937047, 4.68524, 0.655933, 1.31187, 0.562228, 0.535456, 0.562228, 0.937047, 1.12446, 2.81114, 0.468524, 1.40557, 0.312349, 0, 0.312349, 1, 1, 0, 0.468524, 1, 1.87409, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 }, + //RefMult: 45.0 #leq Vz #leq 55.0 + {0.865448, 0.923414, 1.00527, 1.026, 1.02501, 1.01395, 1.01093, 1.00108, 1.00485, 1.0059, 1.00178, 1.00122, 1.00351, 1.00446, 0.994033, 1.00249, 1.00417, 0.993728, 0.996784, 0.998915, 1.00026, 0.988172, 0.992288, 0.995465, 0.983668, 0.992274, 1.01007, 1.00583, 1.00551, 1.00833, 1.0055, 0.99555, 1.00581, 1.00896, 1.00215, 1.00511, 1.00806, 1.01728, 1.00789, 0.998196, 1.00155, 0.998598, 1.0101, 1.0047, 1.00508, 0.999191, 1.009, 1.00506, 1.00056, 1.01185, 1.00332, 1.00902, 1.00446, 1.00481, 1.01225, 1.01509, 1.01286, 1.00509, 1.00525, 1.00982, 1.01046, 1.01007, 1.00615, 1.0066, 1.00791, 1.0112, 1.00642, 1.00024, 1.00474, 0.992748, 1.01895, 0.996543, 1.0085, 1.01602, 1.00872, 1.00904, 1.0077, 1.00893, 1.01132, 1.01209, 1.00048, 1.01197, 0.998963, 1.00058, 1.0158, 1.00383, 1.00389, 1.01109, 1.00379, 1.00063, 1.00007, 1.00927, 1.01039, 1.00584, 1.00167, 1.00527, 1.01584, 0.999914, 1.01192, 1.01231, 1.00281, 1.00057, 1.01002, 1.00562, 1.00468, 1.0103, 0.997531, 1.00253, 1.00355, 1.01375, 1.00373, 1.0113, 1.00096, 1.0033, 1.00917, 0.996556, 1.00177, 1.00348, 0.991606, 1.01205, 1.00758, 1.01592, 0.990231, 1.01553, 1.0201, 1.00312, 1.00046, 1.01122, 1.01234, 1.00906, 1.00601, 1.00816, 1.00993, 0.987158, 0.999378, 0.996597, 1.01442, 0.999689, 1.01563, 0.999108, 0.994185, 1.01461, 1.0048, 1.00808, 1.01347, 1.0043, 0.998283, 1.00354, 1.02804, 1.0024, 1.02075, 1.01432, 1.00473, 1.00792, 1.01398, 1.00969, 1.00583, 1.00071, 1.00401, 0.995476, 1.00757, 1.00622, 0.998462, 1.01154, 1.01088, 1.00776, 1.01275, 0.987622, 1.01247, 1.02641, 0.999738, 1.02419, 1.00023, 1.00464, 0.994199, 1.00858, 1.01078, 1.00508, 0.998002, 1.01042, 1.01018, 1.01769, 1.00696, 0.995544, 1.00335, 0.998203, 1.00832, 1.01667, 1.0101, 1.00333, 1.02663, 0.994174, 1.01069, 0.995846, 1.02652, 1.02021, 1.01217, 1.01954, 0.993937, 1.00178, 1.01285, 1.01127, 1.00857, 1.01091, 1.00334, 0.995156, 1.02099, 1.00918, 1.01016, 0.998882, 1.01484, 1.01395, 1.02078, 0.997721, 1.00219, 0.998332, 1.02764, 1.0262, 1.00264, 1.00101, 1.016, 1.00956, 1.0168, 1.01225, 0.984091, 1.01252, 1.01156, 0.994366, 0.996401, 1.00671, 1.02132, 1.01385, 1.01362, 1.02949, 1.00787, 0.999691, 1.00875, 1.00342, 1.01096, 1.02061, 1.02849, 0.997704, 0.987716, 0.999944, 0.999564, 1.01341, 1.011, 0.997626, 1.00269, 0.985579, 1.00223, 0.99334, 1.01022, 1.02338, 1.01008, 1.00302, 1.01302, 1.02164, 1.00827, 0.994196, 0.993865, 1.02285, 1.0134, 1.01698, 1.01235, 1.01677, 0.996928, 1.00259, 1.00347, 1.02068, 1.00777, 0.997519, 1.03296, 1.01006, 1.01484, 1.02076, 1.00765, 0.979497, 1.00782, 0.986, 1.0048, 1.02745, 1.01472, 1.00515, 0.992468, 0.999093, 1.01251, 0.99877, 1.00115, 0.999124, 1.00748, 1.01024, 1.00784, 1.00275, 0.997645, 0.973873, 1.00724, 1.0136, 1.00214, 1.00611, 1.01928, 1.01006, 1.00603, 1.02327, 1.01428, 1.01825, 1.01628, 0.989465, 0.980388, 1.00169, 1.03574, 0.983255, 0.996055, 1.0214, 1.00589, 1.02602, 0.992125, 1.00471, 0.994315, 1.01359, 1.00862, 1.02881, 1.01043, 0.997282, 0.98873, 1.01755, 1.03866, 1.00098, 1.05394, 1.03935, 1.01672, 1.01043, 1.00947, 1.00503, 0.998565, 1.00453, 1.01146, 0.993347, 1.022, 0.994135, 0.991089, 1.00529, 1.0202, 1.02344, 1.01179, 0.997943, 1.0069, 0.970782, 0.989667, 0.999789, 0.983039, 1.02623, 1.01082, 1.00962, 0.967899, 1.00645, 1.0002, 1.01155, 0.999955, 1.04191, 0.956799, 0.986862, 0.978542, 0.968005, 0.974079, 1.01452, 0.989908, 0.99702, 0.956464, 1.01721, 0.948481, 1.00387, 1.02311, 0.978601, 1.04645, 0.92531, 0.957543, 0.927693, 0.905232, 0.951836, 0.941976, 1.01519, 0.986112, 0.954252, 0.932401, 0.925805, 0.992075, 0.987379, 0.988141, 0.958586, 0.995957, 0.919128, 0.880886, 1.07266, 0.945085, 1.08495, 0.82351, 1.23715, 1.01249, 0.915125, 1.00968, 0.977651, 0.783053, 0.884966, 1.19453, 1.02238, 1.01347, 0.99448, 0.918544, 0.905232, 0.952876, 1.02331, 0.738965, 0.603488, 0.905232, 0.718861, 0.875058, 1.58416, 0.626699, 0.851983, 0.53491, 0.603488, 0.452616, 1.00581, 0.905232, 1.26732, 1.35785, 0.905232, 0.543139, 0.517275, 5.43139, 1.35785, 0.452616, 2.7157, 1, 1, 0.226308, 0, 0.452616, 1, 0.905232, 0, 1.81046, 0.452616, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 }, + //RefMult: 55.0 #leq Vz #leq 65.0 + {0.836962, 0.900816, 0.991427, 1.01821, 1.01786, 1.01553, 1.01312, 1.0126, 1.01046, 1.01296, 1.00339, 1.00284, 1.00193, 1.00663, 1.00337, 1.00016, 1.00133, 0.998607, 0.997439, 1.0004, 1.00162, 0.99156, 0.98701, 0.989169, 0.983858, 0.991646, 1.00709, 1.0073, 1.00134, 1.00037, 1.00288, 0.999347, 1.00621, 1.00903, 1.00701, 1.00743, 1.00912, 1.0107, 1.0059, 1.00239, 1.00557, 1.00435, 1.01125, 1.01406, 1.00085, 1.00787, 1.01314, 1.00648, 1.01122, 1.00732, 1.01061, 1.01141, 1.00074, 1.00399, 1.0087, 1.00393, 1.02109, 1.01371, 1.00824, 1.01238, 1.0093, 1.00567, 1.00408, 1.00037, 1.00798, 1.02553, 1.00998, 0.99518, 1.00772, 1.00083, 1.01566, 1.00114, 1.00847, 1.01764, 1.00658, 1.0203, 1.01552, 1.01335, 1.00741, 1.01521, 1.01818, 1.00729, 1.01588, 0.996223, 1.01974, 1.00307, 0.990365, 1.01968, 0.99272, 1.01434, 1.00648, 1.00681, 1.0107, 1.00579, 0.995779, 1.01077, 1.00567, 1.01637, 1.00481, 1.01678, 1.00653, 1.00712, 1.01565, 1.01964, 1.01339, 0.999544, 1.01705, 1.00989, 1.0114, 1.01076, 1.01248, 1.01203, 1.01625, 1.00479, 1.01174, 0.997139, 1.01132, 1.01077, 1.00648, 1.02244, 1.0185, 1.00818, 0.994652, 0.999799, 1.01665, 1.01958, 1.01143, 1.00849, 1.01946, 1.00918, 1.00105, 1.02646, 1.01724, 1.00118, 0.998199, 0.996897, 1.00697, 0.992925, 1.01768, 0.998702, 1.01944, 1.01622, 1.00343, 1.01177, 1.01759, 1.01423, 1.01297, 1.00149, 1.02944, 1.00396, 1.02111, 1.01172, 1.01147, 1.02373, 1.02466, 1.01577, 1.00591, 1.01385, 1.01184, 1.00171, 1.00139, 1.02022, 0.993997, 1.00998, 1.00662, 0.997163, 1.00218, 0.996713, 1.01755, 1.01947, 1.00551, 1.02518, 1.01999, 1.01611, 1.00436, 1.00745, 1.00689, 1.00527, 0.995823, 1.00593, 1.01049, 1.01057, 0.993823, 0.999108, 1.00259, 1.01712, 1.00269, 1.02028, 1.01648, 1.00812, 1.01492, 1.01306, 1.0185, 1.00245, 1.01444, 1.0139, 1.01264, 1.01502, 1.00694, 0.997654, 1.01758, 0.993499, 1.03106, 1.00909, 1.00985, 1.00964, 1.02163, 1.00859, 0.996807, 1.01118, 1.02801, 1.03836, 1.01053, 1.01008, 1.00637, 1.0141, 1.02617, 1.01888, 1.00428, 1.00533, 0.9941, 1.01259, 0.997991, 1.01883, 1.00284, 1.02677, 1.00719, 1.0108, 1.01618, 1.01929, 1.02125, 1.00856, 1.0171, 1.00946, 1.0066, 0.991152, 1.02941, 1.01139, 1.02194, 1.00424, 1.01991, 1.00692, 0.995869, 1.02675, 1.00289, 1.025, 1.02058, 1.01921, 1.00231, 0.997101, 1.0066, 1.00303, 0.996756, 1.00513, 1.00165, 1.01826, 1.00352, 1.02345, 1.00261, 1.00463, 1.00464, 1.03674, 1.02538, 1.01508, 1.01971, 1.01602, 1.00293, 1.00654, 1.01214, 1.029, 1.0194, 0.987939, 1.00221, 0.99953, 0.993372, 1.02037, 1.02029, 0.999122, 1.01041, 1.01319, 1.00761, 1.01488, 1.01774, 0.988555, 0.994306, 1.00397, 1.02174, 1.01538, 1.00557, 1.01894, 1.03286, 0.996864, 0.998775, 1.02142, 1.00553, 0.997824, 1.03952, 1.02976, 1.03038, 1.00132, 1.03803, 1.00092, 1.00485, 1.00673, 1.02995, 1.00393, 1.01986, 0.988042, 1.0005, 1.03962, 1.02818, 1.01825, 0.986098, 1.00636, 1.00929, 1.02336, 0.990872, 0.996537, 1.01202, 1.00674, 1.03602, 1.02586, 1.02758, 1.00678, 1.01552, 1.02497, 1.02289, 0.991959, 1.02893, 1.01467, 1.03334, 0.985273, 1.00758, 1.0327, 1.01253, 1.02447, 1.01585, 1.02537, 1.01631, 1.01197, 1.01026, 1.00072, 1.00024, 1.02866, 1.02232, 1.02822, 0.994908, 1.00359, 0.997655, 1.01648, 0.970272, 1.0153, 0.996709, 1.01818, 0.987027, 1.009, 0.987323, 0.98604, 1.01877, 1.05907, 0.9894, 1.02262, 1.00583, 0.977173, 1.0521, 1.02551, 1.02554, 0.982183, 0.984487, 1.04754, 0.980108, 1.02508, 0.985482, 1.0106, 1.00791, 0.993127, 1.03134, 0.966458, 0.945463, 0.98712, 0.994688, 1.03287, 0.973578, 0.989287, 0.926413, 1.03889, 0.957392, 0.935243, 0.965958, 1.05491, 1.0008, 1.00382, 1.06264, 1.04138, 0.900315, 1.01809, 0.94044, 1.14941, 1.08593, 0.874516, 1.05788, 1.02292, 0.883867, 0.936554, 1.01585, 0.977011, 1.14232, 0.887826, 0.918296, 0.893897, 0.961179, 1.55114, 0.706173, 0.926852, 1.14312, 0.934266, 1.39371, 0.931605, 0.389278, 0.768944, 0.803271, 1.08133, 0.605543, 0.865061, 0.865061, 0.756929, 0.865061, 0.576708, 0.519037, 1.73012, 1.73012, 1.29759, 0.865061, 0.519037, 1, 0, 1, 0, 0.865061, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 }, + //RefMult: 65.0 #leq Vz #leq 75.0 + {0.81264, 0.888099, 0.973734, 1.00929, 1.01948, 1.01993, 1.02216, 1.0215, 1.01523, 1.0151, 1.01432, 1.01033, 1.00866, 1.00955, 1.00179, 1.00655, 1.0052, 1.00001, 1.00224, 1.00423, 0.998576, 0.990726, 0.991188, 0.99642, 0.983838, 0.995566, 1.0073, 1.00886, 1.00997, 1.00896, 1.01073, 1.00128, 1.00704, 1.01896, 1.00381, 1.00351, 1.00838, 1.01573, 1.00687, 1.00736, 0.997184, 1.00187, 1.01441, 1.01882, 1.01179, 1.01199, 1.00617, 1.00769, 1.00426, 1.00297, 1.00548, 1.01259, 1.0087, 1.01028, 1.00641, 1.00813, 1.01765, 1.01834, 1.00806, 1.01152, 1.01447, 1.01672, 1.00612, 1.01138, 1.00804, 1.01353, 1.01208, 1.01023, 1.01305, 0.997857, 1.01066, 1.00185, 1.01363, 1.01349, 1.02991, 1.01937, 1.01467, 1.00269, 1.01659, 1.01644, 1.00663, 1.01676, 1.00293, 1.00405, 1.00585, 1.00152, 1.00086, 1.01467, 1.00228, 1.01537, 1.00226, 1.01212, 1.02514, 1.01298, 1.00221, 1.00615, 1.01167, 1.02389, 1.00497, 1.02539, 1.01535, 1.0129, 1.00869, 1.00014, 1.02207, 1.01588, 1.00921, 1.02115, 1.01131, 1.00705, 1.00931, 1.0197, 1.00614, 1.00881, 1.02285, 1.00124, 1.00867, 0.99926, 1.0164, 1.01324, 1.01486, 1.00779, 0.997637, 0.999183, 1.00648, 1.02431, 1.00356, 1.0082, 1.01572, 1.01024, 1.01481, 1.01785, 1.00514, 1.00391, 1.00087, 0.998372, 1.01569, 0.988417, 1.01983, 0.994769, 1.01496, 0.998817, 1.01149, 1.00802, 1.01222, 1.01655, 1.00795, 1.0104, 1.03663, 1.00966, 1.02022, 1.02229, 1.00449, 1.01297, 1.0276, 0.998202, 1.01563, 1.00784, 1.00562, 0.993679, 1.00944, 1.02145, 1.01899, 1.02046, 1.01258, 1.01828, 1.02124, 1.0037, 0.995165, 1.02087, 1.02274, 1.01878, 1.02358, 1.0136, 0.997369, 1.01029, 0.996015, 1.02139, 0.996859, 1.0121, 1.01289, 1.01247, 1.00107, 1.00214, 1.00921, 1.02234, 1.01994, 1.00564, 1.01473, 1.01725, 1.02889, 1.00777, 1.02688, 1.01869, 1.00969, 1.00209, 1.01778, 1.007, 1.02041, 1.01128, 1.00419, 1.00642, 1.02397, 0.998889, 1.01569, 1.01722, 1.0276, 1.0163, 0.999152, 0.992132, 1.02367, 1.01912, 0.99895, 1.01768, 0.989294, 1.0118, 1.02052, 1.03058, 1.00443, 1.01724, 1.01257, 0.989499, 1.01627, 1.01982, 1.00548, 1.01853, 1.01643, 1.0355, 1.00888, 1.01761, 1.02807, 1.00678, 1.01704, 1.01887, 1.00783, 1.01983, 1.02573, 1.01955, 1.00945, 1.02511, 1.01983, 1.00946, 1.00376, 1.01071, 1.00194, 1.03403, 1.0077, 1.00452, 1.00303, 0.990961, 0.998228, 1.02457, 1.01338, 1.00542, 1.0283, 1.02, 1.01253, 1.02016, 1.00226, 1.01082, 1.00227, 1.01922, 1.01678, 1.03215, 1.02462, 1.02079, 1.00824, 0.994735, 0.997946, 1.02686, 1.032, 1.00957, 1.0204, 1.00349, 1.0061, 1.04271, 1.01644, 1.00605, 1.02569, 0.999772, 1.00816, 1.01768, 1.01281, 1.00152, 1.00584, 0.996281, 1.02411, 1.01639, 1.02297, 1.01645, 1.01746, 1.01585, 1.00673, 1.01128, 0.988718, 0.985323, 1.02751, 1.02129, 1.01523, 1.01416, 1.04576, 0.985197, 1.01663, 1.01608, 1.00764, 1.0338, 0.991228, 1.00336, 0.998473, 1.01369, 1.03141, 1.00367, 1.00671, 1.04155, 1.01726, 1.00299, 1.00149, 1.01129, 0.996249, 1.01693, 1.02351, 1.02876, 1.0031, 1.00995, 1.02428, 1.03252, 1.01937, 0.990252, 1.02127, 1.02408, 1.01604, 1.00369, 1.00301, 1.02942, 1.00017, 1.00093, 1.02364, 1.01353, 1.01844, 0.968942, 0.995427, 1.01291, 0.99218, 1.03837, 1.0052, 1.03139, 0.996005, 1.02229, 0.990709, 1.03035, 0.984214, 1.01457, 1.014, 1.00589, 0.9879, 0.983387, 0.996453, 0.988569, 0.972662, 1.00816, 1.02706, 1.00885, 1.00489, 0.991911, 0.986484, 1.03928, 0.999937, 0.998979, 0.988828, 1.03368, 0.972208, 1.00047, 0.998265, 0.929867, 0.976763, 0.964298, 1.01098, 0.942847, 0.928716, 1.03019, 0.940795, 0.892346, 0.951029, 0.95281, 0.864845, 0.989817, 0.937221, 0.950876, 0.921601, 0.998766, 1.0269, 0.995298, 0.928695, 0.967474, 1.02999, 1.05534, 1.00273, 1.22427, 1.05049, 1.00344, 1.04567, 0.968482, 1.013, 1.0623, 0.852319, 1.12323, 0.907092, 0.93947, 0.795954, 1.05791, 0.945029, 0.887277, 0.761884, 0.630019, 1.21216, 0.921403, 1.39716, 1.20698, 0.567017, 0.873627, 0.560386, 0.585018, 0.819025, 0.744568, 0.955529, 1.14664, 1.63805, 0.468014, 0.819025, 3.2761, 0.819025, 1.22854, 0.273008, 0.491415, 1.63805, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 }, + //RefMult: 75.0 #leq Vz #leq 85.0 + {0.785815, 0.857572, 0.946253, 0.998943, 1.01826, 1.02538, 1.03639, 1.0292, 1.02581, 1.02294, 1.01907, 1.01555, 1.01375, 1.02051, 1.00957, 1.00937, 1.00459, 1.00206, 1.00357, 1.00717, 1.00877, 0.993998, 0.997512, 0.999178, 0.986295, 0.99824, 1.0143, 1.01987, 1.01077, 1.01357, 1.00567, 1.00627, 1.01068, 1.01635, 1.00651, 1.01648, 1.01256, 1.02176, 1.01625, 1.0018, 1.0095, 1.01861, 1.0134, 1.01012, 1.01162, 1.01068, 1.01761, 1.00541, 1.01469, 1.00229, 1.01073, 1.01078, 1.00342, 1.00978, 1.01549, 1.01201, 1.02378, 1.01689, 1.0123, 1.0211, 1.01609, 1.01217, 1.00795, 1.00892, 1.02313, 1.01059, 1.01495, 1.00939, 1.0104, 1.0026, 1.01763, 0.986175, 1.00414, 1.01105, 1.02154, 1.00871, 1.01667, 1.019, 1.01268, 1.02523, 0.99909, 1.01354, 1.01816, 1.00876, 1.01968, 1.01429, 0.996119, 1.02411, 1.01245, 1.02411, 1.02246, 1.01254, 1.02504, 1.0109, 1.00608, 1.01576, 1.0138, 1.01431, 1.01647, 1.02156, 1.00396, 1.01918, 1.01501, 1.03004, 1.02057, 1.00675, 1.02413, 1.00936, 1.01091, 1.00237, 1.01184, 1.01857, 1.01298, 1.01625, 1.01137, 0.998384, 1.00138, 1.01045, 1.00832, 1.01688, 1.01352, 1.00443, 1.0078, 1.01354, 1.02576, 1.01089, 1.01676, 1.03222, 1.01885, 1.0076, 1.01515, 1.01823, 1.02513, 1.00952, 1.00326, 1.00783, 1.01823, 1.00865, 1.01368, 1.00079, 0.99941, 1.01248, 1.01833, 1.01523, 1.02485, 1.01182, 1.01283, 1.02379, 1.02601, 1.01082, 1.02016, 1.01905, 1.0193, 1.01054, 1.02156, 1.01101, 1.00358, 1.01275, 1.01589, 1.00287, 1.01555, 1.01508, 1.00356, 1.0151, 1.01586, 1.01366, 1.01206, 0.996817, 1.01424, 1.0286, 1.02925, 1.02385, 1.01555, 1.02333, 1.00611, 1.01303, 1.00456, 1.01863, 1.00865, 1.00427, 1.0223, 1.0181, 1.01752, 1.00483, 1.02231, 1.01446, 1.02188, 1.01614, 1.02792, 1.00954, 1.01688, 1.00469, 1.04311, 1.01234, 1.03338, 1.0114, 1.00476, 1.01274, 1.01465, 1.01587, 1.01785, 1.00494, 1.01547, 1.01937, 1.00983, 1.01123, 1.05287, 1.00789, 1.01784, 1.00412, 1.01799, 1.0138, 1.01257, 1.0157, 1.00239, 1.01908, 1.01639, 1.02815, 1.0083, 1.01152, 1.0239, 1.00682, 1.01022, 1.02971, 1.02088, 1.03008, 1.01411, 0.993556, 1.00642, 1.02213, 1.01733, 1.02781, 1.0174, 1.01505, 1.01324, 1.01417, 1.03669, 1.00602, 1.01283, 1.03497, 1.04171, 1.00735, 0.98939, 1.02298, 0.990395, 1.01846, 1.01349, 1.01371, 1.0087, 0.993386, 1.01886, 1.01845, 0.983722, 0.994647, 1.00324, 1.02625, 1.01024, 1.03555, 1.01256, 1.02566, 1.01498, 1.03328, 1.02179, 1.01129, 1.00855, 1.01411, 0.991911, 1.00979, 1.02063, 1.02933, 1.00955, 1.01865, 1.03628, 1.02132, 1.00553, 1.03063, 1.02808, 1.02066, 1.01838, 1.0021, 1.01677, 1.01788, 1.02815, 1.00618, 1.00703, 1.01516, 1.02814, 1.03638, 1.03008, 1.00905, 1.01918, 1.02149, 1.02374, 1.01132, 1.01551, 0.97635, 1.02656, 0.999549, 1.03834, 1.01981, 1.02256, 0.982373, 1.02117, 1.00946, 1.03963, 1.03315, 1.04262, 0.996095, 1.00045, 1.01761, 1.01791, 0.995383, 1.01919, 1.04328, 1.01622, 1.0206, 1.01857, 1.00482, 0.984683, 1.01771, 1.01784, 1.03468, 1.02669, 1.01526, 1.01148, 1.0499, 1.05208, 1.0007, 1.03534, 1.02198, 1.02641, 0.985029, 1.02252, 1.02628, 1.00704, 1.03112, 0.999451, 1.02154, 1.01459, 0.962008, 0.997202, 0.991938, 1.01002, 1.04385, 1.01865, 1.00599, 0.98846, 1.00777, 0.992098, 1.01932, 0.968057, 1.03411, 0.989956, 0.981364, 0.956617, 1.04927, 1.00884, 1.00691, 0.993889, 0.996139, 0.977562, 0.978416, 1.0099, 0.984457, 0.987698, 0.994423, 0.983142, 0.948214, 0.931968, 0.965426, 0.978815, 0.979291, 0.959072, 0.969815, 0.978123, 0.945692, 0.946173, 0.924112, 0.954123, 0.88715, 0.996933, 0.983742, 0.968016, 0.894033, 0.849169, 0.953547, 1.02369, 0.894079, 0.932904, 0.855704, 0.962505, 1.03247, 0.905846, 0.937783, 1.02464, 1.19208, 0.856565, 1.21005, 1.08386, 0.811017, 1.36198, 1.06832, 0.998076, 0.910583, 1.13517, 1.02875, 1.11931, 1.11448, 0.96796, 0.784211, 0.873467, 0.835859, 0.734821, 0.925875, 1.24121, 0.992009, 1.24307, 1.35023, 0.631278, 0.881786, 0.911847, 0.857292, 0.900156, 0.514375, 0.540094, 1.80031, 0.771562, 0.514375, 0.462938, 1.02875, 4.62938, 2.31469, 0.385781, 2.31469, 1, 0, 1, 1, 1, 1, 0.385781, 1, 1.54313, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 }, + //RefMult: 85.0 #leq Vz #leq 95.0 + {0.74803, 0.827447, 0.928498, 0.998586, 1.03104, 1.03974, 1.04441, 1.03905, 1.03804, 1.03564, 1.02526, 1.02024, 1.02275, 1.01724, 1.01705, 1.01833, 1.01285, 1.01124, 1.01882, 1.00663, 1.00797, 0.992895, 1.0006, 1.00875, 0.989669, 0.994188, 1.00115, 1.0015, 1.00288, 1.01598, 1.00947, 1.015, 1.01851, 1.01941, 1.00985, 1.00926, 1.01921, 1.02085, 1.0104, 1.01287, 1.00957, 1.01436, 1.02565, 1.0208, 1.00849, 1.01292, 1.01588, 1.0029, 1.02161, 1.00849, 1.01565, 1.01179, 1.01208, 1.01192, 1.01355, 1.0115, 1.03233, 1.01794, 1.0183, 1.01598, 1.01079, 1.01506, 1.01507, 1.01846, 1.01856, 1.01693, 1.01409, 1.02156, 1.01735, 1.00599, 1.0297, 1.00767, 1.02288, 1.02304, 1.01307, 1.02223, 1.01733, 1.01431, 1.01068, 1.00929, 1.00499, 1.01793, 1.01694, 1.01129, 1.02236, 1.0056, 1.0021, 1.024, 1.01227, 1.01581, 1.01813, 1.01117, 1.02381, 1.00588, 1.00811, 1.02259, 1.01477, 1.01609, 1.01792, 1.0274, 1.0195, 1.0092, 1.02178, 1.0253, 1.0075, 1.02636, 1.00449, 1.02648, 1.00605, 1.01666, 1.01797, 1.0109, 1.0229, 1.0155, 1.0219, 0.999411, 1.01026, 1.00994, 1.00322, 1.02598, 1.02666, 1.01825, 1.01152, 1.0097, 1.0294, 1.01963, 1.03506, 1.02841, 1.01664, 1.02409, 1.01634, 1.02904, 1.02699, 1.01865, 1.01682, 1.01261, 1.01465, 1.00546, 1.02594, 1.01102, 1.00785, 1.01559, 1.02516, 1.01876, 1.0131, 1.01975, 1.01349, 1.0159, 1.03796, 1.00383, 1.02434, 1.02469, 1.02838, 1.00438, 1.0182, 1.00465, 1.01568, 1.00825, 1.02313, 1.01942, 1.01874, 1.02237, 1.00824, 1.0074, 1.00909, 1.02399, 1.01287, 1.00867, 1.02033, 1.04087, 1.01461, 1.03581, 1.02153, 0.99358, 1.01134, 1.01304, 1.01246, 1.02169, 0.997546, 1.03358, 1.0168, 1.02293, 0.998563, 1.00878, 1.01523, 1.01613, 1.01812, 1.00142, 1.03132, 1.02142, 1.01039, 1.01807, 1.02703, 1.00827, 1.024, 1.00819, 1.0163, 1.01505, 1.02482, 1.01736, 1.01194, 0.993205, 1.02689, 1.02543, 1.01675, 1.01189, 1.04142, 1.01168, 1.02931, 1.01467, 1.01702, 1.03451, 1.00431, 1.02021, 0.99197, 1.01133, 1.02561, 1.01895, 1.01176, 1.02497, 0.997699, 1.01748, 1.01958, 1.0329, 1.02082, 1.02112, 0.99648, 1.03128, 1.00147, 1.00105, 1.02298, 1.02618, 1.02708, 1.01169, 1.02401, 1.03075, 1.0275, 1.01783, 1.00852, 1.02395, 1.03369, 1.02682, 0.993026, 1.00298, 1.00944, 1.03495, 1.02252, 1.02608, 0.995, 0.992666, 1.02085, 1.01938, 0.99995, 1.03086, 1.01664, 1.01606, 1.02118, 1.04838, 1.00854, 1.01001, 1.00208, 1.02964, 1.02754, 1.01617, 1.01666, 1.01625, 1.00205, 1.01894, 0.997594, 1.0164, 1.04556, 1.01063, 1.02529, 1.00229, 1.00831, 1.02656, 1.02669, 1.00172, 1.02692, 0.980818, 1.0106, 1.05151, 1.03494, 1.01875, 1.00274, 1.01442, 1.04784, 1.01916, 1.02685, 1.01112, 1.03217, 1.01341, 1.01655, 1.03262, 1.01062, 1.00733, 1.02719, 1.02676, 1.02232, 1.00406, 1.03035, 1.01781, 1.00233, 1.03943, 1.0252, 1.02288, 1.04191, 1.01069, 0.999175, 1.01401, 1.01753, 1.01956, 1.00071, 1.03409, 1.02712, 1.05441, 1.01685, 0.999392, 1.0145, 1.03738, 1.0095, 1.02766, 1.01668, 1.01097, 0.999757, 1.04175, 1.04933, 0.969858, 1.04068, 1.01654, 1.0324, 1.01214, 1.04149, 1.03712, 1.01073, 1.02483, 1.00755, 1.02891, 1.00392, 0.967323, 1.01256, 0.997613, 1.02647, 1.02516, 1.02128, 1.01279, 0.972368, 1.03779, 0.996143, 1.00005, 0.989082, 1.04081, 0.959947, 1.0253, 1.00639, 0.9663, 1.02423, 0.967262, 0.977048, 1.02906, 0.98268, 1.01, 1.00273, 0.980504, 1.0057, 1.03937, 1.02389, 0.968717, 0.94054, 1.01646, 0.970248, 0.978442, 0.962574, 0.966778, 0.980284, 1.00918, 0.907569, 0.898843, 0.956658, 0.978305, 0.965882, 0.958086, 0.929231, 0.90637, 0.835174, 0.964797, 0.888952, 0.961742, 0.98722, 0.913294, 0.996482, 0.926167, 1.00566, 0.989851, 0.91955, 1.02966, 0.873491, 1.07644, 1.00563, 0.812342, 1.12451, 0.972175, 0.730491, 0.907087, 1.46312, 0.921766, 0.915721, 0.769454, 1.08019, 1.06305, 1.10789, 1.04019, 0.960173, 0.744962, 1.21113, 0.810146, 0.870157, 2.52045, 0.589197, 0.677769, 0.780141, 1.02876, 0.630114, 0.600108, 1.26023, 5.04091, 1.08019, 0.480087, 0.540097, 1.44026, 4.32078, 1.44026, 0.360065, 0.72013, 1.44026, 0, 0.360065, 0, 0.72013, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 }, + //RefMult: 95.0 #leq Vz #leq 105.0 + {0.703386, 0.799301, 0.912062, 0.998376, 1.03561, 1.04853, 1.05744, 1.04587, 1.04547, 1.04167, 1.03247, 1.03327, 1.02835, 1.02597, 1.0168, 1.02336, 1.02174, 1.01445, 1.01884, 1.01838, 1.02295, 1.00937, 1.00211, 1.00578, 0.998521, 0.99904, 1.00237, 1.00808, 1.0108, 1.01743, 1.01296, 1.00265, 1.01175, 1.01918, 1.01431, 1.01214, 1.02287, 1.02695, 1.01802, 1.0095, 1.01002, 1.01196, 1.02303, 1.02057, 1.01042, 1.02156, 1.01719, 1.01369, 1.01182, 1.02378, 1.00851, 1.02907, 1.01639, 1.01229, 1.01871, 1.00958, 1.02638, 1.02849, 1.01743, 1.01687, 1.02051, 1.033, 1.02577, 1.02555, 1.01922, 1.01986, 1.01942, 1.01641, 1.01503, 1.00934, 1.02722, 1.00397, 1.02294, 1.02509, 1.02968, 1.035, 1.02218, 1.02071, 1.00937, 1.0187, 1.02079, 1.0123, 1.0138, 1.01907, 1.01657, 1.00236, 1.01522, 1.02275, 1.01001, 1.01136, 1.01706, 1.01529, 1.02002, 1.01902, 1.01555, 1.01708, 1.00631, 1.01865, 1.01902, 1.021, 1.02494, 1.02098, 1.01179, 1.01355, 1.01752, 1.0215, 1.02197, 1.02651, 1.03215, 1.02585, 1.00855, 1.01414, 1.01247, 1.01406, 1.02255, 1.01899, 1.01748, 1.01885, 1.0148, 1.02377, 1.01212, 1.02334, 1.00449, 1.01275, 1.04579, 1.00908, 1.02659, 1.04194, 1.02358, 1.04477, 1.01254, 1.02469, 1.0169, 1.01066, 1.01357, 1.02904, 1.00901, 1.00338, 1.01774, 1.00318, 1.00816, 1.01603, 1.01775, 1.03492, 1.02233, 1.03648, 1.01399, 1.00836, 1.04524, 1.01417, 1.01813, 1.02131, 1.02175, 1.02603, 1.02937, 1.01514, 1.00904, 1.01331, 1.0209, 1.00417, 1.01486, 1.02518, 1.01341, 1.02929, 1.02245, 1.01028, 1.00491, 1.00006, 1.01691, 1.03281, 1.02793, 1.02726, 1.00829, 1.00641, 1.01966, 1.02125, 1.01231, 1.01359, 1.01801, 1.02792, 1.01525, 1.03573, 1.01327, 1.02876, 1.01013, 1.01616, 1.01676, 1.01733, 1.01351, 0.998182, 1.02243, 1.02284, 1.02162, 1.03354, 1.02429, 1.01709, 1.02691, 1.01929, 1.02736, 1.01538, 1.01963, 1.02055, 1.02169, 1.02522, 1.00478, 1.03074, 1.01123, 1.03721, 1.00535, 1.02668, 1.03257, 1.03274, 1.02778, 1.02444, 1.00019, 1.0062, 1.03093, 1.03032, 1.00353, 1.03888, 1.02623, 1.01922, 1.02376, 1.00313, 1.01621, 1.03233, 1.01818, 1.02274, 1.0148, 1.02215, 1.01932, 1.02402, 1.02656, 1.01962, 1.02295, 1.01176, 1.01514, 1.02262, 1.02275, 1.02385, 1.04059, 1.00159, 1.00355, 1.02377, 1.00264, 1.01501, 1.01094, 1.00908, 1.00899, 0.99651, 1.0235, 1.03065, 1.0109, 1.01028, 1.0303, 1.01934, 1.01842, 1.04431, 1.02163, 1.02876, 1.01955, 1.05038, 1.02279, 1.02429, 1.01495, 1.01823, 1.01222, 1.02868, 1.0162, 1.02318, 1.04173, 1.02832, 1.03215, 1.03972, 1.01248, 1.0272, 1.02198, 1.00365, 1.039, 1.00307, 1.01358, 1.0349, 1.02562, 1.02824, 1.02305, 1.02075, 1.03017, 1.02229, 1.04993, 1.0274, 1.02789, 1.01092, 1.03226, 1.03799, 1.01567, 1.00636, 1.03219, 1.0329, 1.01611, 1.03439, 1.03277, 1.01017, 1.01245, 1.01469, 1.02194, 1.05216, 1.05079, 1.02704, 1.02882, 1.04629, 1.02936, 1.01318, 1.02127, 1.03101, 1.03033, 1.0403, 1.00902, 1.04604, 1.02018, 1.04042, 1.00586, 1.03572, 1.01003, 0.995751, 1.03612, 1.04554, 1.04473, 0.991855, 1.04426, 1.02898, 1.02509, 1.00417, 1.01771, 1.02175, 1.00362, 1.02384, 1.02481, 1.04657, 1.03615, 0.996736, 0.998673, 0.993916, 1.00953, 1.05029, 1.05664, 1.02848, 0.998235, 1.02471, 1.00367, 1.00502, 1.01036, 1.0174, 1.0105, 1.03168, 0.971266, 0.977277, 1.00449, 0.999227, 0.998051, 1.02937, 0.991855, 0.996529, 1.01753, 0.980367, 0.993775, 0.988959, 1.00895, 1.00203, 1.01623, 1.02969, 0.951666, 0.964351, 1.05189, 1.03714, 1.02868, 0.969851, 0.970788, 0.967905, 0.933682, 0.891794, 0.968034, 1.00444, 0.984684, 0.996802, 0.923747, 1.04317, 0.977022, 1.03745, 1.06398, 0.894057, 1.02618, 1.02911, 0.937776, 0.996262, 1.1295, 1.11477, 1.05881, 1.11264, 1.00876, 0.971338, 1.41003, 1.01909, 1.05641, 1.00405, 0.907997, 0.927736, 0.928128, 0.928772, 0.978935, 0.765597, 1.1431, 1.1558, 1.02586, 0.740901, 0.948923, 0.818358, 1.07431, 1.33362, 0.461638, 0.711264, 0.788049, 0.7409, 0.66681, 0.555675, 0.933535, 0.583459, 0.800173, 0.889081, 0.400086, 1.33362, 1.33362, 4.00086, 0.333405, 2.00043, 1.33362, 1, 0.66681, 0, 1, 1, 1, 1, 1.33362, 1, 0.66681, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 }, + //RefMult: 105.0 #leq Vz #leq 115.0 + {0.651434, 0.770199, 0.89566, 0.998185, 1.0494, 1.0643, 1.0709, 1.06578, 1.06466, 1.05818, 1.05078, 1.03844, 1.03727, 1.03492, 1.03781, 1.03974, 1.03591, 1.03019, 1.02866, 1.02503, 1.02135, 1.01903, 1.01198, 1.02262, 1.00313, 1.00092, 1.00493, 1.00803, 1.02185, 1.01423, 1.01648, 1.0183, 1.0154, 1.02425, 1.02111, 1.01708, 1.02286, 1.0157, 1.01236, 1.021, 1.00817, 1.0159, 1.02556, 1.02478, 1.01688, 1.0195, 1.03148, 1.01431, 1.02212, 1.01983, 1.01923, 1.02128, 1.02143, 1.01583, 1.01819, 1.01866, 1.03362, 1.04125, 1.02085, 1.02283, 1.01443, 1.02569, 1.01673, 1.02056, 1.02269, 1.01702, 1.01643, 1.02063, 1.01334, 1.01325, 1.0227, 1.01119, 1.02347, 1.03908, 1.01353, 1.01913, 1.01867, 1.01528, 1.01852, 1.02079, 1.02695, 1.02458, 1.01561, 1.02351, 1.02699, 1.00735, 0.998705, 1.02623, 1.02334, 1.01453, 1.01412, 1.01728, 1.03792, 1.01746, 1.01787, 1.0141, 1.02084, 1.02789, 1.0034, 1.02383, 1.00497, 1.01321, 1.0238, 1.02142, 1.01315, 1.02534, 1.02546, 1.01671, 1.02158, 1.02269, 1.02537, 1.01213, 1.034, 1.01399, 1.01717, 1.00167, 1.02025, 1.02131, 1.00545, 1.02782, 1.01914, 1.02516, 1.0173, 1.0232, 1.02692, 1.02327, 1.02006, 1.0226, 1.02859, 1.02119, 1.02332, 1.03179, 1.02675, 1.01485, 1.02217, 1.00762, 1.0141, 1.01138, 1.02644, 1.01069, 1.02549, 1.01373, 1.00891, 1.02253, 1.02533, 1.02082, 1.01568, 1.0368, 1.03559, 1.02056, 1.01303, 1.02395, 1.02682, 1.00884, 1.04304, 1.03682, 1.01146, 1.01706, 1.03023, 1.0291, 1.0266, 1.02838, 1.01897, 1.0288, 1.02305, 1.01693, 1.01051, 1.00666, 1.01905, 1.02408, 1.02063, 1.03677, 1.02501, 1.02408, 1.00731, 1.02713, 1.00707, 1.0169, 1.01505, 1.0244, 1.01593, 1.00382, 1.01858, 1.00983, 1.02454, 1.02194, 1.02532, 1.01718, 1.02711, 1.01593, 1.03404, 1.02871, 1.01944, 1.00636, 1.04216, 1.02744, 1.03392, 1.03221, 1.03696, 1.02372, 1.01934, 1.01132, 1.00834, 1.03266, 0.99531, 1.01709, 1.03519, 1.03018, 1.02394, 0.996608, 1.03063, 1.03942, 1.03422, 1.01626, 1.0094, 1.01386, 1.04529, 1.03803, 1.01622, 1.01155, 1.0283, 1.0133, 1.02396, 1.02584, 1.02065, 1.03113, 1.01791, 1.01725, 1.02152, 1.03295, 1.05157, 1.04152, 1.03725, 1.02717, 1.03718, 1.01715, 1.02366, 1.03907, 1.03394, 1.04226, 1.04214, 1.04305, 0.998276, 1.03004, 1.00503, 1.03296, 1.00975, 1.02934, 1.03233, 0.99691, 1.02772, 1.04178, 1.01931, 0.997775, 1.01297, 1.02685, 1.0332, 1.03395, 1.03236, 1.00924, 1.01844, 1.04916, 1.03153, 1.02397, 1.0138, 1.0366, 1.00805, 1.02209, 1.03581, 1.04867, 1.04108, 1.00892, 1.03684, 1.01215, 0.996271, 1.02404, 1.05086, 1.00863, 1.02935, 1.01652, 1.01078, 1.04699, 1.03629, 1.02434, 1.03694, 1.00862, 1.03892, 1.04459, 1.02253, 1.04296, 1.00835, 1.023, 1.02162, 1.04562, 1.03701, 1.01084, 1.0301, 1.02827, 1.04147, 1.03386, 1.03498, 1.01882, 1.02229, 1.0355, 1.01471, 1.01702, 1.06412, 1.00317, 0.993139, 1.01743, 1.03574, 1.01799, 1.02397, 1.01644, 1.01201, 1.02046, 1.02378, 1.00439, 1.02983, 1.03816, 1.00869, 1.057, 1.05509, 1.04097, 1.00148, 1.02336, 1.06766, 0.985038, 1.06568, 1.04272, 1.01509, 0.999417, 1.0164, 1.03041, 1.02943, 1.00256, 1.02669, 1.0311, 1.02959, 1.00787, 0.992706, 1.02279, 1.0317, 1.03911, 1.03107, 1.00864, 0.993252, 0.997132, 1.02688, 1.00187, 1.00545, 1.02994, 1.00369, 1.00228, 0.976981, 0.992713, 1.04261, 0.997185, 0.981986, 1.04566, 0.986819, 0.961306, 0.994542, 1.01015, 0.977362, 0.989024, 1.05963, 0.996465, 0.973174, 1.01191, 0.932954, 0.996784, 1.03589, 0.948284, 0.979343, 1.00222, 0.968958, 0.949863, 0.917369, 0.899007, 0.964801, 0.971607, 0.95766, 0.957611, 0.867069, 0.969313, 0.916497, 0.935152, 0.935108, 0.941737, 0.952682, 0.962514, 0.907358, 1.00352, 0.908946, 1.14899, 0.828223, 1.22227, 1.12194, 0.879488, 0.950326, 0.964552, 0.919897, 0.854656, 1.15438, 0.806485, 1.21474, 0.919897, 0.900325, 1.35794, 1.11503, 0.839204, 0.721488, 0.735918, 0.986556, 0.827907, 1.04616, 0.953967, 0.788483, 0.981223, 0.724767, 0.438046, 0.476984, 1.22653, 1.43095, 0.715475, 0.919897, 0.408843, 0.613265, 1.22653, 1.83979, 3.67959, 0.613265, 1, 1.22653, 1, 1, 0, 0.613265, 0, 1, 1, 1, 0.613265, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 }, + //RefMult: 115.0 #leq Vz #leq 125.0 + {0.612133, 0.753823, 0.888821, 1.00862, 1.0692, 1.08315, 1.09216, 1.08174, 1.07879, 1.07301, 1.06623, 1.05451, 1.04923, 1.04646, 1.0423, 1.03145, 1.04046, 1.03271, 1.02734, 1.03249, 1.02213, 1.01355, 1.01264, 1.0204, 1.01361, 1.00475, 1.00562, 1.0149, 1.00407, 1.01387, 1.0178, 1.01417, 1.01936, 1.02475, 1.01716, 1.01101, 1.02983, 1.02056, 1.02963, 1.01577, 1.01228, 1.02566, 1.01907, 1.02326, 1.01882, 1.02005, 1.02896, 1.00185, 1.01916, 1.02238, 1.01774, 1.02212, 1.01482, 1.00781, 1.01752, 1.01207, 1.0262, 1.02895, 1.02142, 1.01674, 1.02722, 1.02716, 1.01735, 1.01901, 1.02817, 1.02479, 1.029, 1.02474, 1.01683, 1.0071, 1.02304, 0.996101, 1.00373, 1.02803, 1.01358, 1.02392, 1.02499, 1.02107, 1.02554, 1.04182, 1.00683, 1.02213, 1.01743, 1.00863, 1.0253, 1.01119, 1.0128, 1.03137, 1.02096, 1.01368, 1.02128, 1.02749, 1.02573, 1.02827, 1.02317, 1.01709, 1.0333, 1.02654, 1.0252, 1.02703, 1.01996, 1.01257, 1.02326, 1.02325, 1.01858, 1.00173, 1.02459, 1.0427, 1.0192, 1.02176, 1.01978, 1.02605, 1.0258, 1.01626, 1.02301, 1.02047, 1.02335, 1.00998, 1.00216, 1.0224, 1.0073, 1.0208, 1.00651, 1.02367, 1.00344, 1.02157, 1.02917, 1.02829, 1.03063, 1.02347, 1.01904, 1.03349, 1.04453, 1.0131, 1.00919, 1.00534, 1.02432, 1.01327, 1.03191, 1.0189, 1.03711, 1.01537, 1.02386, 1.03149, 1.01711, 1.03237, 1.01801, 1.03536, 1.04816, 1.00903, 1.03521, 1.03886, 1.02438, 1.01284, 1.04957, 1.01626, 1.02848, 1.01831, 1.01056, 1.00263, 1.01935, 1.03371, 1.02442, 1.02861, 1.02257, 1.02603, 1.0052, 1.00725, 1.02533, 1.03867, 1.02167, 1.02844, 1.02079, 1.02777, 0.996927, 1.0157, 1.03146, 1.01887, 1.01781, 1.02733, 1.00674, 1.03284, 1.00758, 1.0179, 1.02875, 1.02474, 1.05004, 1.01558, 1.03901, 1.01978, 1.04378, 1.03189, 1.02521, 1.01689, 1.03009, 1.0233, 1.01696, 1.03489, 1.01776, 1.02841, 1.03108, 1.03127, 1.04167, 1.04285, 1.0148, 1.02518, 1.02467, 1.03016, 1.03793, 1.01308, 1.0362, 1.02332, 1.03259, 1.04607, 1.00618, 1.0383, 1.04159, 1.03251, 1.02778, 1.02844, 1.00175, 1.01578, 1.03368, 1.01658, 1.02331, 1.0254, 1.00262, 1.03812, 1.01216, 1.0534, 1.03053, 1.03051, 1.0171, 1.02062, 1.03221, 1.0257, 1.02401, 1.0204, 1.01926, 1.02341, 1.05575, 1.0018, 1.01628, 1.04346, 0.9855, 1.03812, 1.03054, 1.02568, 1.01737, 1.01529, 1.03294, 1.05806, 1.01216, 1.02083, 1.01966, 1.03859, 1.03332, 1.03954, 1.02641, 1.02051, 1.01487, 1.04806, 1.02705, 1.03787, 1.02745, 1.03982, 1.00234, 1.02588, 1.03187, 1.02979, 1.0418, 1.01349, 1.0267, 1.03489, 1.01979, 1.04401, 1.04133, 1.00622, 1.03804, 1.00332, 1.03581, 1.03321, 1.03145, 1.02253, 1.03296, 1.02724, 1.01986, 1.0193, 1.02204, 1.02312, 1.0305, 1.03689, 1.02624, 1.03679, 1.02827, 1.03091, 1.05347, 1.05274, 1.02935, 0.995985, 1.03565, 1.0148, 1.03098, 1.03711, 1.06052, 1.01921, 1.06002, 1.01838, 1.00143, 1.02852, 1.02472, 1.01485, 0.993594, 1.02867, 1.02702, 1.03609, 1.01256, 1.02638, 1.02775, 1.02912, 1.02192, 1.01852, 1.04583, 1.02485, 1.02907, 1.05016, 1.05357, 1.01937, 1.06087, 1.02722, 1.05217, 1.02574, 1.02177, 1.01946, 1.02279, 1.02698, 1.02768, 1.03907, 1.04519, 0.998325, 1.01336, 1.02977, 1.01329, 1.02121, 1.03286, 1.01466, 0.998589, 0.993663, 0.981063, 1.01893, 0.991615, 1.00317, 0.986376, 1.00874, 0.997196, 1.00171, 1.04045, 0.989669, 1.00332, 1.03027, 1.02462, 0.996872, 1.00846, 0.978514, 0.966, 1.02928, 1.03189, 1.00808, 0.994655, 1.02772, 0.931013, 1.01464, 0.987534, 0.988025, 0.976369, 0.930559, 0.947067, 0.915812, 0.959413, 0.919002, 0.95543, 0.976703, 0.926195, 0.925725, 0.839098, 0.958871, 0.846708, 0.987562, 1.01075, 0.968862, 0.98982, 1.06514, 0.980146, 1.01593, 0.956687, 0.964249, 0.982989, 1.00276, 1.0071, 0.869077, 1.26092, 0.94336, 0.895715, 1.10959, 0.941521, 0.777778, 0.846763, 1.0901, 1.01508, 0.825232, 2.09636, 0.937724, 0.745371, 0.798611, 1.08863, 0.71875, 1.08079, 1.42298, 0.559028, 0.993828, 0.807485, 1.11806, 0.978299, 2.79514, 1.9566, 3.9132, 1.11806, 0.559028, 1.67708, 1.11806, 3.35417, 1.67708, 1, 0.838542, 1.11806, 0, 1, 1, 1, 1, 0.559028, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 }, + //RefMult: 125.0 #leq Vz #leq 135.0 + {0.556883, 0.732347, 0.881497, 1.01892, 1.07999, 1.10987, 1.10983, 1.10055, 1.09013, 1.0887, 1.07541, 1.06582, 1.05909, 1.05953, 1.05053, 1.05039, 1.0439, 1.03498, 1.03584, 1.03822, 1.03472, 1.02432, 1.01977, 1.02624, 1.0047, 1.0061, 1.00911, 1.01561, 1.01658, 1.01971, 1.02468, 1.01552, 1.02631, 1.03571, 1.02561, 1.02891, 1.01106, 1.02519, 1.03203, 1.018, 1.01882, 1.00998, 1.02875, 1.02393, 1.01296, 1.01757, 1.03594, 1.01194, 1.02843, 1.02429, 1.02074, 1.0239, 1.02324, 1.02304, 1.02131, 1.00914, 1.02911, 1.02968, 1.01807, 1.03253, 1.02416, 1.02423, 1.02072, 1.02221, 1.02165, 1.02231, 1.02326, 1.01493, 1.02767, 1.02155, 1.02146, 1.01212, 1.03306, 1.02685, 1.0271, 1.01431, 1.03101, 1.02505, 1.02694, 1.02876, 1.01332, 1.03072, 1.02069, 1.02411, 1.02339, 1.02666, 1.01354, 1.02673, 1.012, 1.02402, 1.01818, 1.03035, 1.02675, 1.03859, 1.02267, 1.02521, 1.02066, 1.01768, 1.03127, 1.03605, 1.01422, 1.02352, 1.02297, 1.02082, 1.00889, 1.03392, 1.02814, 1.02384, 1.02621, 1.0088, 1.03164, 1.02101, 1.03562, 1.01588, 1.0291, 1.007, 1.01919, 1.00662, 1.03285, 1.03275, 1.03331, 1.01901, 1.00414, 1.01343, 1.02448, 1.03552, 1.03521, 1.02938, 1.03642, 1.03244, 1.02271, 1.01502, 1.01789, 1.02207, 1.02117, 1.0105, 1.02783, 1.02747, 1.01424, 1.01924, 1.02977, 1.01743, 1.0369, 1.04718, 1.02642, 1.04166, 1.03132, 1.04116, 1.04975, 1.02312, 1.05344, 1.02541, 1.02865, 1.02428, 1.05176, 1.03068, 1.01669, 1.0472, 1.0277, 1.01881, 1.00801, 1.03552, 1.00755, 1.03142, 1.02622, 1.00788, 1.02122, 1.02715, 1.01081, 1.0369, 1.03628, 1.05078, 1.03819, 1.02265, 1.0079, 1.03491, 1.02594, 1.03238, 1.02698, 1.02292, 1.01499, 1.02292, 1.00846, 1.02524, 1.02415, 1.03324, 1.03771, 1.02657, 1.01797, 1.03542, 1.02077, 1.02235, 1.03324, 1.0235, 1.01551, 1.04541, 1.04271, 1.04599, 1.02511, 1.012, 1.04195, 1.01241, 1.03004, 1.05058, 1.01813, 1.01902, 1.05299, 1.02423, 1.02223, 1.02647, 1.03902, 1.03814, 1.02905, 1.04155, 1.00389, 1.02007, 1.01887, 1.03988, 1.02199, 1.01683, 1.04163, 1.01606, 1.04552, 1.03666, 0.989872, 1.04084, 1.02289, 1.01681, 1.02471, 1.04815, 1.04778, 1.0384, 1.02208, 1.01809, 1.038, 1.00931, 1.05396, 1.0275, 1.04269, 1.03009, 1.04622, 1.02832, 1.02, 1.02911, 1.00937, 1.06477, 1.0202, 1.02756, 1.01882, 1.00715, 1.02296, 1.03402, 1.03027, 0.999761, 1.0141, 1.03047, 1.01672, 1.04856, 1.01178, 1.01505, 1.03143, 1.02676, 1.03131, 1.03751, 1.05026, 1.04246, 1.0106, 1.02908, 1.04966, 1.01991, 1.02196, 1.02945, 1.03399, 1.03668, 1.0138, 1.05579, 1.02776, 1.00976, 1.02762, 1.02906, 1.01826, 1.06747, 1.04016, 1.04419, 1.02933, 1.03666, 1.03832, 1.03644, 1.00954, 1.05483, 1.04024, 1.03828, 1.03638, 1.03145, 1.02225, 1.01536, 1.05102, 1.0391, 1.03058, 1.05292, 1.03128, 1.03174, 1.03605, 1.0544, 1.02876, 1.04934, 1.02076, 0.999263, 0.997951, 1.05836, 1.0417, 1.01073, 1.00843, 1.01376, 1.05435, 1.05993, 1.02717, 1.02212, 1.02569, 1.03749, 1.01676, 1.01977, 1.05466, 0.994273, 1.0305, 1.04647, 1.03781, 1.02158, 1.0641, 1.01282, 1.0471, 1.01478, 1.01001, 1.0592, 0.991055, 1.0218, 1.02691, 1.00486, 1.04542, 1.03308, 1.01199, 1.04019, 1.00887, 1.06248, 1.00637, 1.02784, 1.03197, 1.03667, 1.02916, 1.05294, 1.00657, 1.03456, 1.04649, 1.02139, 0.980161, 1.04589, 1.05328, 1.00878, 0.997456, 1.0369, 0.990941, 0.97728, 1.04304, 0.998002, 1.00139, 1.07023, 1.0826, 1.01536, 1.0194, 1.02826, 0.962413, 1.02155, 0.987888, 0.969993, 0.974806, 1.04146, 0.947448, 0.91015, 0.936798, 0.960015, 1.00079, 1.01784, 0.94263, 0.856579, 0.882852, 0.968161, 0.934565, 0.87632, 1.12691, 0.969997, 1.04459, 1.00414, 1.06869, 1.04257, 0.941273, 1.06053, 0.984913, 0.904662, 1.079, 0.877442, 1.19792, 1.14186, 0.90578, 0.923356, 1.11999, 1.08265, 1.37557, 1.36498, 0.81435, 1.04882, 1.21798, 0.879656, 1.56152, 0.634367, 1.70702, 1.05403, 0.735866, 0.947321, 0.351342, 0.738173, 0.942488, 1.69165, 0.444057, 0.845823, 0.888114, 0.710491, 1.01499, 1.01499, 0.507494, 1.01499, 1.52248, 3.04496, 0.507494, 1, 1.01499, 0, 0.507494, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 }, + //RefMult: 135.0 #leq Vz #leq 145.0 + {0.531684, 0.708675, 0.858769, 1.0154, 1.09784, 1.11749, 1.12277, 1.1129, 1.1087, 1.10332, 1.07888, 1.07349, 1.0675, 1.06963, 1.0604, 1.04928, 1.0517, 1.04505, 1.03598, 1.04257, 1.04108, 1.02035, 1.02291, 1.02781, 1.0122, 1.01932, 1.01855, 1.02114, 1.017, 1.03226, 1.0229, 1.01181, 1.03306, 1.02377, 1.02216, 1.0266, 1.02246, 1.03988, 1.02599, 1.01671, 1.01552, 1.02022, 1.02865, 1.03248, 1.02006, 1.01341, 1.03469, 1.01973, 1.02678, 1.02602, 1.0185, 1.02823, 1.01733, 1.03202, 1.02645, 1.02065, 1.03892, 1.03001, 1.02675, 1.03506, 1.03208, 1.04352, 1.03231, 1.01488, 1.03223, 1.02144, 1.02673, 1.02421, 1.02375, 1.01275, 1.03229, 1.02862, 1.02648, 1.03226, 1.01804, 1.02127, 1.0306, 1.03133, 1.02554, 1.02098, 1.03334, 1.02173, 1.02168, 1.01298, 1.0423, 1.00804, 1.00858, 1.04439, 1.0254, 1.01228, 1.02246, 1.04004, 1.03828, 1.01601, 1.02391, 1.02341, 1.01642, 1.04814, 1.02236, 1.03303, 1.02294, 1.0231, 1.0329, 1.03321, 1.02871, 1.03793, 1.03936, 1.02811, 1.02463, 1.02994, 1.02757, 1.02535, 1.03202, 1.0107, 1.05241, 1.00748, 1.0358, 1.02581, 1.0296, 1.02182, 1.0277, 1.02785, 1.01143, 1.02166, 1.04105, 1.02139, 1.03095, 1.01621, 1.02418, 1.03116, 1.02106, 1.02564, 1.02264, 1.01371, 1.01915, 1.02976, 1.02827, 1.0066, 1.03993, 1.00677, 1.0418, 1.03919, 1.03012, 1.01624, 1.03685, 1.02299, 1.03201, 1.01396, 1.04112, 1.01867, 1.03235, 1.04251, 1.03397, 1.04391, 1.03305, 1.04574, 1.02415, 1.02867, 1.01382, 1.01612, 1.0468, 1.04994, 1.03329, 1.04169, 1.03623, 1.02511, 1.03761, 1.00634, 1.02759, 1.03816, 1.02758, 1.04475, 1.01878, 1.02285, 1.02588, 1.02034, 1.02026, 1.03393, 1.01774, 1.02388, 1.00922, 1.01464, 1.03299, 1.01583, 1.04755, 1.0228, 1.04612, 1.02129, 1.03826, 1.0236, 1.0154, 1.02874, 1.03223, 1.00458, 1.04066, 1.03077, 1.05601, 1.04466, 1.04683, 1.02297, 1.05948, 1.02831, 1.01841, 1.02963, 1.02653, 1.01776, 1.0339, 1.02631, 1.02542, 1.03704, 1.04412, 1.05488, 1.02656, 1.02242, 1.00662, 1.0428, 1.01854, 1.04306, 1.03382, 1.03681, 1.04337, 1.03614, 1.03229, 1.02998, 1.02178, 1.05674, 1.02109, 1.03054, 1.02407, 1.05347, 1.03537, 1.02828, 1.03103, 1.03334, 1.02923, 1.02035, 1.04291, 1.02308, 1.04083, 1.05471, 1.05831, 1.03942, 1.01273, 1.03908, 1.0143, 1.05177, 1.03173, 1.00989, 1.03427, 1.01196, 1.03363, 1.06327, 1.02305, 1.01931, 1.05569, 1.0289, 1.0464, 1.04275, 1.02839, 1.03242, 1.01741, 1.03502, 1.05104, 1.03283, 1.02195, 1.05634, 1.01065, 1.03107, 1.03376, 1.04954, 1.04154, 1.0195, 1.04233, 1.02452, 1.03125, 1.05476, 1.05436, 1.032, 1.04246, 1.01802, 1.04609, 1.06276, 1.04892, 1.04862, 1.00346, 1.01652, 1.06142, 1.04121, 1.05885, 1.03192, 1.03974, 1.02427, 1.03873, 1.02062, 1.03057, 0.998197, 1.0457, 1.04298, 1.04214, 1.04511, 1.0279, 1.01643, 1.0357, 1.05556, 1.08252, 1.03102, 1.06903, 1.02503, 1.01944, 1.02912, 1.03318, 1.002, 1.01823, 1.06793, 1.04007, 1.06815, 1.02166, 1.01946, 1.01432, 1.03962, 1.0578, 1.04183, 1.04924, 1.00761, 1.06347, 1.03715, 1.0968, 1.02014, 1.06263, 1.0312, 1.0228, 1.00993, 1.04786, 1.06145, 1.03347, 1.03347, 0.995834, 1.0494, 1.08022, 0.976039, 1.02093, 1.02669, 1.03207, 1.08853, 1.07288, 1.0249, 0.997375, 1.05134, 1.00708, 1.07521, 1.06058, 1.07271, 1.0652, 1.03919, 1.01132, 1.0001, 1.0315, 1.04999, 1.03068, 1.06246, 1.03618, 1.03197, 1.01683, 1.02006, 0.995174, 0.994059, 1.02538, 0.986574, 1.02219, 1.07816, 1.03688, 1.0552, 1.04203, 0.96246, 1.04782, 1.0361, 1.02003, 0.966462, 0.947528, 1.03787, 1.00564, 1.15252, 1.01859, 1.06553, 0.903925, 1.11424, 1.00737, 0.931414, 0.996613, 0.930233, 1.01314, 1.03801, 1.08348, 1.21745, 1.04, 1.00741, 1.08932, 1.22672, 1.25505, 0.972526, 0.937798, 1.12259, 1.15154, 1.3314, 1.14786, 1.29134, 1.09551, 1.18911, 1.01797, 1.0127, 1.37205, 0.820076, 1.40723, 0.9147, 1.41016, 0.82323, 0.828947, 2.1343, 0.45735, 1.2196, 0.743194, 0.653357, 0.533575, 1.5245, 1.06715, 3.20145, 0.54882, 1.8294, 1.37205, 1, 0.9147, 1.37205, 0.45735, 1, 1, 0, 0.45735, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 }, +}; + +//------------------------------------------------ +//------------- Au+Au 11.5 GeV 2020 -------------- +//------------------------------------------------ + +// Number of refMult bins +const int auau11_run20_refMultBins = 500; +// Number of z vertex bins +const int auau11_run20_nVzBins = 29; +// Ranges of vz bins +const double auau11_run20_vzRangeLimits[auau11_run20_nVzBins][2] = { + {-145., -135.}, + {-135., -125.}, + {-125., -115.}, + {-115., -105.}, + {-105., -95.}, + {-95., -85.}, + {-85., -75.}, + {-75., -65.}, + {-65., -55.}, + {-55., -45.}, + {-45., -35.}, + {-35., -25.}, + {-25., -15.}, + {-15., -5.}, + {-5., 5.}, + { 5., 15.}, + { 15., 25.}, + { 25., 35.}, + { 35., 45.}, + { 45., 55.}, + { 55., 65.}, + { 65., 75.}, + { 75., 85.}, + { 85., 95.}, + { 95., 105.}, + { 105., 115.}, + { 115., 125.}, + { 125., 135.}, + { 135., 145.} +}; +// Values of vz correction (refMultAtCenter/refMultElsewhere) +const double auau11_run20_vzCorr[auau11_run20_nVzBins] = { + 1.00049, // (-145,-135)cm + 0.994636, // (-135,-125)cm + 0.993072, // (-125,-115)cm + 0.993671, // (-115,-105)cm + 0.991791, // (-105,-95)cm + 0.993384, // (-95,-85)cm + 0.991966, // (-85,-75)cm + 0.997562, // (-75,-65)cm + 1.00225, // (-65,-55)cm + 1.00018, // (-55,-45)cm + 0.993935, // (-45,-35)cm + 0.996246, // (-35,-25)cm + 0.998221, // (-25,-15)cm + 0.998975, // (-15,-5)cm + 1., // (-5,5)cm + 1.0006, // (5,15)cm + 0.998862, // (15,25)cm + 0.998048, // (25,35)cm + 0.996399, // (35,45)cm + 1.00272, // (45,55)cm + 1.00506, // (55,65)cm + 1.00071, // (65,75)cm + 0.996179, // (75,85)cm + 0.996932, // (85,95)cm + 0.997851, // (95,105)cm + 0.999172, // (105,115)cm + 1.00202, // (115,125)cm + 1.00674, // (125,135)cm + 1.01446 // (135,145)cm +}; + +// Shape correction values +const double auau11_run20_shapeWeightArray[auau11_run20_nVzBins][auau11_run20_refMultBins] = { + // RefMult: -145#leq Vz #leq-135 + {0.365184, 0.459111, 0.737054, 0.99486, 1.08468, 1.10217, 1.10492, 1.10062, 1.09286, 1.078, 1.0684, 1.05951, 1.05616, 1.04518, 1.0301, 1.03799, 1.01668, 1.01188, 1.0179, 1.01558, 1.00267, 0.993742, 1.01634, 1.00683, 1.0109, 1.00493, 1.00001, 1.00858, 1.00219, 0.998347, 0.996562, 1.00842, 0.998364, 1.00098, 0.984106, 0.998171, 1.0049, 0.995308, 1.00382, 0.997036, 1.00655, 0.989446, 0.998433, 0.998777, 1.00043, 0.989532, 0.999435, 0.993849, 1.01002, 0.997404, 1.00536, 0.990611, 0.994368, 0.995964, 1.01451, 0.988459, 0.98099, 1.00007, 0.99041, 0.992341, 1.00172, 0.996773, 0.991601, 0.979368, 1.00338, 0.999137, 1.0009, 0.985202, 1.0046, 0.987621, 1.0006, 1.00631, 0.99633, 0.995119, 1.03745, 1.001, 0.990468, 1.00054, 0.997623, 0.975687, 0.995711, 0.990197, 1.00457, 1.01304, 1.004, 0.997031, 0.997081, 0.992773, 0.998921, 0.984121, 0.99873, 1.01358, 1.01018, 1.00744, 0.985091, 0.994947, 0.995706, 0.983821, 1.00579, 0.98792, 1.00085, 0.992556, 0.996362, 0.992925, 1.00027, 0.989351, 0.989827, 1.01443, 0.994582, 0.993776, 1.01546, 0.986115, 1.00593, 0.995185, 0.996855, 1.0218, 1.0166, 1.00061, 1.00073, 1.00548, 0.984804, 1.00585, 1.00751, 1.00975, 0.990649, 1.00708, 1.0098, 0.979493, 1.00078, 0.982885, 1.01032, 1.00619, 1.00202, 0.984752, 0.980519, 1.00283, 1.00241, 0.992782, 1.00305, 1.01546, 0.990594, 1.00847, 1.00934, 1.00464, 0.989942, 0.989616, 0.994387, 1.00494, 1.01961, 1.00937, 0.988435, 0.996923, 0.999991, 0.990926, 1.01822, 0.977312, 0.992635, 1.00125, 1.0176, 0.984615, 0.994024, 1.0009, 0.995358, 1.01394, 1.00335, 0.988199, 0.997373, 0.996351, 1.0089, 1.00562, 1.00378, 1.00063, 1.00606, 0.994182, 0.987687, 0.995007, 0.996801, 1.02627, 0.994596, 0.990184, 1.007, 0.984252, 0.992769, 1.01665, 1.02252, 0.99372, 1.02268, 0.99609, 0.998956, 0.97852, 1.00413, 1.02002, 1.00792, 0.985526, 1.00987, 0.984852, 1.00706, 1.00745, 0.997953, 0.983626, 0.988552, 0.996671, 0.998775, 0.997808, 1.00169, 0.997625, 1.01145, 1.01234, 1.00209, 0.989325, 1.00171, 1.00971, 0.999864, 1.00157, 1.01344, 0.998548, 0.99546, 0.980916, 1.01602, 1.00006, 1.01646, 0.999401, 0.982555, 1.00053, 1.01616, 0.994383, 0.995715, 1.0006, 0.997228, 1.02764, 1.00143, 1.01292, 0.998867, 0.994629, 1.00985, 1.0032, 0.995716, 0.989594, 0.976864, 1.0176, 1.01808, 1.00159, 0.97888, 1.01491, 0.985183, 1.0249, 0.991582, 0.971557, 1.00495, 0.985792, 1.0027, 0.990508, 0.970974, 1.00883, 1.00649, 0.975785, 0.993081, 0.984727, 1.0081, 0.994994, 0.991725, 0.978282, 0.983076, 1.007, 0.998134, 1.01509, 1.00268, 1.01192, 1.00461, 1.01135, 0.987504, 0.990155, 0.97938, 1.02512, 1.02173, 1.02529, 0.971013, 0.992952, 1.00343, 0.973281, 0.997597, 0.995773, 0.988643, 1.01165, 1.00917, 1.01115, 0.990058, 1.00294, 0.999276, 0.99756, 0.961252, 0.99727, 0.998649, 1.01397, 0.983001, 0.991469, 1.00248, 1.00204, 0.996008, 1.0205, 1.02293, 1.00012, 0.99976, 0.977049, 0.990372, 0.974432, 0.950944, 0.976419, 0.989852, 0.989033, 1.00746, 1.02303, 0.996436, 0.985502, 1.08749, 0.991149, 1.03573, 0.952662, 0.964817, 0.965455, 0.946896, 0.972114, 0.915276, 0.980156, 1.00018, 0.998926, 1.04022, 0.992052, 1.00645, 1.06848, 1.02528, 0.988641, 0.996372, 1.06662, 1.01478, 1.02362, 0.982266, 1.01936, 0.911123, 1.02471, 1.0914, 1.03051, 1.11979, 0.984438, 0.83456, 0.930106, 0.923749, 1.08864, 0.922876, 0.925962, 0.790926, 1.04936, 1.14997, 0.812179, 1.39023, 1.35642, 0.949004, 0.887381, 1.17578, 0.684551, 1.33107, 0.813432, 0.950765, 0.739484, 1.2504, 1.07753, 2.5734, 0.44369, 0.388229, 1.33107, 0.887381, 0.369742, 0.591587, 0.44369, 1.10923, 0.665535, 0.887381, 1.77476, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.}, + // RefMult: -135#leq Vz #leq-125 + {0.413166, 0.508218, 0.764479, 0.990348, 1.07135, 1.08854, 1.07957, 1.07886, 1.07982, 1.06661, 1.05016, 1.0525, 1.04282, 1.03303, 1.02606, 1.02217, 1.01995, 1.00687, 1.01406, 1.01248, 1.01011, 1.00092, 1.00605, 0.997204, 1.00285, 1.0024, 0.999423, 0.998391, 1.00266, 0.992752, 0.996592, 0.998436, 0.993159, 1.00652, 0.984016, 0.99787, 0.997093, 0.990661, 0.996151, 0.997282, 0.992275, 0.993749, 1.00633, 1.00526, 0.990116, 0.986552, 0.999608, 0.996118, 1.0015, 1.00164, 0.998462, 0.996854, 0.996174, 0.995202, 0.989083, 0.99875, 0.994568, 0.996029, 0.986124, 1.00238, 0.986254, 0.990618, 0.992974, 0.988227, 0.995258, 0.991586, 1.00465, 0.992799, 1.00395, 0.99521, 0.991545, 0.99833, 1.00391, 1.00048, 1.01453, 0.992242, 0.979357, 0.997164, 0.986348, 0.997681, 0.998294, 0.998444, 0.989322, 0.997643, 0.991221, 0.982933, 1.00574, 0.999166, 1.01474, 0.984408, 1.01005, 0.999868, 1.01315, 1.00651, 0.996084, 0.981041, 0.98558, 0.982053, 0.997529, 0.987133, 1.00397, 0.996534, 0.991546, 1.00367, 1.01123, 1.00145, 0.990764, 1.00389, 0.978999, 0.998248, 1.00235, 0.992939, 1.0104, 0.994892, 0.994225, 1.00006, 1.01222, 0.998243, 0.994203, 1.00866, 1.00291, 0.994623, 1.00539, 0.997502, 0.995255, 0.995074, 1.01137, 0.979148, 0.993667, 0.974666, 1.01216, 0.991665, 1.00356, 0.995058, 0.995819, 0.985408, 1.00975, 0.980332, 1.00131, 1.02649, 1.00526, 0.993191, 0.997385, 1.01843, 1.01467, 0.983296, 1.00527, 1.00964, 1.00449, 0.996161, 0.996738, 0.992617, 0.993417, 0.991159, 1.01664, 0.997266, 0.985002, 1.00528, 1.00028, 0.991492, 0.990361, 0.989201, 0.985857, 0.996036, 1.00439, 1.01145, 1.00139, 1.00016, 1.01028, 0.981695, 1.00765, 1.00606, 0.986169, 1.00808, 0.97996, 0.998127, 0.984702, 1.00497, 0.992174, 1.01554, 0.999526, 0.97088, 1.0101, 1.01303, 1.01153, 1.00393, 0.998262, 0.996829, 1.00351, 0.989845, 0.998692, 1.01606, 0.99538, 1.00908, 0.986605, 0.986865, 0.991984, 1.01111, 0.994823, 0.987582, 0.983291, 0.997133, 0.993815, 1.00789, 0.998423, 1.00146, 0.98961, 1.02931, 0.985828, 1.00015, 1.00655, 1.01783, 1.00105, 1.01272, 1.00499, 1.01133, 0.996301, 0.997913, 1.01984, 1.00257, 1.01815, 1.01381, 1.01634, 0.999948, 1.02165, 0.974028, 1.01765, 1.01647, 1.01122, 0.999663, 1.00492, 1.01215, 0.979745, 0.999771, 1.00873, 1.0059, 1.00763, 0.999281, 1.00604, 1.01365, 1.01821, 0.989014, 0.995205, 0.996211, 1.01311, 1.038, 0.997496, 0.989879, 1.01786, 0.993617, 0.991178, 0.992556, 0.996563, 0.992439, 1.01932, 0.991416, 1.00765, 0.972481, 1.01441, 1.01, 0.996931, 0.988996, 1.0207, 0.998204, 1.02361, 0.988558, 1.00198, 1.01627, 0.989287, 1.01014, 1.00604, 0.999161, 0.985795, 0.997349, 1.0158, 1.02553, 0.984705, 0.992874, 0.99746, 0.986927, 1.02288, 0.99908, 1.03812, 1.00532, 1.00627, 1.02684, 1.00515, 1.00405, 1.00772, 1.01936, 0.999312, 0.991487, 0.994075, 1.00891, 0.987819, 0.99299, 1.00393, 1.00449, 1.01701, 1.0252, 0.98021, 0.97635, 1.00217, 0.999197, 1.00099, 0.962683, 0.982878, 0.981054, 0.971103, 0.968124, 0.980792, 0.988082, 1.02234, 0.989123, 0.988991, 1.03191, 1.02772, 1.01418, 0.942961, 0.996255, 0.988481, 0.985997, 0.995284, 0.964267, 0.948743, 0.955643, 0.977439, 0.997611, 0.943606, 1.10848, 1.03395, 1.04857, 1.04182, 1.06219, 0.950069, 0.98361, 0.996576, 1.03859, 0.910015, 1.03697, 1.03795, 1.17889, 1.0411, 1.04915, 1.27836, 0.997661, 1.01919, 1.0395, 1.10384, 1.16988, 1.0377, 1.08144, 1.20538, 0.832853, 0.987085, 1.42727, 0.883786, 1.1845, 1.00607, 1.06605, 1.65482, 1.16335, 0.925392, 0.822571, 1.69998, 1.39837, 2.04468, 1.64514, 0.8637, 1.48063, 0.564049, 0.411285, 0.493543, 0.246771, 0.822571, 1, 0.987085, 1.97417, 1, 0.740314, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.493543, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.}, + // RefMult: -125#leq Vz #leq-115 + {0.495303, 0.577534, 0.788597, 0.98423, 1.05393, 1.0637, 1.0646, 1.0658, 1.06384, 1.05388, 1.03855, 1.03098, 1.03697, 1.02221, 1.01981, 1.01885, 1.01357, 1.00311, 1.00591, 1.00863, 1.00403, 1.00412, 1.00529, 0.994813, 1.00461, 0.995123, 0.990195, 1.00386, 0.998408, 0.99412, 0.999975, 0.99385, 0.992899, 1.00185, 0.987968, 0.995457, 0.993121, 0.991697, 0.993225, 0.997776, 1.00521, 0.996449, 1.00829, 0.991973, 0.990134, 0.986277, 0.99216, 0.997498, 1.00128, 0.991415, 1.00533, 0.9947, 0.988614, 1.00062, 0.995388, 1.00961, 0.978649, 0.995576, 0.986623, 0.987568, 0.996047, 0.982733, 0.995792, 0.989133, 0.994887, 0.982467, 1.00394, 0.988886, 1.00681, 0.990036, 0.995121, 1.00498, 1.01303, 0.998346, 1.01527, 1.00073, 1.00798, 0.987144, 0.993867, 1.00154, 1.00253, 0.996394, 1.00477, 1.01567, 0.99146, 0.986679, 1.00575, 0.994059, 0.992275, 0.98997, 0.999629, 0.998997, 0.998494, 1.00233, 0.997833, 0.983253, 0.988252, 1.00738, 1.00058, 0.98685, 0.997707, 0.997384, 1.00012, 1.0041, 1.00255, 0.997643, 0.994228, 1.00401, 0.991529, 1.00299, 0.999821, 0.997703, 0.997751, 0.986801, 1.00094, 1.00897, 1.01887, 1.02006, 1.00328, 1.00586, 0.980278, 1.00081, 1.00697, 0.990555, 0.997779, 1.00755, 1.01805, 0.985117, 1.00209, 0.995285, 0.991536, 1.02274, 0.98444, 0.995527, 0.984515, 0.994617, 1.0164, 0.998056, 1.00183, 1.00889, 0.982086, 0.988135, 1.00465, 0.989527, 1.01173, 0.991246, 1.00818, 1.01079, 1.01229, 0.993567, 0.988958, 0.98538, 0.997607, 0.982277, 1.00972, 1.00559, 0.996124, 0.990154, 1.00981, 0.988521, 1.00754, 0.992859, 0.990382, 1.00547, 0.99447, 1.00139, 1.00449, 1.00042, 0.985229, 1.0086, 1.01203, 0.999782, 0.996282, 1.02238, 0.995251, 1.00209, 1.00395, 1.00424, 0.981266, 1.00099, 1.01474, 0.990546, 0.991414, 1.01252, 1.02707, 0.992012, 1.00658, 1.00776, 1.0053, 0.988231, 1.01696, 1.00545, 0.998783, 0.986784, 0.989328, 0.981087, 1.00069, 0.99464, 0.986948, 0.996113, 0.982453, 1.00326, 0.992249, 1.0053, 1.01506, 1.00063, 1.00167, 1.01124, 0.984809, 0.985243, 1.00615, 1.0023, 0.991652, 0.999363, 1.00252, 1.00728, 1.00911, 1.00336, 1.0159, 0.991785, 1.01136, 1.00857, 1.00563, 0.985013, 1.00886, 0.990937, 1.00333, 1.0183, 0.99817, 1.01147, 1.01482, 0.999611, 1.00669, 1.0084, 0.986456, 1.01023, 0.990965, 0.97764, 0.996732, 1.00274, 0.992437, 0.997704, 0.985849, 1.02925, 0.995234, 1.01571, 0.970174, 0.994536, 1.04526, 0.996135, 0.995022, 0.994493, 0.998357, 1.00713, 1.01591, 0.987267, 0.99986, 1.00155, 1.00998, 1.00038, 0.986979, 0.966627, 1.01052, 0.99203, 1.00338, 1.0028, 0.998922, 0.997064, 0.991385, 1.0069, 1.00115, 1.01555, 1.00284, 1.00177, 1.0001, 1.02575, 1.00148, 1.01275, 0.99277, 0.979081, 1.0144, 1.01501, 0.979924, 0.986909, 1.00472, 1.0201, 1.0233, 0.980987, 0.996922, 1.00047, 1.00389, 1.00105, 1.00364, 0.996004, 0.972662, 0.992002, 0.997526, 0.993079, 0.984115, 1.00683, 0.977182, 1.01199, 1.01051, 0.97904, 1.01921, 1.00802, 0.972422, 1.00316, 1.01656, 0.971437, 0.973311, 1.00129, 0.999779, 0.989521, 0.989672, 1.00284, 1.0434, 0.936725, 0.974362, 1.00226, 0.949698, 1.01125, 0.99754, 0.974237, 1.01313, 1.05952, 0.953244, 0.94594, 0.998, 0.966467, 1.00592, 0.971909, 1.01029, 1.05162, 0.975127, 0.967057, 0.862411, 1.05629, 1.01516, 1.04112, 1.02604, 1.1363, 1.12847, 0.926748, 0.974077, 1.00264, 1.14532, 1.13907, 0.978329, 0.918917, 0.941889, 0.956416, 1.13594, 0.879485, 0.96768, 1.35767, 1.16699, 1.26722, 0.803254, 1.05224, 1.55498, 1.385, 2.04603, 0.909344, 0.84569, 0.579707, 1.58226, 1.09121, 1.27308, 0.727476, 1.45495, 0.682008, 0.545607, 1, 1, 1.63682, 0.272803, 1.09121, 1, 1.63682, 1.09121, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.}, + // RefMult: -115#leq Vz #leq-105 + {0.547721, 0.622846, 0.821037, 0.986263, 1.04963, 1.059, 1.05644, 1.05366, 1.05151, 1.04542, 1.03216, 1.02928, 1.03114, 1.01715, 1.01649, 1.01757, 1.00631, 1.00152, 1.0009, 1.00239, 1.00711, 1.00248, 1.01078, 0.997709, 1.00184, 0.999895, 0.995927, 1.00963, 1.00244, 0.997066, 0.995837, 1.00428, 1.00131, 0.996723, 0.977216, 0.997873, 0.99571, 0.99636, 0.993563, 1.00242, 0.993908, 0.998207, 1.00246, 0.996633, 0.994401, 0.992334, 0.993567, 0.994581, 1.00025, 0.993741, 0.994647, 0.996409, 0.995697, 0.994669, 1.00943, 0.99393, 0.983362, 0.996824, 0.990452, 0.999841, 1.00938, 0.991376, 0.999815, 0.987908, 0.999162, 0.99531, 0.999633, 0.986192, 1.00544, 0.984651, 1.00619, 0.999326, 1.00797, 0.996064, 1.00874, 0.99544, 1.0012, 0.984747, 0.991612, 0.994497, 0.99896, 0.99294, 0.995917, 1.00232, 0.996923, 0.995909, 1.00149, 0.991693, 0.993503, 0.983493, 0.996517, 1.00139, 1.01421, 1.0017, 0.997048, 0.984225, 0.988988, 0.992529, 1.00624, 0.99656, 1.01433, 0.981073, 1.00052, 1.00248, 1.00505, 1.00019, 0.987907, 1.00426, 0.993513, 0.998971, 0.998727, 0.996654, 1.01603, 0.990567, 0.985747, 1.00033, 1.00611, 1.01313, 1.00743, 1.00902, 0.998838, 0.996871, 0.998168, 0.987346, 0.999983, 0.996642, 1.01869, 0.979195, 0.991965, 0.989217, 1.0109, 1.01905, 1.00174, 0.987553, 0.995063, 1.02001, 0.994282, 0.988217, 0.996637, 0.996432, 0.989325, 0.997928, 1.00019, 1.01251, 1.01397, 0.976766, 1.00163, 1.00909, 1.01175, 0.99919, 0.999917, 0.992938, 0.996367, 0.99758, 1.03264, 1.00637, 1.00699, 0.996529, 1.00276, 0.986825, 1.00961, 1.00405, 1.00073, 1.00376, 0.9949, 1.0009, 0.994391, 0.992663, 1.0101, 0.993772, 1.02251, 0.998826, 1.00216, 1.016, 1.00452, 1.01409, 1.00145, 1.0018, 0.9939, 1.01032, 1.01167, 0.973071, 0.992984, 1.01729, 1.01434, 1.00264, 0.989765, 0.992126, 1.00365, 0.997598, 1.01647, 0.984479, 0.976864, 0.995944, 1.00564, 0.984687, 0.989, 1.00346, 1.00373, 0.986155, 0.969786, 0.989822, 1.00288, 1.00819, 0.99944, 0.981972, 0.98309, 1.00937, 1.02168, 0.998471, 1.00289, 1.02041, 0.994831, 0.986352, 0.989428, 0.990969, 1.00477, 1.0094, 1.00289, 0.994593, 1.00309, 0.991457, 1.00037, 1.00691, 0.999884, 0.996011, 0.981519, 1.01955, 0.994783, 1.01635, 1.00102, 0.99778, 1.00035, 1.00456, 1.0035, 0.98205, 0.9786, 0.99545, 1.00102, 1.00666, 1.00879, 1.00173, 1.00495, 1.01323, 0.987995, 1.03093, 0.980011, 1.01698, 1.01433, 0.990118, 0.997842, 0.999455, 0.997645, 1.00682, 1.00371, 1.00221, 1.01811, 0.982659, 1.00498, 1.0035, 0.9805, 0.987265, 0.994138, 0.997652, 0.982117, 1.00315, 0.986894, 1.01443, 0.986969, 1.01707, 1.00519, 1.01124, 0.983971, 0.990781, 0.994016, 0.998895, 0.991244, 0.990737, 0.995995, 0.980746, 1.00707, 0.991239, 0.995756, 1.00006, 1.00051, 1.01077, 1.00348, 1.01218, 0.987083, 1.00474, 1.00061, 1.00593, 1.01218, 0.990059, 1.00283, 0.997516, 1.01792, 0.997834, 0.981192, 0.993563, 0.990434, 0.995473, 1.00069, 0.967665, 0.994014, 0.983067, 0.970075, 0.964004, 0.956506, 0.960542, 0.992959, 0.988148, 0.957534, 0.99161, 0.952814, 1.00728, 0.977763, 0.940349, 1.01138, 0.988516, 0.967993, 0.970859, 0.934241, 0.911385, 0.928379, 0.987961, 0.929618, 0.971867, 0.929912, 1.06014, 0.982779, 0.982371, 1.0182, 1.02231, 0.91768, 0.907823, 0.905346, 1.01045, 0.927757, 0.975205, 1.03614, 1.19974, 0.924888, 0.879973, 0.789827, 0.902994, 0.85121, 0.82051, 0.93814, 1.02835, 0.813045, 0.931046, 1.073, 0.912476, 0.854358, 1.23435, 0.855368, 1.23402, 0.756977, 0.830587, 1.22116, 0.824819, 1.28543, 0.88216, 1.03311, 0.485608, 2.89937, 0.599869, 0.323006, 2.39947, 0.399912, 0.214239, 0.799825, 0.149967, 0.999781, 0.359921, 1, 2.39947, 1, 1.79961, 0.599869, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.}, + // RefMult: -105#leq Vz #leq-95 + {0.606595, 0.676304, 0.851819, 0.9907, 1.03836, 1.05053, 1.04681, 1.04492, 1.04803, 1.03021, 1.02963, 1.02229, 1.02514, 1.01232, 1.01028, 1.01567, 1.0051, 1.00498, 0.997847, 1.00529, 1.00184, 1.00215, 1.00706, 0.999298, 1.00255, 0.997274, 0.999257, 1.00956, 1.00245, 0.992486, 1.00428, 0.997667, 0.996555, 0.992022, 0.98892, 0.989935, 0.996191, 0.994543, 1.0057, 1.00227, 0.997441, 0.994471, 0.998033, 0.994654, 0.999382, 0.978674, 1.00284, 0.997293, 0.997191, 1.00751, 0.996254, 0.995227, 0.990388, 0.990741, 0.996334, 1.00013, 0.986766, 0.991956, 0.990192, 0.998531, 1.00072, 1.00108, 0.996352, 0.985129, 0.993947, 0.988653, 0.998698, 1.00193, 1.00154, 0.996086, 0.997672, 0.989213, 1.00601, 0.988828, 1.00561, 1.0057, 0.992233, 0.99648, 0.982892, 0.994176, 1.00427, 1.00379, 1.00373, 0.991379, 0.998132, 0.991206, 0.993526, 0.992656, 1.0012, 0.998347, 0.998443, 1.01579, 1.01313, 1.00889, 0.989561, 0.988949, 0.992887, 0.991256, 1.01096, 0.977326, 1.01594, 0.989532, 0.992836, 1.00551, 1.00362, 1.00236, 0.993654, 1.00676, 0.998807, 0.992179, 1.00655, 0.990208, 1.00677, 0.985035, 1.0013, 0.996406, 1.01709, 0.998284, 1.01062, 1.0197, 1.01447, 1.00267, 1.00506, 0.987542, 0.99068, 0.987371, 1.00263, 0.982987, 1.00496, 0.990479, 1.0264, 1.0201, 0.987724, 0.997764, 0.978667, 1.00113, 1.00688, 0.990554, 1.00213, 0.998327, 0.988669, 1.00468, 1.00926, 1.01739, 0.999355, 0.997918, 1.01095, 1.0255, 1.01108, 1.00464, 0.982008, 0.968875, 0.998855, 0.990119, 1.01684, 1.00378, 1.0118, 1.00214, 1.00804, 0.984512, 1.00242, 0.993932, 0.992135, 0.993175, 0.981374, 1.00274, 1.00113, 0.991333, 0.993344, 0.993682, 1.00677, 1.00704, 0.992586, 1.0277, 0.989395, 1.01248, 0.988536, 0.997431, 1.00025, 0.999271, 1.00393, 0.989971, 0.995583, 1.0105, 0.998687, 0.98837, 0.996139, 0.991483, 1.00822, 0.997475, 1.01931, 1.0062, 0.997812, 0.99142, 0.994299, 0.992583, 0.996916, 1.0051, 0.985893, 0.98431, 0.992827, 0.997044, 0.999847, 1.00003, 1.00058, 0.980434, 0.986218, 1.014, 1.01811, 1.00009, 0.987987, 1.00889, 0.998623, 0.987898, 0.988233, 1.01003, 1.01485, 1.00037, 0.988824, 0.990163, 1.01296, 1.00146, 0.993344, 0.992688, 0.999946, 0.999765, 0.991159, 1.00291, 1.01262, 1.02744, 0.997615, 1.01351, 1.01356, 0.997795, 1.00578, 1.00452, 0.9797, 0.978115, 0.990588, 1.00094, 1.00628, 1.01332, 0.993339, 1.0198, 0.99409, 1.02283, 0.980174, 1.01293, 1.00975, 0.989288, 1.01763, 1.00509, 0.988168, 1.01801, 1.01638, 0.985628, 1.0201, 1.02294, 1.01473, 1.00514, 0.985326, 0.995181, 1.00116, 0.996783, 1.00572, 1.00208, 0.999138, 1.01216, 0.990956, 1.01332, 1.01096, 1.00872, 0.992872, 1.01122, 1.00004, 1.01996, 0.999576, 1.0011, 0.990799, 0.977797, 1.03104, 1.00216, 1.00287, 1.0255, 1.01069, 1.01881, 1.01498, 0.978118, 0.991174, 0.980102, 1.01357, 0.9831, 1.00913, 1.01132, 0.993755, 0.990465, 0.989877, 1.01169, 1.01731, 0.998267, 0.974582, 0.980946, 1.00086, 1.00085, 1.00811, 1.02463, 0.989693, 0.978033, 0.982921, 0.987038, 1.00365, 1.00067, 1.01832, 1.01262, 0.994, 1.0576, 1.04895, 0.963742, 0.993023, 1.00104, 1.00576, 1.00888, 0.963147, 0.963633, 0.965904, 0.990929, 0.940786, 0.985546, 1.07372, 1.06473, 1.09061, 1.05036, 1.08249, 1.09155, 1.09562, 0.968107, 0.989871, 1.07997, 1.00722, 1.05231, 1.12001, 1.09232, 0.987614, 1.01911, 0.948764, 1.06455, 1.13095, 1.15391, 0.986534, 1.03008, 0.845216, 0.920043, 0.856958, 1.15883, 1.02543, 1.18702, 1.25996, 1.09595, 0.963609, 0.930117, 1.28648, 0.771407, 1.09088, 0.909065, 1.26815, 0.654527, 1.11655, 0.467519, 0.458169, 0.490895, 0.748031, 0.467519, 0.654527, 0.130905, 0.654527, 0.654527, 1.30905, 1.30905, 1, 0.981791, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.}, + // RefMult: -95#leq Vz #leq-85 + {0.663926, 0.722943, 0.880743, 0.987102, 1.02789, 1.03967, 1.03515, 1.03209, 1.03862, 1.02322, 1.02399, 1.02241, 1.02371, 1.0122, 1.01321, 1.01107, 1.01019, 1.00211, 0.999583, 0.991566, 1.00404, 1.00377, 1.0007, 0.997546, 1.00658, 1.00436, 0.999206, 1.00871, 1.00317, 0.994779, 1.00065, 1.0075, 0.994562, 0.99258, 0.991058, 0.995711, 1.00322, 0.995018, 1.00037, 1.00196, 1.0027, 1.00026, 1.00553, 0.996937, 0.992633, 0.990304, 1.00021, 0.995218, 0.989246, 1.0003, 1.00316, 0.998858, 0.993629, 1.00201, 0.995107, 0.999716, 0.98552, 1.00561, 0.987418, 0.996875, 0.999351, 1.00063, 0.985451, 0.99551, 0.991013, 0.999115, 0.995006, 0.999758, 0.994408, 0.994078, 1.00038, 0.998773, 1.00162, 0.997979, 1.01715, 1.00208, 1.00124, 0.986468, 0.992689, 0.988378, 1.00324, 0.989533, 1.01174, 0.993235, 0.988335, 0.996428, 0.990046, 0.998979, 1.00112, 0.992078, 1.00664, 1.00522, 1.01184, 0.996161, 0.991141, 0.990249, 0.999111, 0.992748, 0.993859, 0.981093, 1.00516, 0.994103, 0.999568, 0.996167, 0.999205, 0.997134, 0.997022, 1.0071, 0.989761, 1.00736, 0.997539, 0.98641, 1.00881, 0.998635, 0.996898, 1.00235, 1.01285, 1.00873, 1.00329, 1.0034, 0.990261, 0.997155, 0.999295, 0.984896, 0.999776, 1.01632, 1.00735, 0.98866, 0.999509, 0.981803, 1.00275, 1.013, 0.991157, 0.990813, 0.993636, 1.00398, 1.01516, 1.0083, 1.00616, 1.01474, 0.996366, 1.02314, 0.996973, 1.00887, 1.00709, 0.990761, 0.996572, 1.00878, 1.00498, 1.01305, 1.00062, 0.990031, 1.005, 1.00235, 1.00468, 1.01031, 0.989141, 1.00336, 1.00402, 0.989504, 1.00764, 0.996125, 0.99175, 1.00368, 0.994164, 0.998553, 1.00268, 0.994363, 0.997196, 1.0031, 1.00633, 1.00228, 0.999481, 1.00341, 0.990248, 0.987116, 0.997495, 1.00359, 0.996831, 0.992902, 1.00247, 0.977503, 1.00415, 1.00709, 1.00282, 0.999002, 1.01136, 0.993405, 0.999368, 0.987953, 1.00386, 1.00768, 0.995588, 0.998701, 0.982322, 0.986428, 0.998446, 1.0112, 0.976933, 0.987151, 0.977045, 0.997251, 1.00363, 0.999394, 1.00119, 0.981006, 0.988585, 1.00908, 0.990683, 0.997373, 1.00129, 1.00528, 0.992933, 1.00565, 1.00406, 1.00976, 1.0043, 0.997663, 1.02107, 1.00456, 0.998517, 0.984357, 1.01011, 0.989589, 0.999628, 0.988553, 1.01402, 1.02279, 0.985948, 1.00165, 1.01015, 0.998528, 0.994537, 1.00279, 1.00108, 1.0206, 1.00685, 0.994802, 0.993232, 1.02294, 1.006, 1.00744, 0.989589, 1.008, 0.993879, 1.01469, 1.00255, 0.98886, 1.01319, 0.984617, 1.00201, 0.985707, 1.00233, 1.00874, 1.01309, 0.98024, 1.00646, 1.00341, 1.0056, 1.00853, 0.98526, 1.00423, 1.01442, 1.00082, 0.990473, 0.99526, 0.991641, 1.01103, 0.995222, 1.00728, 1.00363, 0.998542, 0.985372, 1.01425, 1.01513, 0.997033, 1.01121, 0.993144, 0.991038, 0.952573, 1.00715, 1.01524, 1.01185, 1.02759, 0.994435, 1.00461, 1.00102, 1.00193, 0.990716, 0.986392, 0.97596, 0.997623, 0.997425, 0.985499, 0.989709, 1.00975, 0.979371, 0.989793, 1.04276, 0.99783, 0.982863, 0.982749, 1.00109, 0.964696, 1.04422, 0.982241, 0.994759, 0.966649, 0.963544, 0.971827, 0.97624, 1.01737, 0.984593, 1.01758, 0.964819, 0.982891, 1.00954, 0.96206, 0.964935, 0.963243, 0.966691, 0.993661, 0.985341, 0.947237, 0.939999, 0.989703, 0.989418, 0.941254, 1.01935, 1.02407, 0.990682, 0.986702, 0.930079, 0.983533, 1.00014, 0.897049, 0.938913, 1.02738, 0.922268, 0.939916, 1.03073, 1.08609, 0.910925, 0.983149, 0.921959, 0.907873, 0.845444, 1.01648, 1.0686, 0.901478, 0.908374, 1.03566, 0.928245, 1.03472, 0.774926, 1.16708, 0.894935, 1.00091, 1.63372, 0.814567, 1.26286, 1.16981, 0.78775, 0.770625, 1.46521, 0.602629, 1.37068, 0.47265, 0.330855, 0.654438, 1.13436, 0.443109, 0.354487, 0.708975, 3.54487, 0.354487, 0.708975, 1.41795, 1, 0.708975, 2.8359, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.708975, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.}, + // RefMult: -85#leq Vz #leq-75 + {0.675095, 0.75134, 0.899603, 0.993627, 1.01853, 1.02303, 1.0259, 1.02739, 1.03015, 1.02472, 1.01541, 1.01012, 1.01713, 1.00854, 1.01145, 1.00836, 1.0067, 1.0043, 1.00325, 0.997622, 1.00236, 1.00231, 1.00259, 0.994866, 1.00605, 0.999285, 1.00446, 0.998762, 1.01063, 0.992676, 1.00253, 1.00581, 0.995595, 0.998107, 0.993972, 0.998671, 1.00211, 0.993757, 0.99706, 1.00255, 1.00214, 0.992008, 1.00411, 1.00438, 0.998719, 0.993, 0.994277, 0.996236, 0.999374, 1.00262, 0.991694, 0.995051, 0.997924, 1.00168, 0.997559, 0.999593, 0.992131, 1.00799, 0.992429, 0.999562, 0.998665, 0.990703, 0.987354, 0.993269, 0.995308, 0.993192, 0.99831, 0.992304, 1.00399, 0.993452, 0.995826, 0.996125, 1.01639, 0.99417, 1.01331, 0.990357, 1.00065, 0.994335, 0.999202, 0.989658, 1.0084, 1.00119, 1.00536, 1.00171, 0.990234, 0.992514, 0.999528, 0.993747, 1.00598, 0.985219, 1.00661, 1.00623, 1.00896, 0.990013, 0.994675, 0.998348, 0.99393, 0.998283, 1.00508, 0.989401, 0.996929, 0.990835, 0.995375, 1.00138, 1.01331, 1.00056, 0.992354, 1.00882, 0.993329, 1.00165, 1.00873, 0.988885, 1.00505, 0.994308, 0.99455, 1.00673, 1.01451, 1.0059, 1.00911, 1.01336, 1.00063, 0.999972, 1.01931, 0.996205, 1.00586, 0.998293, 1.01213, 0.98491, 1.00429, 0.981261, 1.01003, 1.0151, 1.00568, 0.984557, 0.986366, 1.00153, 1.0251, 0.988637, 0.996619, 1.01305, 1.00007, 1.00661, 1.00233, 1.0101, 1.00208, 0.998573, 1.00709, 1.00636, 1.00795, 0.999994, 0.993383, 0.990528, 0.996529, 0.984407, 1.00828, 0.990038, 0.988481, 0.987147, 1.00804, 1.00045, 0.999924, 1.001, 0.987751, 1.00619, 0.996381, 0.990282, 1.01255, 0.994417, 0.999238, 0.990199, 1.00278, 1.00406, 0.99912, 1.00605, 0.981789, 1.00625, 0.993384, 1.01083, 0.996199, 1.00011, 1.02324, 0.986092, 1.00179, 1.00359, 1.01683, 0.993281, 0.996735, 0.986246, 0.997771, 0.978923, 1.01601, 1.00202, 0.994011, 0.992451, 0.991899, 0.987795, 1.0001, 1.02716, 0.995349, 0.982743, 0.983675, 1.00472, 0.99939, 0.988218, 0.990053, 0.999582, 0.994227, 1.0035, 0.997568, 0.993798, 0.990302, 1.00149, 0.995044, 1.00146, 1.00044, 1.00896, 1.00301, 1.00048, 0.999081, 1.00142, 0.992178, 1.00605, 0.988616, 0.996376, 1.00446, 0.992943, 1.01761, 1.01034, 0.993912, 1.01553, 1.00279, 0.99716, 0.986143, 0.990011, 1.00272, 0.997274, 0.999484, 0.989286, 0.999833, 1.00907, 0.993451, 0.991191, 0.997128, 1.02057, 0.987328, 1.00735, 0.989305, 1.00038, 1.02392, 1.00272, 1.01181, 0.991372, 0.995658, 1.01281, 1.02928, 1.01459, 1.01599, 0.994719, 1.00006, 1.01549, 0.972478, 0.996202, 0.985407, 0.994009, 0.983143, 1.00329, 0.986836, 1.01179, 0.990448, 1.01536, 0.992437, 1.00604, 1.00544, 1.01274, 1.01601, 1.01038, 1.00481, 0.984619, 1.00178, 0.975891, 1.00436, 1.00382, 1.01567, 1.00643, 1.0181, 1.03126, 0.995581, 1.00732, 1.01576, 1.02021, 1.01969, 0.985993, 1.01678, 0.981109, 0.976026, 0.977262, 0.996252, 1.00759, 1.02376, 1.00201, 0.990697, 0.990962, 0.997703, 0.983635, 1.00548, 0.977174, 0.968662, 0.952446, 0.991074, 0.967166, 0.974472, 0.993742, 0.990376, 0.994916, 0.987122, 1.01102, 1.03604, 0.978586, 0.945868, 0.998056, 1.00963, 1.00122, 0.988202, 0.975714, 0.957162, 1.01097, 0.941042, 1.00318, 1.03117, 1.06875, 0.963676, 1.03834, 0.997859, 1.06317, 0.963873, 0.945197, 0.997689, 0.987232, 0.899157, 1.10522, 1.04375, 1.14909, 1.07268, 0.913287, 0.9703, 0.997708, 0.943519, 0.888418, 1.03524, 1.09111, 0.96811, 0.953476, 0.957531, 0.93457, 0.894764, 1.35801, 1.58475, 1.14225, 0.917263, 0.874916, 1.5502, 0.661304, 1.20237, 0.865342, 1.68618, 0.681343, 1.84029, 0.58577, 0.761501, 1.14225, 0.67689, 0.380751, 0.507668, 0.1523, 0.951877, 1, 0.380751, 1.01534, 1, 2.2845, 1.523, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.}, + // RefMult: -75#leq Vz #leq-65 + {0.66044, 0.769334, 0.928696, 1.00285, 1.02004, 1.01982, 1.01919, 1.01388, 1.02285, 1.0174, 1.00844, 1.0098, 1.00933, 1.00341, 0.995877, 1.00844, 1.01069, 1.00201, 0.997131, 1.00163, 0.99968, 1.00549, 0.998442, 1.0026, 1.00196, 0.99194, 0.99746, 0.997865, 0.998293, 0.994926, 1.00922, 1.00897, 0.995631, 1.00162, 0.985993, 0.994452, 1.00025, 0.999391, 1.00015, 0.997869, 0.997729, 0.99903, 1.00557, 1.0047, 1.00338, 0.99441, 1.00475, 0.998505, 0.992604, 1.00019, 1.00237, 0.993888, 0.99597, 0.994361, 1.00666, 0.99961, 0.986802, 0.998808, 0.99745, 0.997367, 1.00202, 0.999624, 0.993116, 0.992676, 1.0008, 0.991265, 0.999044, 0.993438, 1.00571, 0.997823, 1.00656, 0.998211, 0.994784, 1.00588, 1.01399, 0.998375, 0.995081, 0.993802, 0.992943, 0.999528, 1.00426, 0.998398, 0.999632, 1.00148, 0.980931, 0.997635, 0.992873, 0.997358, 1.00166, 0.994443, 1.00517, 1.00892, 0.999729, 1.00251, 0.989633, 0.995655, 1.00443, 0.998258, 1.00541, 0.988088, 0.999425, 0.994494, 0.995059, 1.00186, 1.00727, 0.996196, 0.995451, 1.00972, 0.990827, 1.00499, 1.01264, 0.992965, 0.995679, 0.999345, 0.99983, 1.01172, 1.01541, 1.00963, 1.01099, 1.01617, 0.994643, 1.00523, 1.01449, 0.99602, 1.00215, 0.999822, 1.01083, 0.98129, 1.0019, 0.990352, 1.00347, 1.01059, 0.989821, 0.998503, 0.989174, 0.99766, 1.00936, 0.988824, 1.00381, 1.01428, 0.994161, 0.997319, 0.995938, 1.00581, 1.00382, 0.979672, 0.991365, 1.01799, 1.01358, 1.01362, 0.987844, 0.997716, 0.997799, 1.00073, 1.00361, 1.00412, 1.00038, 1.00859, 1.01528, 0.992876, 1.00998, 0.990799, 0.996296, 1.00246, 1.00049, 0.992294, 0.994938, 0.982041, 0.98535, 0.993426, 1.01116, 0.998446, 0.997628, 1.01336, 0.989819, 1.0028, 0.992316, 1.00598, 0.986044, 0.982652, 0.998471, 0.988475, 1.00092, 1.013, 1.0158, 1.00617, 1.00554, 0.996746, 1.00376, 0.986502, 1.00112, 0.997948, 0.995041, 0.99384, 0.988888, 0.986495, 0.986224, 0.992356, 0.978881, 0.996356, 0.989522, 1.00127, 0.992335, 1.00235, 0.995313, 0.996738, 0.995532, 0.992273, 0.999327, 0.996286, 1.02002, 1.00749, 0.996595, 1.01265, 1.00166, 0.994786, 1.00309, 0.99343, 1.00003, 0.996007, 1.00172, 1.00963, 1.00036, 0.998122, 1.01111, 1.00246, 0.992528, 1.01673, 1.00835, 1.01462, 1.00623, 0.995461, 0.989365, 1.00407, 0.992299, 1.00175, 0.99634, 1.0016, 0.989443, 1.01304, 1.00549, 1.01007, 1.00028, 1.0077, 0.987471, 1.00529, 0.98623, 0.998932, 1.0171, 0.979806, 1.00611, 1.00345, 1.00033, 0.995347, 1.0117, 0.993061, 1.01374, 0.99049, 0.998349, 1.00469, 0.974245, 0.985722, 0.987165, 1.00759, 0.982166, 0.997432, 0.984021, 1.01334, 1.00083, 1.01574, 1.00174, 1.00611, 0.982665, 0.999644, 0.985323, 0.998555, 1.00173, 0.992246, 1.01059, 0.982492, 0.995835, 1.00249, 0.997591, 0.998288, 1.0064, 1.01246, 1.02281, 0.990155, 1.00676, 1.01575, 0.996036, 0.98998, 1.00238, 0.984873, 0.996271, 0.994051, 1.01333, 0.997559, 0.984372, 0.98064, 0.995611, 0.980029, 1.03449, 0.977826, 1.01026, 1.01664, 0.964322, 0.978997, 0.986437, 0.971381, 1.00781, 0.973088, 1.00669, 1.00912, 0.983377, 1.02611, 1.05387, 0.980434, 0.968316, 1.01252, 1.0224, 0.981603, 0.935734, 1.02694, 0.974409, 0.996827, 1.00497, 0.973034, 1.03386, 1.04565, 1.05393, 1.02634, 1.01397, 1.0251, 0.957653, 1.00746, 0.920717, 1.00583, 1.00128, 1.00149, 1.21023, 1.16046, 1.06722, 0.949574, 0.889278, 0.895962, 0.927307, 0.927377, 1.23051, 0.966536, 0.880258, 1.13926, 1.0722, 0.96189, 0.896297, 1.29435, 1.00657, 1.16709, 1.07389, 1.18286, 1.31993, 1.11441, 1.1052, 1.19188, 1.79464, 0.765454, 1.808, 0.578915, 0.515761, 1.21572, 1.62096, 1.3508, 0.648385, 0.13508, 1.0131, 0.486289, 0.810481, 1.62096, 1, 2.43144, 1.62096, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.}, + // RefMult: -65#leq Vz #leq-55 + {0.691518, 0.727765, 0.91108, 1.00205, 1.01905, 1.01935, 1.0103, 1.0111, 1.01334, 1.0082, 1.00187, 1.00814, 1.01085, 1.00194, 1.00272, 1.00696, 1.00288, 0.996824, 1.00056, 0.994115, 0.999771, 1.00103, 0.998557, 1.00415, 1.00072, 1.00429, 0.998959, 1.00038, 1.00439, 0.994324, 0.994152, 1.00143, 0.995477, 1.00216, 0.991852, 0.999098, 0.997612, 1.00007, 1.0021, 1.01244, 1.00501, 1.00454, 1.00843, 1.00188, 1.00645, 0.992753, 0.996772, 1.00152, 0.999624, 0.995559, 1.00329, 1.00326, 0.995687, 1.00011, 1.00292, 1.00217, 0.99419, 1.00207, 1.00037, 0.999681, 0.990332, 0.990812, 1.00563, 1.00005, 0.994827, 0.985969, 1.0006, 0.991911, 0.999518, 0.997928, 1.00589, 1.00173, 1.00504, 1.00251, 1.00632, 0.995698, 0.99808, 0.994945, 0.997097, 0.991979, 1.00296, 0.996168, 1.00002, 1.00269, 0.992371, 1.00025, 0.993118, 0.99561, 1.00899, 0.989377, 0.998518, 1.01457, 0.998614, 0.994187, 0.987621, 0.987105, 0.998453, 0.989028, 1.00917, 0.990637, 1.01287, 0.993573, 0.989459, 1.00571, 1.00782, 0.994161, 0.993456, 1.01934, 0.999299, 1.00001, 0.999076, 0.99652, 1.00391, 1.0023, 0.998324, 1.00055, 1.01294, 1.01336, 1.00185, 1.01739, 0.995607, 1.00645, 1.00473, 0.997377, 0.993168, 1.00748, 1.00739, 0.988038, 0.9978, 0.98965, 1.00109, 1.00716, 0.991628, 0.990088, 1.00175, 0.995029, 1.01123, 0.989984, 0.999583, 1.01627, 1.00343, 0.995972, 0.993781, 1.00402, 1.01008, 0.985846, 0.988962, 1.00286, 1.00503, 1.01298, 0.990604, 0.988106, 1.00932, 0.99242, 1.01123, 0.994069, 0.992318, 0.996179, 1.00483, 0.989139, 1.0047, 1.0044, 0.989505, 0.988713, 0.994325, 1.00616, 0.998142, 0.996134, 1.00931, 1.00824, 1.00727, 1.0102, 0.995199, 1.01494, 0.981897, 0.998849, 0.987799, 0.994987, 1.00178, 0.986666, 0.988596, 0.989929, 0.986108, 0.998602, 1.01062, 0.99567, 1.00146, 0.997957, 1.00816, 0.997474, 0.996968, 1.00647, 1.00532, 0.994519, 0.994934, 0.991961, 0.989029, 1.00155, 0.987343, 0.991379, 1.00553, 0.996954, 0.986989, 0.996965, 1.00229, 1.01043, 0.996375, 1.007, 0.997776, 0.995048, 1.00495, 1.01833, 0.999252, 1.01373, 1.011, 0.996367, 1.00173, 0.991268, 1.00856, 1.00306, 1.01224, 1.00015, 0.992951, 1.00718, 0.99293, 0.98342, 1.01277, 1.02613, 0.997611, 1.02211, 0.98181, 1.0121, 0.991658, 1.00087, 0.99343, 0.991558, 0.996981, 0.992462, 0.987005, 1.02474, 0.985205, 1.01427, 0.992941, 0.99821, 1.00455, 1.02411, 0.986061, 0.966785, 1.02313, 0.989094, 1.00305, 0.995727, 0.991664, 1.0043, 1.01325, 0.98087, 1.00755, 0.99471, 1.00054, 1.00393, 0.97883, 0.992005, 1.00623, 0.991906, 0.983059, 1.00167, 0.996017, 1.01246, 1.02022, 1.00287, 0.998432, 1.00577, 0.980595, 1.02462, 0.9974, 1.01457, 1.0187, 1.00403, 1.00126, 0.972855, 1.02139, 1.01797, 0.987956, 1.0197, 0.993358, 1.05209, 1.00348, 1.00897, 1.00249, 1.01446, 1.00174, 1.00056, 1.01282, 1.00872, 0.990325, 1.00767, 1.00342, 1.0005, 0.987127, 0.987018, 0.994082, 0.992574, 0.995491, 0.985694, 1.03422, 0.981649, 0.964216, 0.996182, 0.99282, 0.99508, 0.984008, 1.01073, 0.983506, 0.991949, 0.97468, 1.05289, 1.04331, 0.984127, 0.963873, 0.975191, 1.01443, 0.99985, 0.963938, 0.976987, 0.954416, 0.9774, 0.992482, 0.987154, 0.963083, 1.06086, 1.01043, 1.04159, 1.01179, 1.06121, 1.00682, 0.921584, 0.921479, 1.09223, 0.973252, 0.936375, 1.15527, 1.01934, 0.946867, 0.911457, 0.988987, 0.947983, 0.825057, 1.01037, 0.849373, 1.02905, 1.03409, 0.89352, 1.13445, 0.964732, 0.848513, 1.31081, 1.0481, 1.06453, 0.927543, 1.18736, 1.01833, 0.85754, 0.829877, 0.974477, 2.0449, 0.728909, 1.08125, 0.612528, 0.375174, 1.28631, 0.490023, 0.42877, 1.14339, 0.142923, 0.85754, 1.28631, 0.571693, 0.85754, 1, 1.28631, 3.43016, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.}, + // RefMult: -55#leq Vz #leq-45 + {0.763775, 0.802695, 0.948353, 1.0107, 1.02467, 1.01214, 1.00807, 1.00479, 1.00663, 1.00085, 1.00341, 0.999763, 1.00535, 1.00148, 0.998979, 1.01028, 0.999181, 1.00017, 1.00219, 0.996634, 0.995536, 1.00146, 1.00147, 1.00352, 1.0032, 0.996068, 0.998036, 1.00617, 1.01148, 0.991708, 0.999295, 0.99847, 0.994525, 0.996956, 0.992248, 0.994972, 1.00349, 1.00278, 1.00179, 0.997463, 1.00702, 1.00456, 1.00994, 1.00449, 1.00623, 0.995313, 0.99555, 1.00013, 0.996025, 1.00244, 1.00115, 0.997034, 0.99481, 0.99548, 0.996182, 1.00341, 0.98827, 0.99643, 0.984792, 0.998839, 1.00748, 0.992927, 0.991914, 0.99212, 0.99442, 0.989648, 0.997121, 0.9894, 1.00158, 0.998342, 1.00175, 1.00233, 1.00192, 0.993832, 1.01539, 0.999675, 0.992087, 0.991953, 0.992445, 0.996589, 1.00109, 0.996622, 0.997597, 1.00491, 0.998837, 0.999061, 0.999249, 1.00324, 0.998611, 0.992219, 1.00153, 1.00567, 1.00305, 0.9926, 0.998364, 0.984157, 0.992349, 1.00127, 1.00986, 0.989782, 1.00679, 0.991613, 1.00415, 0.996968, 1.009, 0.989658, 0.991599, 1.01203, 0.993681, 1.00624, 1.00576, 0.995897, 1.00533, 1.00812, 0.994551, 0.999854, 1.01067, 1.01399, 1.00716, 1.02461, 1.00485, 1.00557, 1.01296, 0.989494, 0.998505, 0.996782, 1.00791, 0.987354, 0.995072, 0.974812, 0.997453, 1.00586, 1.00777, 0.991549, 0.9973, 0.998248, 1.00749, 0.979582, 1.00435, 1.01262, 0.989064, 1.01225, 0.990215, 1.00685, 1.00299, 0.98928, 1.01152, 0.998154, 1.00891, 0.999662, 0.996123, 0.99313, 1.00019, 0.986522, 1.00808, 0.999611, 0.980127, 0.999101, 1.01904, 0.992967, 0.996404, 1.00938, 1.00045, 1.00218, 0.978877, 1.00734, 1.00503, 0.997825, 0.992663, 1.00835, 0.997507, 0.99818, 0.995505, 0.996897, 0.979752, 1.01438, 0.996867, 1.01219, 0.995311, 0.990689, 1.00212, 0.994672, 0.985949, 1.01491, 1.01817, 1.00464, 1.00379, 1.00287, 1.00367, 1.00054, 1.00812, 0.999833, 0.993569, 0.990139, 0.992061, 0.981746, 1.0026, 1.00583, 0.992811, 0.979163, 0.98508, 0.991628, 0.984906, 0.997937, 1.00826, 0.99008, 0.985891, 0.997702, 1.00567, 0.99547, 0.994889, 1.01364, 0.99718, 0.996409, 0.997349, 1.02163, 1.00249, 1.00775, 1.00105, 1.00232, 1.01548, 1.00406, 0.997874, 1.00207, 1.00628, 1.00592, 1.0065, 1.01047, 0.998628, 1.01904, 0.994976, 1.00037, 0.999606, 1.00363, 1.00389, 0.989617, 0.982494, 1.00362, 0.994947, 1.0004, 0.99893, 0.9993, 0.984913, 1.00936, 0.985983, 1.01062, 0.984687, 0.998108, 1.01864, 1.00439, 0.994458, 0.998613, 0.999954, 1.02138, 1.00744, 0.990955, 1.01541, 0.986684, 1.00273, 1.02746, 0.984686, 0.984701, 0.995335, 1.00076, 0.993172, 1.00196, 0.996345, 1.01151, 1.00483, 0.986273, 0.995005, 1.0003, 0.986936, 1.01107, 1.00829, 1.01652, 0.995197, 0.99785, 1.01695, 0.981915, 1.00766, 1.00893, 1.00501, 1.00759, 1.0113, 1.01734, 1.00461, 0.986495, 1.01465, 1.00779, 1.02433, 0.996854, 1.00993, 0.998687, 1.00556, 1.00106, 1.02318, 1.00383, 0.995309, 0.983333, 0.970124, 0.984387, 1.01998, 0.974172, 1.00248, 0.987811, 0.994205, 1.00193, 1.01861, 0.985103, 0.997649, 1.01993, 1.00261, 0.990717, 1.02925, 1.00849, 1.08046, 0.999523, 0.993635, 0.956991, 0.998537, 1.04206, 0.929344, 0.966444, 0.965824, 1.002, 0.946865, 0.975747, 0.984297, 1.06834, 1.05668, 1.07272, 1.04386, 1.03392, 0.963775, 0.951797, 0.922965, 1.05282, 0.961762, 0.998625, 1.05406, 1.06623, 1.04444, 0.979088, 0.993418, 1.01373, 1.08234, 1.05934, 0.878, 1.05261, 0.996307, 0.98505, 0.892082, 0.907509, 1.20737, 1.39427, 1.08174, 0.980843, 0.79421, 1.18419, 1.38511, 0.872662, 0.749255, 0.832506, 1.16135, 0.694764, 1.13366, 0.642219, 0.629374, 1.54132, 0.719285, 1.49851, 0.359642, 0.224777, 1.49851, 0.449553, 0.899106, 1.19881, 1, 1.34866, 3.59642, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.}, + // RefMult: -45#leq Vz #leq-35 + {0.859038, 0.926446, 1.00303, 1.02187, 1.02569, 1.01546, 1.00633, 1.00098, 1.00409, 1.00416, 0.995477, 1.00261, 1.00369, 0.997856, 0.99792, 1.00462, 1.00367, 1.00033, 0.996718, 0.999864, 1.0026, 0.999795, 1.00725, 1.00071, 1.00972, 1.00743, 0.998491, 1.00833, 1.00789, 0.993828, 1.00678, 1.00927, 0.999415, 1.00628, 0.993125, 0.997999, 0.999534, 0.996498, 0.995092, 1.00192, 0.994946, 1.00408, 1.00244, 0.996345, 1.00364, 0.995194, 1.00445, 0.99012, 1.00269, 0.997255, 1.00488, 0.997614, 1.0031, 1.00455, 0.998366, 1.00649, 0.987896, 0.997137, 0.998964, 0.992763, 1.00313, 0.994256, 0.997042, 0.997557, 0.998604, 0.990727, 1.0008, 0.997154, 0.99888, 0.989194, 1.00497, 0.991363, 0.995352, 1.0026, 1.01794, 1.00063, 1.00269, 0.997785, 1.0019, 1.00413, 1.00604, 0.994423, 1.00011, 1.00277, 0.996074, 0.997932, 0.999121, 0.992743, 1.00578, 0.996411, 1.01505, 1.00783, 1.00364, 0.99778, 1.00002, 0.990769, 0.998296, 0.994672, 1.0034, 0.989503, 1.00292, 0.99705, 0.994815, 0.997873, 1.01065, 1.00324, 0.9916, 1.00869, 0.994986, 0.993302, 1.00545, 0.989784, 1.00311, 0.989353, 1.00259, 0.997921, 1.00843, 1.00615, 0.994219, 1.01545, 0.999807, 1.00923, 1.01131, 0.999804, 0.99414, 0.99742, 1.00025, 0.988051, 0.991981, 0.974464, 1.01477, 1.00495, 1.00734, 0.993728, 0.991252, 1.00183, 1.01126, 0.987616, 1.00601, 1.01262, 1.01027, 0.994854, 1.00294, 1.01275, 1.01133, 0.998871, 1.00232, 1.01161, 1.00641, 1.00872, 0.992933, 0.983873, 0.99847, 1.001, 1.01105, 0.996636, 0.995606, 0.995545, 1.01047, 0.983054, 1.00053, 0.999748, 0.991998, 1.00105, 1.01024, 1.00656, 0.997251, 0.992222, 1.00962, 1.00294, 1.01601, 1.00635, 1.00617, 1.01882, 0.990488, 0.99791, 0.995447, 1.01021, 0.99457, 0.991089, 0.998709, 0.991479, 1.00179, 1.00238, 1.00505, 0.993268, 0.989154, 0.994174, 1.01065, 0.982883, 0.999033, 0.994758, 0.991384, 0.990755, 0.992048, 0.991251, 0.991582, 1.00867, 0.997306, 0.976618, 0.979566, 0.997573, 1.00458, 0.992238, 0.987991, 0.995435, 0.994758, 1.00483, 1.01453, 1.00344, 0.988944, 1.00886, 0.995118, 1.00053, 0.983454, 1.01408, 1.00272, 1.00952, 1.00634, 1.00979, 0.991499, 1.02171, 1.00316, 0.978963, 1.01236, 0.997518, 1.00312, 1.01701, 1.00688, 0.99149, 1.00059, 0.98655, 0.98282, 1.01411, 1.00247, 0.998129, 0.998978, 0.984109, 1.00523, 1.00595, 1.0042, 1.01506, 0.987793, 1.01793, 0.997132, 1.02071, 0.977699, 0.996896, 1.01494, 0.989516, 1.00037, 1.00064, 0.987772, 1.01151, 1.00797, 1.01091, 1.01721, 1.0077, 1.01614, 1.01102, 0.998999, 0.975548, 1.00793, 1.0083, 0.99811, 0.984602, 0.987265, 1.01186, 1.00548, 1.0077, 0.994722, 1.00594, 0.98498, 0.990103, 0.999178, 1.00404, 0.992742, 0.994575, 0.993224, 0.974478, 1.00603, 1.02148, 0.990069, 1.00633, 1.00287, 1.00872, 0.979817, 1.01117, 1.00099, 0.988358, 0.991552, 0.990776, 1.01183, 1.01471, 1.00477, 0.976009, 1.01973, 0.970485, 1.02043, 1.02088, 0.996852, 0.988351, 0.989256, 0.985252, 1.00157, 1.00781, 0.997118, 0.952468, 0.996051, 0.980611, 1.01094, 1.01295, 1.02244, 0.985359, 1.01447, 0.969129, 1.04172, 0.980026, 0.976523, 0.991104, 0.998908, 0.979369, 0.994018, 0.95644, 0.935945, 1.00468, 1.00742, 0.942245, 1.04722, 1.06646, 0.991604, 1.10327, 1.0349, 1.07755, 1.00582, 0.98373, 0.912713, 1.01473, 0.961692, 0.987673, 0.988908, 1.06865, 1.0114, 0.964965, 0.923377, 0.94172, 0.92776, 1.11273, 0.935065, 1.06232, 0.958442, 0.910619, 0.899646, 0.909793, 1.02205, 1.13695, 1.01408, 1.20223, 1.07736, 1.12208, 1.18442, 1.18681, 0.684194, 0.708383, 1.38033, 0.883117, 1.59511, 1.16883, 0.545455, 0.863137, 0.748052, 0.667904, 0.415584, 0.311688, 0.935065, 1.4026, 1.87013, 1.87013, 1, 2.80519, 3.74026, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.}, + // RefMult: -35#leq Vz #leq-25 + {0.947852, 0.955468, 1.00457, 1.0163, 1.01886, 1.01736, 1.00722, 1.00764, 1.00767, 1.00174, 0.994649, 0.997277, 1.00304, 0.992277, 0.997537, 1.00564, 0.995071, 0.99609, 0.996728, 1.00321, 1.00314, 0.991217, 0.999177, 0.997243, 1.00512, 1.00319, 0.997928, 1.00971, 1.004, 0.995899, 1.0029, 1.00368, 0.997888, 1.00065, 0.98728, 0.998621, 1.00692, 0.9964, 0.995987, 1.00743, 0.999366, 0.995881, 1.0061, 1.00046, 0.998513, 0.990593, 1.00388, 1.00302, 1.00218, 0.992782, 1.00104, 0.999775, 0.998064, 1.0011, 1.00279, 1.00084, 0.995894, 0.997909, 0.996478, 0.993033, 1.0006, 1.00464, 1.00831, 0.995605, 1.00176, 0.992352, 0.994005, 1.00484, 1.00261, 0.994499, 1.00452, 1.00106, 1.00954, 0.999995, 1.01111, 0.996844, 0.998142, 0.987027, 0.994843, 1.00177, 1.00869, 1.00341, 0.999484, 1.00729, 0.994069, 0.992934, 1.00365, 0.996864, 0.993411, 0.999539, 1.01018, 1.00686, 1.01162, 1.00428, 0.996714, 0.99112, 0.998236, 0.998993, 1.00787, 0.992034, 1.00875, 0.997348, 1.00857, 0.992253, 1.00692, 0.993751, 0.995988, 1.00354, 1.00397, 0.997178, 1.00853, 0.98325, 1.00022, 0.989652, 0.995049, 1.00439, 1.01233, 1.01509, 1.00309, 1.00739, 0.99585, 0.992927, 1.01192, 1.00214, 0.992425, 0.999354, 1.01121, 0.986581, 0.993625, 0.988112, 1.00753, 1.00914, 0.98931, 0.992598, 0.984209, 1.01243, 1.01541, 0.989833, 0.997006, 1.00337, 0.994325, 1.00133, 0.992454, 1.00447, 1.0127, 0.991563, 0.994372, 1.00853, 1.00868, 1.0113, 0.992298, 0.997794, 1.00103, 0.994254, 1.01204, 0.990216, 0.99827, 1.00388, 1.01447, 0.994516, 1.00104, 0.996256, 1.00157, 1.00482, 0.993635, 1.00064, 1.00735, 0.99391, 0.998377, 1.01542, 1.0057, 1.0082, 1.01011, 1.00667, 0.987625, 1.00022, 0.98428, 1.00409, 0.997815, 0.996599, 1.01027, 0.993909, 1.00186, 1.01915, 1.01135, 1.00859, 1.00414, 0.982086, 1.00466, 0.993517, 1.00828, 1.00668, 0.989945, 0.990232, 0.986723, 0.987088, 0.993664, 0.993666, 0.991769, 0.978311, 0.982927, 0.994723, 0.993963, 1.0008, 0.991478, 0.984855, 0.98951, 1.01968, 1.00999, 0.9897, 0.993773, 1.01474, 0.98001, 1.00761, 0.986723, 1.00965, 1.01097, 1.01024, 0.997252, 1.00847, 1.00135, 1.0064, 0.998808, 1.00252, 0.998914, 0.99339, 0.982347, 1.00074, 0.996372, 1.02692, 1.00762, 1.00645, 0.997596, 1.00706, 0.997213, 0.994126, 0.998522, 0.986716, 0.999841, 1.00056, 1.01725, 0.993147, 1.00013, 1.01149, 0.998127, 1.00788, 0.993501, 0.999038, 1.0089, 0.995462, 1.00135, 1.00054, 0.994167, 1.02032, 1.01441, 0.984281, 0.999103, 1.00248, 1.00038, 1.00661, 0.982684, 0.983915, 0.99703, 0.993758, 0.994228, 0.989395, 0.994387, 1.00923, 0.987291, 1.01205, 0.995279, 0.991015, 0.975022, 1.01971, 1.00156, 0.98555, 0.985811, 0.989815, 0.988369, 0.964008, 1.0152, 1.00707, 0.999248, 0.986316, 1, 1.01952, 0.990918, 1.00161, 1.01603, 1.00727, 1.01061, 0.986233, 1.00851, 1.00412, 0.994482, 0.991004, 1.01824, 0.999249, 1.0001, 0.984365, 0.978188, 0.990766, 1.02741, 0.980013, 1.00201, 0.988838, 0.976001, 0.965776, 0.99335, 0.968889, 1.0098, 1.02777, 0.999873, 0.984652, 0.988465, 1.03269, 1.03269, 0.969945, 0.971597, 0.976305, 0.977621, 1.02012, 0.982899, 0.968561, 0.994788, 0.994195, 0.983416, 0.967437, 0.978084, 1.05947, 1.03132, 1.07716, 1.03477, 1.044, 0.980445, 0.990295, 0.93055, 1.05502, 0.93751, 0.971816, 1.05751, 1.18726, 1.04212, 0.85722, 0.978957, 1.03281, 0.877135, 1.18811, 1.01213, 1.12113, 1.06763, 0.957044, 0.963467, 0.981646, 1.04099, 1.30495, 1.32477, 1.17576, 0.797871, 1.18244, 1.30756, 0.815242, 1.07052, 1.50542, 1.42226, 0.744497, 1.74628, 0.566745, 0.749363, 1.05106, 0.642312, 0.602167, 0.642312, 0.481734, 1.20433, 0.57808, 0.385387, 1.28462, 1, 1.4452, 1.92693, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.}, + // RefMult: -25#leq Vz #leq-15 + {0.991313, 0.978126, 1.00389, 1.01115, 1.01288, 1.00879, 1.00542, 1.00569, 1.00319, 1.00216, 1.00114, 0.995863, 1.00615, 0.997058, 1.00356, 1.00451, 1.00242, 0.997155, 0.99909, 1.00418, 1.00159, 1.00465, 1.01057, 1.00313, 1.00559, 0.99648, 0.994653, 1.00671, 1.00896, 0.997154, 1.00376, 1.00794, 0.997803, 1.00651, 0.986193, 1.00249, 1.00171, 1.0041, 0.998159, 1.00599, 1.01262, 0.999104, 1.00257, 1.00217, 0.997918, 0.996042, 1.00664, 1.00465, 0.995807, 0.989855, 1.00533, 0.998531, 0.989787, 0.99606, 1.00791, 1.00017, 0.989427, 0.998661, 0.992041, 0.99967, 1.00426, 1.00215, 1.00699, 0.991185, 0.998474, 0.992655, 1.00767, 0.996769, 1.00502, 0.994912, 1.00837, 1.00144, 1.00551, 0.996652, 1.02235, 1.00301, 0.991881, 0.994256, 1.00075, 0.996771, 1.01193, 1.00226, 1.0066, 0.998144, 0.993005, 1.00588, 1.00217, 0.994382, 1.01159, 1.00485, 1.00729, 1.00455, 1.00288, 1.00862, 0.993437, 0.999946, 1.00124, 1.0007, 0.999303, 0.991132, 1.00869, 0.98669, 1.00512, 1.00723, 1.0046, 0.994512, 0.995062, 1.00903, 0.991545, 1.00722, 1.00251, 0.990693, 0.998584, 0.991441, 0.998314, 1.005, 1.01017, 1.00326, 1.00292, 1.01833, 0.998878, 1.01697, 1.00567, 0.998726, 1.00156, 0.992395, 1.01084, 0.992977, 1.00432, 0.989835, 0.996025, 1.00751, 1.00451, 0.993236, 0.993413, 1.00826, 1.01831, 0.979502, 1.00541, 1.00597, 0.99708, 0.995933, 0.99027, 1.00071, 1.00698, 0.99233, 1.0057, 1.00134, 1.01294, 1.01079, 0.997651, 0.973467, 1.00095, 0.99667, 1.01637, 0.979571, 0.990737, 0.990154, 1.00738, 0.996767, 1.01578, 1.00816, 0.996944, 1.00056, 1.00332, 1.00504, 0.993638, 0.996271, 0.999381, 1.0199, 1.00604, 1.00134, 0.990542, 1.00502, 0.994387, 0.993299, 0.993153, 1.00313, 1.00232, 0.99038, 1.01188, 0.997485, 0.997362, 1.01374, 1.01187, 0.999079, 0.998767, 0.984402, 1.00613, 0.98605, 1.00076, 0.992985, 0.998911, 0.985005, 1.00953, 0.988361, 0.994306, 1.01775, 0.993154, 0.986378, 0.983581, 0.998758, 0.989683, 1.0008, 0.978157, 0.983977, 0.989629, 1.00532, 0.996347, 0.993501, 1.0016, 1.02544, 0.997034, 1.00804, 0.995952, 1.01552, 1.01979, 0.989731, 1.00443, 1.00977, 1.00604, 0.995367, 0.998545, 1.00124, 1.0088, 0.989165, 0.996679, 1.01171, 0.990871, 0.990268, 1.00052, 0.999708, 0.989007, 0.999696, 1.00309, 1.00149, 1.0085, 0.994828, 0.989272, 0.998156, 0.996105, 1.00642, 0.999927, 1.01937, 0.987225, 1.00434, 0.981894, 0.99512, 1.01835, 1.00411, 0.9939, 1.00035, 0.993381, 1.0112, 1.00459, 1.00064, 1.00764, 0.990243, 1.00534, 1.01447, 1.00056, 0.980176, 0.988678, 0.996986, 0.987225, 0.991873, 0.985903, 0.9968, 0.995912, 1.00031, 0.991903, 1.01278, 0.983341, 0.990949, 1.00124, 0.998739, 0.983074, 0.980274, 1.00107, 0.984643, 1.02806, 1.01244, 0.99385, 1.0178, 0.998744, 1.00788, 1.00447, 0.996781, 1.00413, 1.00108, 1.00898, 0.976299, 1.00948, 0.993491, 0.984485, 0.985764, 1.01529, 1.00103, 1.01199, 0.98983, 1.0016, 0.986314, 1.01817, 0.981652, 0.997913, 1.01153, 0.986434, 0.982472, 0.998622, 0.978643, 1.0058, 1.00208, 1.01335, 0.966565, 0.971153, 1.01797, 1.04206, 0.964599, 0.973623, 0.964821, 0.985878, 1.0018, 0.972865, 0.977205, 0.986804, 0.993399, 0.993197, 0.962482, 1.02402, 1.0473, 1.01338, 1.01381, 1.07727, 1.05211, 1.00183, 1.0046, 0.930073, 1.0912, 1.02627, 1.02499, 1.04519, 1.01261, 1.06214, 0.919716, 0.966141, 0.846837, 0.915968, 1.00561, 1.1129, 0.875098, 1.01544, 0.93432, 1.02483, 0.957877, 0.752371, 1.28463, 0.781498, 1.10755, 1.24233, 1.29664, 1.14522, 0.902445, 0.720355, 0.91156, 1.22076, 0.929791, 2.59546, 0.492243, 0.861424, 1.31265, 0.787588, 2.46121, 0.492243, 0.0984485, 0.984485, 0.984485, 0.984485, 0.787588, 1, 1, 1.96897, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.}, + // RefMult: -15#leq Vz #leq-5 + {1.00364, 0.99225, 1.00249, 1.00454, 1.00446, 1.00809, 0.99959, 0.997777, 1.00212, 1.00223, 0.995786, 0.998667, 1.00385, 1.00155, 1.00465, 1.00161, 0.999335, 0.994635, 1.00291, 0.998522, 1.001, 1.00159, 1.00184, 0.997463, 1.00474, 1.00226, 0.998604, 1.01027, 1.00331, 0.995053, 1.00314, 1.00222, 1.00664, 1.00224, 0.988648, 1.00107, 0.998111, 0.995906, 0.998831, 1.00193, 1.00284, 0.999266, 1.01054, 1.00385, 0.99568, 0.989506, 1.00396, 0.995842, 0.996766, 0.995937, 1.0104, 1.0063, 0.992567, 0.997381, 1.00228, 1.00211, 0.985085, 0.996404, 0.991995, 0.997266, 1.00268, 1.00048, 0.990083, 0.995027, 1.00131, 0.995812, 0.992749, 0.991835, 1.00041, 0.995913, 1.00286, 0.996302, 0.997848, 1.0106, 1.0089, 1.00325, 0.992498, 0.988186, 0.994637, 0.995295, 1.00063, 0.994626, 0.998446, 1.0041, 0.992978, 0.99086, 0.995872, 0.991866, 1.00053, 0.98805, 1.00471, 1.005, 0.99861, 0.994934, 0.993836, 0.988657, 0.998134, 0.987263, 0.995103, 0.990152, 1.0139, 1.00119, 1.00464, 0.993663, 1.00493, 0.992919, 0.984432, 1.00093, 0.997883, 0.998038, 1.00671, 0.98956, 1.01634, 0.990505, 0.994899, 1.00639, 1.00952, 1.01226, 1.00268, 1.0138, 1.00735, 1.00656, 1.01095, 0.99731, 0.992506, 1.00002, 1.00828, 0.993692, 1.00705, 0.989658, 1.01244, 1.01885, 0.990732, 1.00323, 0.990283, 0.997844, 1.01704, 0.99464, 0.989181, 1.02057, 1.00151, 1.00293, 0.99789, 1.00953, 1.01165, 0.985903, 1.00473, 1.01219, 1.00875, 1.01251, 0.997928, 0.994551, 0.999448, 0.994014, 1.02817, 0.985307, 0.998522, 0.994792, 1.00625, 0.997031, 0.987783, 0.995481, 0.997119, 1.0089, 0.999082, 1.00231, 1.00506, 1.00108, 1.00228, 1.00971, 1.02154, 1.00054, 0.996254, 1.00548, 0.985007, 1.00017, 0.995509, 0.988284, 0.996622, 1.00252, 1.00159, 0.985729, 1.00202, 1.01061, 1.01932, 0.998356, 0.984627, 0.985101, 0.996653, 0.982118, 1.00169, 0.998643, 0.981927, 0.991708, 0.988895, 0.994826, 0.987542, 1.00062, 0.993731, 0.994477, 0.990653, 0.988237, 0.989232, 0.998327, 0.991271, 0.984752, 0.995693, 1.00894, 1.00113, 0.99631, 0.998556, 1.00576, 0.989458, 1.00542, 1.00722, 1.00292, 1.01459, 0.997969, 1.00247, 1.00408, 1.00095, 0.992928, 0.990149, 0.988414, 1.00696, 0.985814, 1.00329, 1.00196, 1.008, 1.01576, 1.00418, 0.997644, 0.99427, 1.00163, 1.0084, 0.995358, 1.00103, 0.986822, 0.989376, 0.99411, 0.992316, 1.00723, 0.994574, 1.01724, 0.986295, 1.01443, 0.973998, 0.981409, 1.01653, 0.981151, 1.00113, 0.994682, 1.0147, 0.99529, 1.01432, 0.989072, 1.00824, 0.986254, 1.0012, 1.01841, 0.989378, 0.988778, 0.991816, 1.00083, 1.00261, 0.987928, 0.987702, 1.0135, 0.994846, 1.0013, 1.0031, 1.00886, 1.00501, 1.00535, 1.01434, 1.01939, 0.987295, 0.999088, 0.988634, 0.979316, 1.01616, 1.00511, 0.993824, 0.999483, 1.02388, 1.00893, 1.00929, 1.01029, 1.01291, 1.00322, 0.992229, 1.00645, 1.01308, 0.977594, 0.985878, 1.01244, 1.00125, 1.0063, 1.01461, 1.00927, 0.997167, 0.995891, 1.002, 0.996598, 1.01684, 0.973748, 0.962125, 0.9793, 1.00797, 1.00144, 0.992356, 0.998845, 0.997946, 0.991258, 0.97835, 1.00105, 1.03561, 0.973964, 0.99974, 0.995695, 1.00275, 0.999699, 0.950606, 0.99428, 0.96037, 0.996519, 0.9933, 0.969318, 1.01886, 1.02612, 1.05055, 1.02652, 1.05799, 1.07606, 1.00582, 0.950138, 0.964528, 0.997396, 0.963083, 1.10206, 1.06772, 1.17563, 1.01032, 0.873057, 0.971429, 0.883619, 0.893957, 1.02178, 1.10198, 1.05075, 0.855224, 1.05253, 1.01196, 0.833879, 0.908991, 1.12184, 0.983253, 1.08657, 1.05578, 1.58192, 1.2342, 0.996023, 0.64958, 0.622514, 1.62509, 1.12883, 1.6047, 0.766171, 0.348608, 1.08657, 0.796818, 0.996023, 0.569156, 0.249006, 0.996023, 0.426867, 0.398409, 1, 1, 1.49403, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.}, + // RefMult: -5#leq Vz #leq5 + {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.}, + // RefMult: 5#leq Vz #leq15 + {1.02944, 1.01057, 1.01416, 1.00855, 1.01173, 1.00484, 1.0015, 1.0012, 1.00591, 0.998822, 0.999612, 1.00553, 1.00414, 0.999016, 1.00188, 1.00512, 1.00106, 0.99911, 1.00127, 1.00174, 1.00102, 0.999259, 1.00848, 0.995334, 1.00897, 1.00636, 1.00155, 1.00408, 1.00702, 0.998776, 1.00219, 1.00042, 0.993286, 0.998725, 0.988076, 1.0048, 1.00241, 0.995446, 1.00034, 0.99966, 1.003, 0.999957, 1.00646, 1.00612, 1.00197, 0.993321, 0.999212, 0.997008, 0.994497, 0.999255, 1.00502, 1.00077, 0.993074, 1.00101, 1.00431, 1.00585, 0.985864, 1.00287, 0.999142, 0.996845, 1.00049, 0.998952, 1.00072, 0.995771, 0.994716, 0.988418, 1.00221, 0.98907, 1.00281, 0.99897, 1.00164, 0.99267, 1.00739, 1.00249, 1.014, 0.997198, 0.989921, 1.00353, 0.984308, 0.995449, 1.003, 0.991287, 1.0037, 1.00259, 0.994111, 0.996999, 1.00136, 0.99454, 0.999759, 0.992521, 1.00543, 1.00354, 1.00647, 1.00701, 0.998678, 0.992924, 1.00238, 1.00143, 1.01062, 0.981917, 1.01407, 0.986904, 1.00481, 1.01321, 1.0051, 0.999218, 0.992738, 0.999731, 0.993884, 0.996381, 1.0032, 0.988572, 1.00706, 0.997437, 1.00401, 0.997959, 1.01379, 1.00551, 1.00259, 1.01476, 1.00566, 1.0042, 1.01268, 0.988704, 0.994476, 0.998222, 1.00257, 0.988364, 1.00368, 0.988236, 1.0212, 1.00779, 1.00076, 0.991066, 0.984522, 0.99921, 1.016, 0.986889, 0.996464, 1.01116, 0.981396, 1.00771, 1.00289, 1.02274, 1.00163, 0.97905, 1.01025, 1.00673, 1.00835, 1.00918, 0.986741, 0.98703, 1.00363, 0.998324, 1.00405, 0.98871, 0.989749, 1.00746, 1.01569, 0.999679, 1.00263, 0.988897, 1.00224, 0.990725, 1.00291, 0.989531, 0.991336, 1.00188, 0.998437, 1.00283, 1.01561, 1.0048, 1.00549, 1.01073, 0.991957, 1.01569, 0.98901, 1.01229, 1.00632, 0.987953, 1.00055, 0.990538, 0.994975, 1.0063, 1.00747, 0.990167, 0.999683, 0.995489, 0.996667, 0.994075, 1.00042, 1.0052, 0.988533, 0.999861, 0.994411, 0.995994, 1.0082, 0.997669, 0.99151, 0.978465, 0.979394, 1.00576, 1.01038, 1.00692, 1.00625, 0.988575, 0.996465, 1.01897, 1.00391, 0.988071, 1.00402, 1.01815, 0.978241, 0.99488, 0.989519, 1.00783, 0.995207, 0.999392, 1.00805, 1.00364, 0.988616, 0.993406, 1.00575, 1.0075, 1.00289, 1.00274, 0.999722, 0.993857, 1.0001, 0.998911, 1.00819, 1.00344, 0.986053, 0.973378, 1.01135, 0.990426, 0.981061, 0.99746, 0.991198, 1.00075, 0.980833, 1.00674, 1.00383, 1.02124, 0.990147, 1.01488, 0.993848, 1.00074, 1.02567, 1.00802, 0.986351, 0.998379, 0.99581, 0.998749, 1.00826, 0.991725, 1.00918, 0.990299, 1.0031, 1.00432, 0.984649, 0.983094, 0.988852, 1.0212, 0.983937, 0.984396, 1.00017, 0.991887, 0.997451, 1.00845, 0.997754, 1.01748, 0.994548, 0.999544, 0.991554, 1.01307, 0.978692, 0.992189, 1.00937, 0.987453, 1.01589, 1.00777, 0.995831, 1.00645, 0.997754, 1.01281, 0.999499, 1.00853, 1.00593, 1.00621, 0.996947, 0.977764, 1.01132, 0.996713, 0.988445, 0.996964, 0.980626, 0.981241, 0.991542, 0.983563, 0.995233, 1.00371, 1.00362, 0.991274, 1.01682, 0.992313, 0.976698, 0.972577, 0.963431, 0.997483, 0.990793, 0.987228, 0.999419, 1.01104, 0.981108, 0.996996, 1.05162, 0.988532, 0.968678, 0.984026, 0.982807, 0.98728, 0.986648, 0.990784, 0.944929, 1.00653, 0.988408, 0.975971, 1.00286, 1.04433, 0.990204, 0.989035, 1.00815, 1.02907, 0.988506, 0.975316, 0.938533, 1.0029, 0.881182, 0.956549, 1.02578, 1.01002, 0.948992, 0.911283, 0.894131, 0.939555, 0.863422, 0.904758, 0.889128, 0.881248, 0.897489, 1.09928, 0.910009, 0.802742, 0.800201, 1.29965, 0.970779, 1.0393, 0.77629, 0.977885, 1.41929, 0.782567, 0.807563, 0.995994, 1.71532, 0.564397, 2.22183, 0.585879, 0.435748, 0.995994, 0.885328, 0.497997, 0.442664, 0.110666, 0.829995, 2.98798, 0.995994, 0.796795, 1, 2.98798, 3.98398, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.}, + // RefMult: 15#leq Vz #leq25 + {1.03665, 1.01236, 1.02157, 1.01983, 1.0154, 1.01248, 1.00785, 1.00098, 1.00552, 1.00218, 0.996968, 1.00106, 1.00602, 0.998066, 1.00074, 1.00174, 0.997243, 0.99969, 0.998319, 0.993505, 1.00381, 0.999199, 1.00345, 0.997368, 1.00232, 0.997885, 1.00013, 1.0014, 0.99881, 0.999181, 1.0082, 1.00035, 0.995295, 0.998908, 0.987021, 1.00411, 1.00035, 1.001, 1.00024, 1.00793, 1.00179, 0.999324, 1.00578, 0.997403, 0.996076, 0.996838, 1.00348, 0.994179, 0.997231, 0.996898, 0.999297, 0.996441, 0.997057, 1.00023, 1.00649, 0.999441, 0.991136, 1.0005, 0.99947, 0.996829, 1.0005, 1.00106, 0.998085, 1.00702, 1.00545, 0.992503, 1.00319, 0.988404, 0.998715, 0.997951, 1.00082, 1.00955, 1.00094, 1.00095, 1.01005, 0.998281, 0.993372, 0.99174, 0.989034, 1.00149, 0.996999, 0.991578, 1.00709, 1.00266, 0.99261, 0.998885, 1.00038, 0.990776, 1.00654, 0.989051, 1.00844, 1.00926, 1.00555, 1.00107, 1.0009, 0.99113, 0.998395, 0.995901, 1.00617, 0.991357, 1.01433, 0.998994, 0.997588, 1.00838, 1.00387, 0.999647, 0.998505, 1.01221, 0.9969, 1.00385, 0.996641, 0.985488, 1.00339, 1.00064, 0.998587, 1.00043, 1.00599, 1.00392, 1.00568, 1.0123, 0.994517, 0.998502, 1.01282, 0.990674, 1.00105, 0.991099, 1.00292, 0.977945, 0.994828, 0.984391, 1.00579, 1.01474, 0.998163, 0.98257, 0.992307, 0.996305, 1.0113, 0.987135, 0.998302, 1.01835, 0.992883, 0.998586, 0.992237, 1.01275, 1.00789, 0.994641, 0.997543, 1.01368, 1.00901, 0.996291, 0.992963, 0.984158, 1.0072, 0.987857, 1.01394, 0.984075, 0.998846, 1.00546, 1.00398, 0.983036, 1.00019, 1.00452, 0.985273, 0.998414, 1.00215, 0.998371, 0.996485, 0.994192, 0.997142, 0.997497, 1.00736, 1.00596, 0.996096, 1.00998, 0.981901, 1.0037, 0.998834, 1.00626, 1.00063, 0.997891, 1.00937, 0.994096, 1.00053, 1.01109, 1.01569, 0.998013, 1.00558, 1.00154, 1.01469, 0.99294, 1.00061, 1.00119, 0.984431, 0.992037, 0.996539, 0.988384, 0.995994, 1.02108, 0.989812, 0.986343, 0.982782, 0.99063, 1.00377, 0.98807, 0.981635, 1.0017, 1.0062, 1.00399, 1.0105, 0.990084, 1.00058, 1.00757, 1.00471, 1.00837, 0.985519, 1.00633, 1.00031, 0.990572, 0.993328, 1.00703, 0.99969, 0.996584, 0.997497, 1.00067, 1.01177, 0.999162, 0.992471, 1.01962, 1.01454, 1.01845, 1.00908, 1.00287, 1.0018, 0.99274, 1.00651, 1.00783, 0.996748, 0.997401, 0.998895, 1.0033, 0.989168, 1.00593, 1.01393, 1.00202, 0.990454, 1.01852, 0.994476, 0.995637, 1.02373, 0.988196, 1.00705, 1.00229, 1.00082, 1.01583, 1.01467, 1.00205, 1.01448, 0.999039, 0.996436, 1.0053, 1.00013, 0.994269, 1.00261, 0.993614, 1.007, 1.0009, 0.985032, 1.01277, 0.993297, 1.01272, 0.999719, 1.00493, 1.00268, 0.991695, 0.981773, 1.00789, 0.994412, 0.991279, 1.00174, 0.97735, 1.00917, 1.01658, 1.00851, 1.01141, 0.986207, 1.01469, 0.990961, 1.00232, 1.01638, 1.03318, 0.995706, 0.993334, 1.01876, 1.00988, 0.977852, 0.999021, 1.01414, 0.984951, 1.01815, 1.01994, 1.00506, 0.980156, 1.01055, 0.980172, 1.03875, 1.0033, 0.974957, 0.99745, 0.991211, 1.00069, 1.01798, 1.0202, 0.998541, 0.98994, 0.985278, 1.01028, 1.04819, 0.995573, 0.995795, 0.968811, 0.966086, 1.01141, 1.00848, 0.960416, 0.943675, 1.00111, 1.0253, 1.06222, 1.01084, 1.0437, 1.01047, 1.02481, 1.00655, 1.01966, 0.958253, 1.01791, 1.00923, 1.01243, 1.01114, 1.0347, 1.08342, 1.12871, 1.10278, 1.04496, 0.900502, 0.939964, 0.91138, 0.879654, 0.99753, 0.998748, 1.08212, 1.05387, 1.01511, 1.01123, 0.817835, 1.28288, 1.05142, 1.16043, 1.08555, 1.06179, 1.40098, 0.737357, 0.756264, 1.36548, 1.79279, 0.879654, 1.67713, 0.54619, 0.327714, 1.31086, 0.786514, 0.491571, 1.31086, 0.196629, 0.491571, 0.983143, 0.327714, 0.983143, 1, 1.47471, 1.96629, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.}, + // RefMult: 25#leq Vz #leq35 + {1.03202, 1.00531, 1.03346, 1.03376, 1.02761, 1.02028, 1.00905, 1.00375, 1.0068, 1.00146, 0.994488, 0.99852, 1.00135, 0.997742, 0.998111, 1.00409, 0.999186, 0.995867, 0.998077, 0.997266, 1.00348, 0.997165, 0.999237, 0.998431, 1.00344, 0.995996, 1.00023, 1.00462, 1.00701, 0.995606, 1.0131, 1.00486, 0.997089, 0.998859, 0.986889, 0.999835, 1.00165, 0.993116, 1.00204, 1.00496, 1.00579, 0.992024, 1.00597, 0.998093, 1.00457, 1.00489, 1.00375, 0.995218, 1.00369, 0.99915, 1.00083, 1.00019, 0.99745, 1.00193, 1.00605, 1.00115, 0.997268, 1.00466, 0.993651, 1.00154, 1.00232, 0.996655, 0.994465, 0.990792, 0.999272, 0.99085, 0.998622, 0.999023, 0.995321, 1.00001, 1.00712, 1.00486, 1.00232, 0.990781, 1.01299, 1.00351, 0.993533, 0.99333, 0.995532, 0.996297, 1.01039, 0.995746, 1.00516, 0.996467, 0.993509, 0.990191, 0.991544, 0.998639, 1.00324, 0.995328, 1.01476, 1.01142, 1.01603, 1.00546, 0.997721, 0.998847, 0.990461, 0.990981, 1.00768, 0.988123, 0.998425, 0.991645, 0.997997, 1.01036, 1.00709, 0.997772, 1.00824, 1.01098, 0.991272, 0.995088, 1.00314, 0.995008, 1.00151, 0.98559, 0.992647, 1.00566, 1.01422, 1.01016, 1.01552, 1.01381, 0.998738, 1.01527, 1.01104, 0.987798, 0.999886, 0.996229, 1.00446, 0.988463, 0.999229, 0.983582, 1.01063, 1.00816, 0.996176, 0.985315, 0.994738, 1.01036, 1.01452, 0.992354, 0.995198, 0.997645, 0.987814, 1.0055, 1.00485, 1.01489, 1.01155, 0.998259, 0.993749, 1.00638, 1.00301, 1.00098, 0.998948, 1.00298, 1.01409, 0.986065, 1.01745, 0.998093, 0.985403, 0.993197, 1.00926, 0.989492, 1.00564, 0.999345, 0.995947, 0.998061, 0.994698, 0.99, 0.997033, 0.992249, 1.00803, 1.00327, 0.998934, 1.00071, 1.0063, 1.01505, 0.976327, 1.01797, 0.997763, 1.0059, 1.00298, 0.983812, 1.00553, 0.986314, 0.997983, 1.00693, 1.01624, 0.994017, 1.00055, 0.985384, 1.00458, 0.99983, 1.0071, 0.992875, 0.989367, 0.995696, 0.993727, 0.992338, 0.996453, 0.99729, 0.981128, 0.986119, 0.996383, 0.99496, 0.995965, 1.0002, 0.999751, 1.00001, 0.985197, 0.99814, 1.01289, 0.994592, 0.996118, 1.01603, 0.989193, 1.00264, 0.986638, 1.00851, 0.998478, 0.998064, 1.00571, 0.99597, 1.00287, 0.990421, 1.01013, 1.0199, 0.993172, 0.988438, 0.997396, 1.00474, 0.990591, 1.01066, 1.00739, 0.998918, 0.999672, 1.01286, 0.991628, 0.994214, 0.995732, 1.00098, 0.990078, 1.00859, 1.00012, 0.992877, 0.995788, 1.01524, 1.00091, 0.99639, 0.989072, 0.995432, 1.03168, 0.994972, 1.00691, 0.994489, 1.00065, 1.02419, 1.01329, 0.984533, 1.0152, 1.00299, 0.991008, 1.01062, 0.973253, 0.993002, 0.998367, 0.999446, 0.993739, 0.998987, 1.00243, 1.01077, 0.99686, 1.01153, 1.00149, 0.997231, 0.992151, 0.998395, 1.00726, 1.00256, 0.997426, 0.983897, 1.01077, 0.981273, 1.01553, 0.993346, 0.998944, 0.984924, 0.996688, 1.00995, 0.995739, 1.01571, 1.00494, 1.00493, 0.97672, 1.00047, 1.0029, 0.98481, 1.02057, 1.0004, 1.0197, 1.0042, 1.00737, 1.00559, 0.993719, 0.994725, 1.02089, 1.00667, 1.01508, 0.991197, 0.994529, 0.973923, 0.9777, 1.00002, 1.00252, 1.01634, 0.997681, 0.987783, 0.985762, 1.01397, 1.0155, 0.977103, 1.00834, 0.95926, 0.985444, 0.998506, 0.977483, 0.945214, 0.956836, 0.972447, 0.980599, 0.974347, 1.02293, 1.05535, 1.00899, 1.0001, 1.01512, 1.04321, 0.933495, 0.931075, 0.967045, 1.06441, 0.918405, 1.03276, 1.09266, 1.03136, 0.994624, 0.972743, 1.00305, 0.907281, 0.977171, 1.09524, 1.03119, 1.04922, 0.979704, 0.961782, 0.932415, 0.919226, 0.852901, 1.25501, 0.914287, 0.865604, 1.01949, 0.895453, 1.07493, 0.813816, 0.739833, 1.14498, 1.29632, 0.817515, 1.11567, 0.801485, 0.480891, 1.28238, 1.09918, 0.961782, 0.769426, 0.320594, 0.961782, 0.577069, 1.92356, 0.961782, 1, 1.44267, 1.92356, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.}, + // RefMult: 35#leq Vz #leq45 + {0.993654, 1.0077, 1.04069, 1.03945, 1.03292, 1.01993, 1.01184, 1.00332, 1.00599, 1.00282, 0.994614, 0.996349, 1.00564, 0.997809, 1.00187, 1.00211, 1.00489, 0.996006, 1.00106, 1.0019, 1.00035, 0.995991, 0.99781, 0.999785, 1.00106, 1.0011, 1.00171, 1.00426, 1.00744, 0.991196, 1.0077, 1.00346, 1.0022, 0.998762, 0.992997, 1.00086, 1.00297, 0.994337, 0.993548, 0.997708, 0.999899, 1.00486, 1.01459, 1.00402, 0.999533, 0.99786, 0.997801, 0.999595, 1.00128, 1.00041, 1.00519, 0.9985, 0.99545, 0.998806, 0.996592, 0.995956, 0.984761, 1.00129, 0.993216, 0.997361, 1.01031, 0.995742, 0.991838, 0.987963, 0.999751, 0.99894, 1.00303, 0.985822, 1.00795, 0.99693, 1.00532, 1.00113, 1.00546, 0.988253, 1.01229, 0.999385, 0.998171, 0.996006, 0.993227, 0.998177, 0.999143, 0.999225, 1.00824, 1.01275, 1.00018, 1.00222, 1.00387, 0.9895, 1.00656, 0.99494, 1.00303, 0.999174, 1.00888, 1.00892, 0.994111, 0.98831, 0.984161, 0.997622, 0.994266, 0.99265, 1.01343, 0.997965, 1.00459, 0.999825, 0.997652, 0.99451, 0.993911, 1.01026, 0.99154, 0.999726, 1.00653, 0.999285, 1.00738, 0.995492, 0.994101, 1.00367, 1.01435, 1.00207, 1.00169, 1.01853, 1.00274, 1.01041, 1.00494, 1.00595, 0.989504, 0.999102, 1.00663, 0.984662, 0.994198, 0.985248, 0.995745, 1.00973, 0.995022, 0.981463, 0.985591, 0.999552, 1.01482, 0.9932, 1.00339, 1.00941, 1.00629, 0.998356, 1.00371, 1.00974, 1.01449, 0.984541, 1.01217, 1.00795, 1.00845, 1.00834, 1.00044, 0.989748, 0.998777, 0.99047, 1.00698, 0.999409, 0.993895, 1.00654, 1.02486, 0.975222, 1.00395, 0.995941, 0.983975, 0.992821, 1.0036, 1.00382, 1.00062, 0.983346, 0.996827, 0.994146, 1.01496, 1.01663, 1.00928, 0.999544, 0.994495, 1.00709, 0.992571, 0.996818, 1.00298, 0.996435, 0.990665, 0.983894, 0.985947, 1.02083, 0.997984, 1.00181, 1.00036, 0.993398, 1.00846, 0.976647, 0.994287, 1.0083, 0.997277, 1.00975, 0.987182, 0.976478, 0.991467, 1.01591, 0.988881, 0.980808, 0.981068, 0.996139, 0.999829, 1.01217, 0.992051, 0.995976, 0.996426, 0.994944, 1.00051, 0.983891, 1.01739, 1.01857, 0.99341, 1.00881, 1.00488, 1.00652, 1.01155, 1.00339, 0.994369, 1.00439, 0.986435, 0.998339, 0.998244, 1.00862, 1.00245, 0.998922, 0.997665, 1.00926, 0.99884, 1.03114, 1.00356, 1.01113, 0.994401, 1.02143, 1.00434, 0.998653, 0.992127, 0.991252, 0.985283, 0.993747, 0.992378, 1.01039, 0.989653, 0.998729, 0.98503, 1.019, 0.988911, 0.992702, 1.02241, 0.987886, 0.9986, 0.998814, 1.00574, 1.0197, 1.00749, 0.984817, 1.03234, 1.01163, 0.994123, 1.02492, 0.993054, 0.985689, 0.987958, 0.991286, 0.990943, 1.00257, 1.00166, 1.00437, 0.996842, 1.01031, 0.987706, 1.01303, 0.978023, 1.00672, 0.999827, 1.00522, 0.98972, 0.986233, 1.0086, 0.985315, 1.00278, 0.997939, 0.991853, 1.01476, 1.00841, 1.02768, 1.00752, 1.02227, 1.00826, 0.986266, 1.00808, 0.992875, 1.00866, 0.992234, 1.0227, 1.00797, 1.01589, 0.996489, 1.00989, 0.985152, 0.98336, 0.992808, 1.02608, 0.978027, 1.01953, 0.999984, 0.964519, 0.958803, 0.994007, 1.01109, 0.985725, 0.978867, 0.983859, 0.979524, 0.998067, 0.993824, 1.0388, 0.976386, 0.93855, 0.952482, 0.994231, 0.998547, 0.971244, 0.977865, 0.956259, 1.01216, 0.984245, 0.961177, 0.994358, 1.07466, 1.0036, 1.08025, 1.02419, 1.07113, 1.01006, 0.988319, 0.938829, 0.982516, 0.967094, 1.02393, 0.988031, 1.09291, 0.925892, 0.976452, 0.94138, 0.891491, 0.962766, 0.952452, 0.946088, 0.927611, 0.863958, 1.02157, 1.1842, 0.915489, 0.942469, 1.29573, 1.28211, 1.049, 0.867008, 0.915489, 1.51855, 0.769265, 0.822744, 0.68562, 0.963524, 0.792576, 1.28766, 0.466221, 0.502085, 1.24326, 0.497303, 0.66603, 0.932443, 0.233111, 1.16555, 0.932443, 0.266412, 1.86489, 1, 2.79733, 1.86489, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.}, + // RefMult: 45#leq Vz #leq55 + {0.951678, 0.920746, 1.0098, 1.03182, 1.03362, 1.01994, 1.01171, 1.01002, 1.01411, 1.01005, 0.999964, 1.00302, 1.00853, 0.999283, 0.998655, 1.00307, 0.997575, 0.992274, 0.990959, 0.9975, 0.994732, 1.00112, 1.00425, 0.990347, 0.999861, 0.997931, 0.998219, 1.00059, 1.0079, 0.993563, 1.00041, 0.994218, 0.995638, 0.999868, 0.988748, 0.993124, 1.00773, 0.987459, 1.00143, 0.998607, 1.00125, 0.997007, 1.01355, 1.00346, 0.998548, 0.996823, 0.999106, 0.996599, 0.995482, 0.994586, 1.00117, 1.00461, 0.997673, 1.00085, 1.00332, 0.999003, 0.991813, 0.992903, 0.996845, 0.995797, 1.0033, 1.00336, 1.0007, 0.992065, 0.999281, 0.987309, 1.00058, 0.996024, 1.00239, 1.00017, 1.00371, 0.993959, 1.00573, 1.00239, 1.00884, 0.998976, 0.99158, 0.993212, 0.990671, 0.99797, 1.00611, 1.00608, 1.00761, 1.00499, 0.999831, 0.992135, 0.996366, 0.994853, 1.00322, 0.991534, 1.00844, 1.005, 1.00771, 0.997959, 0.997193, 0.98568, 0.983026, 0.996115, 1.00971, 0.988193, 1.00186, 1.00014, 1.00501, 1.00641, 0.999221, 0.99579, 1.00671, 1.01249, 0.994699, 0.995704, 1.00512, 0.995638, 1.0003, 0.997272, 1.00423, 1.00757, 1.01473, 1.00628, 1.00096, 1.01072, 0.994754, 1.00104, 1.01395, 0.994021, 0.998764, 0.983641, 1.01288, 0.977061, 0.995392, 0.991161, 1.00717, 1.00414, 1.00192, 0.990151, 0.997122, 1.0146, 1.00289, 0.985434, 0.996578, 1.00339, 0.987775, 0.997464, 0.991409, 1.0098, 1.00678, 0.985025, 1.00507, 1.00709, 1.00751, 0.995932, 0.992548, 0.993373, 0.997505, 0.992262, 1.00856, 0.997562, 0.996855, 1.00262, 1.00645, 0.998938, 0.99673, 1.00764, 0.984144, 0.999155, 0.998952, 0.993758, 0.999875, 1.00843, 0.999933, 1.00386, 1.00529, 1.01386, 0.99742, 1.00013, 0.977683, 1.0119, 0.993252, 0.993178, 0.995493, 0.987002, 1.00611, 0.992537, 0.997009, 1.00664, 1.00775, 0.999246, 1.00223, 0.985755, 1.00382, 0.991143, 1.00418, 1.00167, 0.990345, 0.989128, 0.995347, 0.99134, 1.00208, 1.0041, 0.988203, 0.994289, 0.989345, 0.999001, 0.991055, 0.997604, 1.00471, 0.999765, 1.00136, 1.00359, 1.00362, 0.98991, 1.002, 1.01055, 1.00129, 1.00756, 0.99442, 1.00989, 1.00187, 0.986706, 1.00277, 1.01725, 1.00119, 1.00519, 0.994269, 1.01084, 1.00154, 1.01317, 1.00432, 1.0108, 1.00553, 0.991657, 1.01558, 1.00846, 0.987795, 1.01068, 1.00238, 0.998293, 0.992484, 0.999436, 0.993741, 1.01559, 1.01225, 0.991776, 0.990714, 1.00957, 0.993283, 1.01224, 0.994438, 0.992962, 1.00711, 0.997272, 0.998753, 1.01183, 0.995486, 1.0156, 1.00851, 0.988573, 1.01949, 0.982729, 1.02003, 1.01526, 1.00593, 0.987338, 0.995829, 1.00859, 0.983547, 1.00829, 1.00216, 1.03445, 1.00195, 1.00509, 1.00044, 1.00668, 0.974312, 1.01281, 1.00741, 1.01388, 0.989712, 1.00893, 1.01362, 0.983257, 1.00658, 1.01171, 0.989925, 1.0081, 0.985454, 1.01672, 1.01724, 1.01356, 1.01265, 1.00498, 1.01596, 0.998131, 1.02889, 1.00247, 0.999125, 0.988441, 1.01232, 1.00265, 1.03912, 0.99933, 0.988889, 1.01201, 1.01839, 0.984076, 1.01141, 1.01349, 0.993837, 0.995419, 1.01872, 0.987092, 1.02874, 1.00254, 0.979156, 0.987895, 1.01764, 0.997217, 1.03697, 0.982158, 1.00501, 0.987541, 0.973303, 1.06749, 0.983844, 1.02066, 0.996014, 1.00616, 0.966244, 0.971487, 1.0416, 1.03848, 1.00177, 0.964165, 1.03959, 1.03072, 0.941135, 0.974359, 0.906182, 0.990453, 0.95878, 1.06678, 0.99171, 1.15241, 1.07356, 0.857664, 0.885115, 0.979375, 0.998531, 1.05606, 0.855203, 1.03671, 1.02081, 0.850646, 0.896319, 0.80002, 0.968436, 1.47548, 0.811959, 1.11267, 0.833419, 1.0522, 1.50265, 1.05638, 0.814835, 0.861845, 1.32314, 0.564349, 1.85666, 0.746932, 0.570385, 1.34448, 0.896319, 0.373466, 0.717055, 0.0746932, 1.1204, 0.896319, 0.597546, 1.19509, 1, 0.896319, 3.58528, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.}, + // RefMult: 55#leq Vz #leq65 + {0.963833, 0.915867, 1.01716, 1.04193, 1.04475, 1.02979, 1.02132, 1.02138, 1.02246, 1.01087, 1.00771, 1.00945, 1.00907, 1.00096, 1.00688, 1.00883, 1.00627, 0.995825, 1.00085, 1.00632, 1.00001, 1.00646, 1.00412, 1.00082, 1.00054, 0.996722, 0.999301, 1.0002, 0.998173, 0.996268, 1.00172, 1.0063, 0.999716, 0.999942, 0.997502, 0.993842, 1.00124, 0.995349, 1.00034, 1.00591, 0.994868, 0.993844, 1.00428, 0.996008, 0.997672, 0.999978, 1.00126, 0.996242, 1.01171, 0.993263, 1.00072, 0.999629, 0.9949, 1.00295, 1.00233, 0.988523, 0.989237, 1.00315, 0.998178, 0.994571, 0.992189, 1.00301, 1.00044, 0.993491, 0.998439, 1.00451, 0.996977, 0.992043, 1.00061, 0.993024, 1.00769, 0.998623, 1.00708, 0.999301, 1.0213, 0.999674, 0.988599, 0.995378, 0.991388, 0.984038, 1.00771, 0.992637, 1.01087, 0.998957, 1.00402, 1.00018, 0.995622, 0.995758, 1.00158, 0.988475, 1.00218, 0.997268, 1.00597, 1.00672, 1.0037, 0.995154, 1.00445, 0.99781, 1.00924, 0.980764, 1.00668, 1.0027, 1.00454, 1.00858, 1.00282, 0.994035, 0.983935, 1.00695, 0.993255, 0.991727, 1.00585, 0.98345, 1.00166, 0.992036, 0.99897, 0.999073, 0.999522, 1.02305, 1.00494, 1.01888, 0.998647, 0.999786, 1.00347, 0.985032, 1.00055, 0.996196, 1.00026, 0.994961, 0.996836, 0.984775, 1.01236, 1.01823, 1.00164, 0.993296, 0.98739, 1.00655, 1.01697, 0.990972, 0.998322, 1.00021, 0.999162, 0.995817, 1.00381, 1.01797, 1.01285, 0.981147, 1.00124, 1.01368, 1.00302, 1.01132, 0.99447, 0.989202, 0.998218, 0.989424, 1.01847, 0.992279, 0.993578, 0.983802, 1.00114, 0.994777, 0.992678, 0.977791, 0.999794, 0.98811, 0.991917, 0.983716, 1.00017, 0.991955, 1.00796, 0.996104, 1.01092, 1.00088, 1.00073, 1.0087, 0.992358, 1.0019, 1.00325, 1.01361, 0.985698, 0.984192, 1.00081, 0.980242, 1.01966, 1.01864, 1.00961, 0.998227, 0.987839, 0.988712, 1.00303, 1.00586, 1.00064, 0.998796, 0.994954, 0.995831, 0.983805, 1.00115, 0.996888, 1.0048, 0.992111, 0.995486, 0.991809, 1.00573, 0.993651, 0.999967, 1.00363, 0.988586, 1.00568, 1.00209, 1.00599, 0.992985, 1.00479, 1.0239, 1.004, 1.00345, 1.00133, 1.00844, 1.00579, 1.00595, 0.992777, 1.00891, 0.998118, 0.993164, 1.0049, 1.00972, 1.00651, 0.995515, 1.00349, 1.00592, 0.99943, 1.01287, 0.994582, 0.998254, 0.990431, 1.00189, 1.00517, 0.995162, 0.984712, 1.01285, 1.00497, 1.00486, 1.0039, 0.997872, 0.989609, 1.00443, 1.01053, 1.02936, 0.995582, 0.998892, 1.02438, 0.988398, 1.00703, 1.00981, 1.00155, 1.01875, 1.01807, 0.981534, 1.00592, 1.00151, 0.996775, 1.0211, 1.00371, 0.99894, 0.995299, 0.999086, 0.984754, 0.990812, 0.99634, 1.02376, 1.00418, 1.01996, 0.990697, 0.998484, 1.0029, 1.00852, 0.991341, 1.00965, 1.02483, 1.00998, 1.01005, 0.966056, 1.01735, 1.006, 1.00722, 0.998032, 1.01404, 1.02029, 1.00811, 0.986319, 1.02542, 1.00729, 1.02281, 0.988101, 1.00226, 1.00434, 1.02331, 1.02935, 1.00405, 1.02578, 0.979352, 0.998996, 1.02707, 1.01975, 1.02076, 0.978014, 1.004, 0.980768, 1.00619, 0.98691, 0.979389, 1.0014, 0.970001, 1.04316, 1.01598, 1.00061, 0.995445, 1.02046, 1.04382, 0.976277, 0.953986, 0.966107, 0.98224, 1.02632, 0.941842, 0.998975, 0.946585, 0.965127, 0.949714, 0.99356, 1.00223, 1.04087, 0.967389, 1.02004, 1.03288, 1.00436, 0.929382, 0.919966, 0.946369, 0.982111, 0.930744, 0.886954, 1.03307, 0.955422, 0.966665, 0.916941, 0.854951, 0.913023, 0.882754, 0.946411, 0.884725, 1.1895, 1.07855, 0.878536, 0.854951, 0.914205, 1.05744, 1.15797, 0.914323, 1.23113, 0.730845, 0.923347, 1.21831, 0.72342, 1.34992, 0.737027, 1.65647, 1.03815, 1.12698, 0.657655, 0.598466, 1.02594, 0.759956, 0.854951, 0.427475, 0.0712459, 1.06869, 2.56485, 1.7099, 1.13993, 1, 0.854951, 0.683961, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.}, + // RefMult: 65#leq Vz #leq75 + {0.968499, 0.961368, 1.02948, 1.04593, 1.04194, 1.0333, 1.02802, 1.02506, 1.0271, 1.01941, 1.01251, 1.0104, 1.01452, 1.0077, 1.00204, 1.01077, 0.999207, 0.995169, 1.00343, 1.0007, 1.0026, 1.00113, 1.00858, 1.00137, 0.997582, 0.998125, 0.997965, 1.00402, 1.0016, 0.99792, 1.00686, 0.997653, 0.99946, 0.99755, 0.983768, 0.996821, 0.998357, 0.995543, 1.00289, 1.00121, 0.995437, 0.992792, 1.00733, 0.995638, 0.9949, 0.997188, 0.99976, 0.992473, 0.998742, 0.994265, 1.0057, 1.00106, 0.987911, 1.00604, 1.00005, 0.999792, 0.986509, 0.996052, 0.984358, 0.99638, 0.996737, 0.991045, 0.996536, 0.989526, 0.995761, 0.978701, 0.996447, 0.989229, 1.00216, 0.9884, 0.996702, 0.987329, 1.00199, 1.00748, 1.01218, 0.990776, 1.0034, 0.982684, 0.988854, 0.988185, 1.00316, 1.00533, 1.00195, 1.00461, 0.985596, 0.987318, 0.991924, 0.996022, 0.993837, 0.997344, 1.00402, 1.00478, 1.00608, 0.999127, 0.999963, 0.991364, 1.00057, 0.993922, 1.00329, 0.990125, 1.00574, 0.987871, 0.99526, 1.00406, 1.00545, 0.986349, 0.996736, 1.00553, 0.992272, 1.00439, 1.00164, 0.999652, 1.00133, 0.995156, 1.00598, 1.00562, 1.01003, 1.01173, 1.01281, 1.02221, 0.990398, 1.00577, 1.01439, 0.986477, 0.996908, 1.01499, 0.99913, 0.986163, 0.995616, 0.988219, 1.01359, 1.00626, 1.00345, 1.00933, 0.977973, 0.995837, 1.01377, 0.984267, 1.01305, 1.01521, 1.00409, 1.00326, 0.995513, 0.998092, 1.00118, 0.980641, 1.01105, 1.01095, 1.00457, 1.00027, 0.991315, 0.990459, 1.00595, 0.986463, 1.01193, 0.988805, 1.00562, 0.989849, 1.00705, 0.994368, 0.998607, 1.00343, 0.997846, 0.998724, 0.9969, 1.00134, 0.993419, 0.984817, 0.996508, 1.0097, 1.01237, 0.997325, 1.00436, 0.996006, 0.986484, 1.00044, 0.995167, 1.01139, 1.00174, 0.99148, 1.00104, 0.987497, 1.00011, 1.02494, 1.02061, 1.00418, 1.002, 0.975354, 0.999693, 0.989849, 0.999807, 0.999041, 0.981028, 0.988538, 1.00274, 0.976674, 0.993799, 1.01412, 0.99597, 0.981294, 0.988563, 0.991379, 0.989153, 0.988304, 0.991677, 0.993158, 0.994326, 1.011, 0.997369, 0.984635, 1.00523, 1.0115, 1.01062, 1.01229, 0.998626, 1.00004, 0.987119, 1.00561, 1.00678, 1.00367, 1.00307, 1.01133, 1.00661, 0.996989, 0.99972, 0.992708, 1.0034, 1.00763, 0.991767, 1.02619, 1.00094, 0.99766, 0.993228, 0.999651, 1.00272, 0.991544, 0.996005, 0.992745, 1.0069, 1.0138, 0.996429, 1.01783, 0.998868, 1.00721, 1.00052, 1.00867, 0.984086, 1.01415, 1.01364, 0.984806, 1.01031, 0.998536, 1.01537, 1.01225, 1.02168, 0.997373, 1.00779, 0.997675, 1.00559, 1.01368, 1.00405, 0.986018, 0.99584, 0.987839, 1.00049, 1.02023, 0.997003, 1.02984, 0.998638, 1.01868, 0.999045, 1.0052, 0.990263, 0.999762, 1.00177, 1.01765, 1.00344, 0.993413, 1.00308, 0.977523, 1.02667, 1.0113, 1.00598, 1.01491, 1.02352, 1.01811, 1.00912, 1.00196, 1.01462, 1.01823, 1.00469, 1.00603, 1.00726, 1.02468, 1.00183, 1.01141, 1.00537, 1.00911, 1.03198, 1.0111, 1.00694, 0.976584, 1.01855, 0.979034, 1.02892, 0.99294, 0.992751, 0.977102, 0.986747, 0.985344, 0.993694, 1.00323, 0.998152, 0.964938, 0.986367, 1.03119, 1.0151, 0.961989, 0.983381, 0.979121, 0.950963, 1.00868, 0.95145, 0.945167, 0.954341, 0.977857, 0.945066, 0.9465, 1.00111, 1.06293, 1.02251, 1.00239, 1.00667, 0.98774, 1.0107, 1.00051, 0.937321, 0.931731, 0.928179, 0.943405, 0.946364, 1.05676, 0.920084, 0.901168, 0.901374, 0.875287, 0.981052, 0.91054, 0.823072, 0.890752, 0.98797, 0.954598, 0.995339, 0.863191, 0.985466, 1.09336, 0.875461, 1.35166, 0.910296, 0.990708, 1.12227, 0.783501, 0.931435, 0.747448, 1.08802, 0.857696, 1.95084, 0.620957, 0.353169, 1.07632, 0.496765, 0.576603, 0.269081, 0.115321, 1.34541, 0.807244, 0.403622, 0.807244, 1, 1.21087, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.}, + // RefMult: 75#leq Vz #leq85 + {1.01965, 0.959242, 1.01829, 1.0452, 1.0591, 1.05095, 1.04372, 1.03837, 1.03915, 1.0271, 1.01816, 1.0166, 1.01997, 1.00471, 1.01072, 1.01018, 1.00432, 1.00528, 0.996589, 1.00113, 1.00472, 1.0032, 1.00824, 0.992973, 1.00599, 0.998877, 0.992978, 1.00189, 1.00754, 0.994655, 1.01058, 0.995569, 1.00029, 0.997026, 0.980931, 0.999216, 1.00788, 0.996029, 0.991827, 0.999678, 0.993437, 0.998991, 0.997542, 1.00168, 0.992833, 1.00431, 0.997113, 0.994273, 0.995644, 0.990107, 0.992261, 0.996904, 0.994482, 0.988317, 1.00307, 0.997099, 0.989012, 0.989457, 0.984998, 1.00095, 1.00214, 0.990011, 0.989649, 0.984109, 1.00856, 0.989624, 0.992372, 0.993644, 1.00648, 0.999537, 1.00376, 1.00158, 1.00561, 0.993632, 1.00989, 1.00053, 0.986186, 0.992796, 0.994169, 0.984639, 1.00404, 0.988267, 0.998366, 1.0038, 0.991974, 0.977988, 0.986126, 0.99213, 0.996801, 0.985399, 1.00315, 1.00084, 1.0081, 1.00422, 0.987332, 0.992284, 0.994796, 0.991062, 0.993772, 0.988641, 1.0132, 0.995468, 0.997532, 1.00209, 1.00468, 1.00615, 0.986184, 1.00323, 0.983646, 0.992535, 1.01067, 0.994978, 1.00409, 0.989807, 0.99666, 1.00557, 1.01683, 1.01033, 1.00391, 1.01043, 0.996203, 1.00014, 1.01616, 0.994172, 0.995843, 0.992264, 1.0007, 0.979275, 1.00662, 0.986545, 1.00398, 1.01773, 0.990533, 0.982251, 0.999718, 0.98939, 1.01066, 0.997504, 1.00159, 1.00599, 0.995289, 1.00066, 0.994762, 1.00235, 1.00288, 0.990504, 1.00566, 0.998225, 0.994297, 1.0023, 1.00426, 0.987799, 0.999603, 0.989194, 1.02292, 0.991895, 0.996762, 0.99271, 1.0173, 0.982688, 0.992846, 0.995531, 0.986292, 0.999801, 1.00549, 1.01608, 0.993661, 0.998585, 0.994379, 1.00441, 1.00222, 1.00619, 0.998954, 1.00772, 0.974201, 1.01694, 1.00176, 0.99429, 1.01688, 0.987213, 1.01365, 0.992225, 0.998801, 1.01156, 1.0183, 0.989226, 1.01038, 0.999271, 1.01078, 1.00356, 1.00959, 1.01271, 0.988345, 0.991866, 0.995275, 0.981959, 1.00586, 1.00565, 0.996041, 0.990593, 0.989478, 0.989263, 0.987327, 0.992789, 0.997621, 1.00591, 0.991438, 1.01658, 1.01113, 0.985312, 1.01122, 1.02057, 0.973815, 1.00204, 0.999073, 1.00631, 0.998097, 0.988367, 0.989241, 1.00034, 1.00291, 1.00569, 0.989609, 0.995081, 1.01639, 0.999662, 0.996747, 1.01061, 1.00225, 1.01385, 1.01215, 1.01626, 0.984761, 0.991478, 0.995022, 0.99908, 0.990709, 0.998984, 0.994223, 1.00341, 0.997543, 1.0101, 1.00028, 1.00695, 1.00219, 1.02699, 0.977942, 1.00007, 1.0378, 0.998891, 1.01438, 1.01476, 1.00458, 1.01968, 1.01867, 0.997381, 1.03126, 0.992472, 1.00323, 1.01921, 0.98598, 1.01018, 0.998197, 1.00499, 0.981496, 1.00851, 0.997734, 1.01036, 0.988619, 1.01521, 1.01886, 1.01911, 0.99919, 1.02233, 1.011, 1.00501, 1.01398, 1.00733, 1.01486, 0.994931, 1.02533, 1.00265, 1.02451, 1.02444, 1.04264, 1.02646, 0.995515, 1.02, 1.03231, 0.995628, 0.98062, 1.00366, 1.01702, 1.00764, 0.997926, 0.993833, 0.999572, 1.02209, 1.01545, 1.01298, 1.0034, 0.998835, 1.01066, 0.969532, 0.989669, 1.01024, 0.965759, 0.966885, 0.984646, 0.982576, 0.982393, 1.01937, 0.990724, 0.952461, 0.975474, 0.987637, 1.00638, 0.963657, 0.987749, 0.94606, 0.933757, 0.973329, 0.958571, 0.979717, 0.95822, 0.976571, 0.95039, 0.927916, 0.922644, 0.972957, 0.998322, 0.9817, 0.990702, 0.981319, 0.847792, 0.931607, 0.877866, 0.935068, 0.87752, 0.905381, 1.04144, 1.00275, 0.974349, 0.919158, 0.856303, 0.876882, 0.845965, 0.95205, 0.93051, 1.00805, 0.976303, 0.804642, 0.889046, 0.82477, 1.06071, 1.18965, 0.924048, 1.47121, 1.00175, 0.972051, 1.79559, 0.779666, 1.13406, 0.900047, 1.01901, 0.856845, 1.09626, 0.630033, 0.407098, 1.29607, 1.51208, 0.420022, 0.604832, 0.18901, 3.7802, 0.453624, 0.756039, 3.02416, 1, 2.26812, 3.02416, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.}, + // RefMult: 85#leq Vz #leq95 + {1.04574, 0.961146, 1.01881, 1.05964, 1.07377, 1.0687, 1.062, 1.05531, 1.04945, 1.04344, 1.0234, 1.02643, 1.02361, 1.01617, 1.01178, 1.01106, 1.00151, 1.00075, 1.00118, 1.00276, 1.0019, 1.00321, 1.00105, 0.999291, 0.997226, 1.00121, 1.00123, 1.00079, 1.00055, 1.00036, 1.00603, 1.00029, 1.00181, 0.994809, 0.98823, 0.992513, 0.995896, 1.00274, 0.998349, 0.993667, 0.988035, 0.989448, 1.00041, 0.996318, 0.99255, 0.991332, 0.994547, 0.994523, 0.995303, 1.00022, 0.997992, 0.997253, 0.992872, 0.997767, 0.989763, 0.99864, 0.9931, 0.989578, 0.999498, 0.986888, 0.992136, 0.990825, 0.995668, 0.992151, 0.983957, 0.988181, 0.99781, 0.997575, 0.996302, 0.989313, 1.00398, 1.00401, 0.995368, 0.986359, 1.00958, 0.98943, 0.988451, 0.99158, 0.989715, 0.99034, 1.00655, 0.991918, 1.00067, 0.999343, 0.991958, 0.995155, 1.00088, 0.993877, 1.00273, 0.976066, 0.999852, 0.994157, 0.998935, 1.00212, 0.990474, 0.985611, 0.985082, 0.997075, 1.00024, 0.973978, 1.00522, 0.982755, 0.998695, 0.993646, 0.995533, 0.991119, 0.99372, 1.01223, 0.987311, 0.996653, 0.997606, 0.989607, 0.990216, 0.988494, 0.983019, 0.997422, 1.01027, 1.00202, 0.999071, 1.01618, 0.988526, 1.00034, 1.00442, 0.995931, 0.988699, 0.993857, 0.989863, 0.984244, 0.998057, 0.985514, 1.00204, 1.00708, 1.00274, 0.982648, 0.989866, 0.989317, 1.02085, 0.989828, 0.990067, 1.01169, 0.998393, 0.991712, 0.994703, 1.00354, 0.9958, 0.984539, 0.997169, 1.00202, 0.998019, 1.00875, 1.00009, 0.992372, 1.00244, 1.00624, 1.02178, 0.990645, 0.98209, 0.997409, 1.01049, 0.98662, 0.995216, 0.999497, 0.989337, 0.992194, 1.00587, 0.997695, 1.00597, 0.980121, 1.00165, 0.997887, 1.01042, 0.997223, 0.986371, 1.00819, 0.982632, 0.999393, 0.985825, 1.00436, 0.994383, 0.994721, 1.00228, 0.993711, 0.998129, 1.02206, 1.00883, 0.992534, 1.00007, 1.00324, 1.00828, 0.98814, 1.00469, 0.997869, 1.00106, 0.995833, 0.983067, 0.999462, 0.990417, 1.02343, 0.987379, 1.00692, 0.982422, 0.992174, 1.01105, 0.99579, 0.998896, 0.985434, 0.993004, 1.02919, 1.0003, 0.983061, 1.02172, 1.01547, 1.00307, 0.998536, 1.0057, 1.01011, 1.01581, 0.998349, 1.00358, 1.00413, 1.0113, 1.01527, 1.00823, 1.02631, 1.02267, 1.00792, 1.01416, 1.02631, 1.0039, 1.01367, 1.02551, 1.02728, 1.00415, 1.00811, 1.01456, 0.994845, 0.993377, 1.01099, 1.01246, 1.01487, 1.00753, 1.02787, 1.00012, 1.02808, 1.02512, 1.02479, 1.01158, 0.995152, 1.03142, 0.999459, 1.02155, 1.0286, 1.02315, 1.01939, 1.02275, 1.01247, 1.01038, 1.02992, 1.01938, 1.01964, 0.999208, 1.00312, 0.992734, 1.02093, 1.01121, 1.01726, 1.00942, 1.03856, 1.01739, 1.01977, 1.02804, 1.02377, 1.02946, 1.01192, 1.02983, 1.04092, 1.01671, 1.03068, 1.01531, 1.00601, 1.02698, 1.01575, 1.0102, 1.03145, 1.03982, 1.01962, 1.01588, 1.02051, 1.03076, 1.03285, 1.03175, 1.00664, 1.03397, 1.01006, 0.999038, 1.02962, 1.0182, 1.03252, 1.00036, 1.01667, 1.02298, 0.994686, 1.01224, 0.998829, 1.03051, 1.00765, 0.962208, 0.990741, 0.995914, 1.01654, 0.971006, 1.01114, 0.981308, 0.957244, 1.00302, 0.998275, 0.981714, 0.973776, 0.952324, 1.00131, 0.966647, 1.0467, 0.940866, 0.927839, 0.964091, 0.947349, 0.943285, 0.978127, 1.03876, 0.929639, 0.960028, 0.985258, 0.924813, 1.00425, 0.871559, 0.890593, 0.895494, 0.993155, 0.846542, 0.984176, 0.978931, 1.05266, 0.909946, 0.984704, 0.873074, 0.898653, 0.832948, 0.948991, 0.879332, 1.03647, 1.11739, 1.06698, 0.92839, 0.773384, 0.794781, 1.10426, 1.05954, 0.9357, 0.864978, 1.11458, 1.60005, 0.747051, 0.84213, 1.46203, 1.45033, 0.662787, 1.5655, 0.539827, 0.818737, 0.84213, 0.9357, 0.701775, 2.8071, 0.350887, 1.16962, 0.526331, 1.40355, 0.701775, 1, 0.526331, 1.40355, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.}, + // RefMult: 95#leq Vz #leq105 + {1.03016, 0.950072, 1.018, 1.07455, 1.09922, 1.08668, 1.07922, 1.06979, 1.05907, 1.05571, 1.03953, 1.02957, 1.03502, 1.02086, 1.01724, 1.00917, 1.00437, 1.00075, 0.996783, 0.999526, 0.996976, 0.993966, 0.998847, 0.990977, 0.994511, 0.999816, 0.994401, 0.993831, 1.00209, 0.990181, 0.990069, 0.993624, 0.985516, 0.992456, 0.976408, 0.981029, 0.998174, 0.986679, 0.998938, 0.993502, 0.987753, 1.00142, 0.996657, 0.991298, 0.990154, 0.988372, 1.00014, 0.984724, 1.00127, 0.999106, 0.998838, 0.992376, 0.980684, 0.987395, 0.993282, 0.999529, 0.977527, 0.996033, 0.989067, 0.987739, 0.995496, 0.984126, 0.992012, 0.989454, 0.983756, 0.981988, 0.992613, 0.986351, 0.987719, 0.97806, 0.99937, 0.991983, 0.985425, 1.00003, 1.00947, 0.99786, 0.989626, 0.97633, 0.985619, 0.991685, 0.990172, 0.995698, 0.99949, 0.998554, 0.989968, 0.98792, 0.986881, 0.991646, 0.987894, 0.987552, 1.01372, 0.986284, 1.01032, 0.995768, 0.983595, 0.978093, 0.983682, 0.983081, 0.999967, 0.984909, 1.00406, 0.980134, 0.988782, 0.99597, 0.99605, 0.991063, 0.986594, 1.00053, 0.995021, 0.985474, 0.999225, 0.99658, 1.00415, 0.990283, 0.984243, 0.988841, 1.01203, 0.991293, 0.98886, 1.00332, 0.987279, 1.00209, 1.01089, 0.988547, 0.98569, 1.00315, 1.00803, 0.994533, 0.996348, 0.976949, 1.00422, 1.01433, 0.992785, 0.985909, 0.988199, 0.991976, 1.00935, 0.982324, 0.986339, 0.999988, 0.985849, 1.00301, 0.991603, 1.00148, 0.997802, 0.980978, 1.0041, 1.00032, 1.00223, 0.997724, 0.987236, 0.991894, 0.994346, 0.990385, 1.00645, 0.992565, 1.00353, 0.995734, 1.00452, 0.978265, 0.988278, 1.00434, 0.983575, 0.998736, 0.988858, 0.985293, 0.994186, 0.987986, 1.00684, 1.00169, 1.01311, 1.02514, 0.997735, 1.00367, 0.995824, 0.982918, 0.99509, 0.999005, 1.0057, 0.982629, 1.00458, 1.00911, 1.00351, 1.02023, 1.01282, 1.00482, 1.00112, 0.988381, 1.00545, 0.99819, 1.01297, 0.995138, 0.986805, 0.985102, 0.998007, 0.974434, 1.00178, 1.01333, 1.00693, 0.989208, 0.998776, 0.986785, 0.98891, 1.01761, 0.99161, 0.991697, 0.996098, 1.00205, 1.01275, 0.991422, 0.99452, 1.00937, 0.996134, 1.01864, 1.01212, 1.0166, 1.01599, 1.02243, 1.01069, 1.01534, 1.02653, 1.01472, 1.01944, 1.01326, 1.02419, 1.00147, 1.02035, 1.03106, 1.00155, 1.01237, 1.02415, 1.01012, 1.02098, 1.01185, 1.02302, 1.00873, 1.02499, 1.00104, 1.01237, 1.02868, 1.01506, 1.03407, 1.01231, 1.03772, 0.998923, 1.03368, 1.01161, 1.01835, 1.04488, 1.01859, 1.01211, 1.03268, 1.00784, 1.04889, 1.02982, 1.00044, 1.0339, 1.01793, 1.03429, 1.02757, 1.02598, 1.01961, 1.0365, 1.01793, 1.00657, 1.01486, 1.03474, 1.06207, 1.00821, 1.01664, 1.01876, 1.055, 1.03112, 1.03442, 1.04375, 1.04885, 1.02733, 1.03297, 1.0315, 1.02653, 1.03443, 1.07538, 1.04345, 1.04938, 1.03217, 1.03772, 1.05184, 1.04306, 1.01869, 1.03445, 1.02911, 1.01703, 1.06286, 1.01941, 1.01796, 1.01439, 1.00229, 1.02472, 1.02799, 0.99322, 1.02828, 1.02788, 1.06142, 0.978352, 1.03342, 1.00824, 0.985407, 0.972083, 0.979728, 1.01172, 0.997171, 0.996113, 0.978007, 0.97276, 0.988718, 0.992137, 0.98363, 0.981678, 0.961093, 0.995811, 0.94435, 0.995326, 0.913736, 0.984847, 0.984361, 0.976322, 0.972254, 0.944542, 0.946989, 0.997728, 0.982009, 0.980422, 0.939163, 0.951442, 0.894689, 0.945805, 0.886274, 0.990414, 0.857609, 0.907392, 0.946111, 0.965858, 0.898078, 0.843492, 0.813896, 0.80989, 0.856293, 0.923189, 0.943185, 1.08447, 0.902568, 0.872199, 0.693017, 0.869272, 0.796409, 1.11126, 0.74001, 1.00785, 0.758377, 0.656054, 0.991962, 0.708296, 0.71545, 0.73171, 1.17418, 1.09464, 1.3338, 0.585368, 0.563417, 0.85854, 0.57236, 0.804882, 0.321953, 0.160976, 0.643905, 0.482929, 0.321953, 1.28781, 1, 0.965858, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.}, + // RefMult: 105#leq Vz #leq115 + {1.01607, 0.937921, 1.01871, 1.10048, 1.12478, 1.10849, 1.09788, 1.08668, 1.07288, 1.06413, 1.04759, 1.0408, 1.03982, 1.01872, 1.01671, 1.01904, 1.00729, 0.994616, 1.00045, 0.991159, 0.994323, 0.996246, 0.998491, 0.989721, 0.988772, 0.98618, 0.989761, 0.99531, 0.991359, 0.980889, 0.991993, 0.991461, 0.988972, 0.980871, 0.976853, 0.983366, 0.981873, 0.970361, 0.985053, 0.979006, 0.983738, 0.976644, 0.992063, 0.98734, 0.974242, 0.979745, 0.988968, 0.982754, 0.993457, 0.98027, 0.985187, 0.985448, 0.976352, 0.989592, 0.993839, 0.986548, 0.971852, 0.980266, 0.977347, 0.987446, 0.987014, 0.980678, 0.9739, 0.976734, 0.977308, 0.975014, 0.980391, 0.966338, 0.986316, 0.980917, 0.982963, 0.977124, 0.989333, 0.987426, 0.998626, 0.981145, 0.985129, 0.971214, 0.977427, 0.981197, 0.986168, 0.987901, 0.989593, 0.988189, 0.976384, 0.979515, 0.987807, 0.972792, 0.976483, 0.985846, 0.994383, 0.989884, 0.995978, 0.988608, 0.976131, 0.979254, 0.981438, 0.981219, 0.990236, 0.978183, 0.98182, 0.979064, 0.982293, 0.980887, 0.991278, 0.986902, 0.979804, 1.00071, 0.97165, 0.985654, 0.991943, 0.977679, 0.988876, 0.985559, 0.985017, 1.00168, 1.00504, 0.995075, 0.991293, 1.01529, 0.986399, 0.987668, 1.0078, 0.983332, 0.992284, 0.98185, 0.993667, 0.972491, 0.982523, 0.972235, 0.982486, 0.990269, 0.996071, 0.990033, 0.97369, 0.989459, 1.00392, 0.986199, 0.99628, 0.998792, 0.985908, 0.994535, 1.00615, 0.998964, 0.983802, 0.977073, 0.992475, 0.998716, 0.995929, 0.999861, 0.975852, 0.980668, 0.987636, 1.00517, 0.988431, 1.0034, 0.988465, 1.00585, 0.988839, 0.987977, 0.995126, 0.991868, 0.992999, 1.00599, 0.994965, 1.00774, 0.988267, 0.984644, 0.990913, 0.993907, 1.00684, 0.997916, 0.982352, 1.00828, 0.988996, 1.00168, 0.99222, 0.99533, 0.990124, 0.993979, 1.00124, 0.99156, 0.989542, 1.02328, 1.00843, 1.0069, 0.996634, 0.991431, 1.00877, 0.996651, 1.00788, 1.00599, 1.0027, 0.994512, 1.00002, 0.988662, 0.980852, 1.00324, 1.00295, 0.997576, 0.993678, 1.01351, 1.00915, 1.00868, 1.00575, 1.0049, 1.01, 1.01408, 1.01527, 1.00551, 1.01151, 1.03499, 1.01352, 1.01578, 1.00102, 1.02618, 1.00987, 1.03094, 1.03204, 1.02963, 1.01904, 1.01873, 1.02779, 1.03101, 1.02837, 1.02244, 1.01656, 1.03939, 1.03424, 1.05278, 1.04712, 1.04723, 1.01063, 1.02618, 1.01806, 1.02645, 1.02586, 1.03232, 1.03332, 1.04353, 1.05036, 1.03562, 1.03983, 1.0443, 1.03195, 1.05081, 1.02772, 1.03189, 1.07432, 1.02773, 1.04942, 1.04255, 1.04712, 1.05152, 1.07737, 1.03762, 1.0702, 1.04089, 1.04452, 1.04466, 1.0274, 1.02338, 1.02833, 1.06444, 1.05909, 1.03938, 1.03888, 1.08892, 1.05181, 1.07261, 1.0502, 1.0574, 1.05124, 1.07756, 1.04641, 1.06189, 1.06656, 1.06289, 1.06792, 1.03772, 1.07603, 1.07158, 1.06228, 1.08589, 1.04388, 1.06709, 1.06757, 1.04531, 1.09007, 1.05794, 1.06279, 1.05638, 1.03779, 1.07385, 1.04178, 1.07427, 1.05952, 1.04823, 1.05595, 1.03129, 1.05242, 1.03218, 1.04452, 1.01137, 1.02754, 1.02201, 1.01424, 1.01192, 1.06285, 1.02545, 1.03201, 1.03475, 1.013, 0.982156, 1.00398, 1.00813, 1.03515, 0.965727, 1.01156, 0.994614, 1.00823, 0.997761, 0.964166, 0.921834, 0.97245, 0.964153, 0.922938, 0.914661, 0.959552, 0.999205, 1.00653, 0.980509, 0.968768, 0.969545, 0.905322, 0.926507, 0.944891, 1.03073, 0.900122, 0.969888, 0.934196, 1.04172, 0.855211, 0.91881, 0.863732, 0.909538, 0.884362, 0.892397, 0.943147, 0.905702, 0.880082, 0.947336, 0.990486, 0.761117, 0.763662, 0.962889, 1.04744, 1.0272, 1.10719, 0.957162, 1.28235, 0.965138, 1.09675, 0.696348, 1.20886, 0.552436, 2.82717, 0.649925, 0.227474, 1.40384, 0.51994, 0.584932, 0.334247, 0.146233, 1.46233, 1, 0.584932, 1.16986, 1, 1.7548, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.584932, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.}, + // RefMult: 115#leq Vz #leq125 + {1.00592, 0.920414, 1.0134, 1.11817, 1.14053, 1.13398, 1.122, 1.10322, 1.0899, 1.06791, 1.05766, 1.0486, 1.03714, 1.02834, 1.01463, 1.01119, 1.00236, 1.00169, 0.988531, 0.989649, 0.990888, 0.988353, 0.986281, 0.980814, 0.991519, 0.981618, 0.98104, 0.98152, 0.979556, 0.969788, 0.980535, 0.983559, 0.984679, 0.981957, 0.966477, 0.968383, 0.969934, 0.974172, 0.972848, 0.972424, 0.988152, 0.978892, 0.980447, 0.973442, 0.968452, 0.969162, 0.976937, 0.971138, 0.971035, 0.968574, 0.981716, 0.966096, 0.969705, 0.971908, 0.978309, 0.973852, 0.961583, 0.966372, 0.963513, 0.982547, 0.972785, 0.963474, 0.965464, 0.97276, 0.975043, 0.963803, 0.971154, 0.963303, 0.984752, 0.956311, 0.987253, 0.974418, 0.974957, 0.965626, 0.985003, 0.966153, 0.978225, 0.969926, 0.9653, 0.970811, 0.985351, 0.985024, 0.977918, 0.975992, 0.96842, 0.981347, 0.982846, 0.972819, 0.970385, 0.972929, 0.976802, 0.984911, 0.983272, 0.980486, 0.97415, 0.963707, 0.977383, 0.971199, 0.993141, 0.966506, 0.977345, 0.958361, 0.979253, 0.974345, 0.987035, 0.982977, 0.975344, 0.977212, 0.964895, 0.979162, 0.997198, 0.965143, 0.996178, 0.971423, 0.987242, 0.980331, 0.982882, 0.992901, 0.986299, 0.979032, 0.966089, 0.988192, 1.00158, 0.9789, 0.971406, 0.97368, 0.991114, 0.968138, 0.990214, 0.969341, 0.997063, 0.986773, 0.974153, 0.993662, 0.975527, 0.984254, 0.981141, 0.962641, 0.975487, 0.987732, 0.971368, 0.984483, 0.980087, 0.995479, 1.01295, 0.969799, 0.990025, 0.986024, 0.999227, 0.998492, 0.972884, 0.986105, 0.986903, 0.985114, 1.0026, 0.979618, 1.00055, 1.00098, 1.01395, 0.967841, 0.981408, 0.989991, 0.967858, 0.993248, 0.997265, 1.00299, 0.979166, 0.988375, 0.998095, 1.01044, 1.01624, 0.971691, 1.00249, 1.01341, 0.972708, 0.990613, 0.997118, 0.994093, 1.01435, 0.994919, 1.00529, 0.990126, 1.00067, 1.00967, 1.02498, 1.012, 1.00561, 1.0177, 1.0211, 0.999723, 1.03784, 1.00454, 0.991676, 1.00833, 1.00015, 0.993457, 1.00463, 1.03171, 0.998449, 1.00182, 1.00579, 1.01231, 1.01062, 1.01388, 1.01302, 1.01312, 1.01231, 1.0246, 1.01999, 1.03133, 1.01957, 1.03752, 1.01681, 1.02589, 1.01791, 1.04008, 1.04602, 1.04308, 1.0231, 1.05785, 1.0335, 1.03346, 1.0351, 1.01943, 1.04391, 1.0248, 1.03154, 1.0507, 1.02082, 1.04927, 1.05559, 1.05008, 1.03206, 1.05057, 1.06033, 1.05927, 1.03649, 1.07316, 1.06129, 1.05915, 1.03569, 1.05447, 1.05025, 1.0688, 1.06508, 1.08437, 1.03195, 1.07506, 1.09825, 1.03344, 1.0583, 1.06022, 1.07386, 1.0869, 1.08153, 1.08756, 1.07216, 1.08736, 1.07996, 1.09152, 1.06209, 1.05167, 1.07553, 1.07424, 1.07107, 1.09834, 1.08224, 1.09761, 1.09863, 1.105, 1.10224, 1.09263, 1.08806, 1.08029, 1.09522, 1.10876, 1.10916, 1.10245, 1.11179, 1.09772, 1.13169, 1.10565, 1.09029, 1.08888, 1.09166, 1.14286, 1.1027, 1.10257, 1.12271, 1.10246, 1.12455, 1.10387, 1.07605, 1.09632, 1.10062, 1.09347, 1.11128, 1.08489, 1.07417, 1.08639, 1.05444, 1.05636, 1.09205, 1.02877, 1.05654, 1.0368, 1.04453, 1.04296, 1.00645, 1.0361, 1.01798, 1.03179, 1.02174, 1.03985, 1.00741, 1.07984, 1.00675, 0.973474, 0.995303, 0.993778, 0.985338, 0.970493, 0.996146, 0.992141, 0.929813, 0.960554, 0.952568, 0.912763, 0.937722, 1.01942, 0.946285, 1.06111, 0.918171, 1.00705, 0.880875, 0.957326, 0.944566, 0.976061, 0.863107, 0.910926, 1.10692, 0.846995, 0.761357, 0.735721, 0.957737, 0.824364, 0.807151, 0.837521, 0.932143, 0.875404, 0.834856, 0.941268, 0.812073, 0.797573, 0.849777, 0.967299, 0.761763, 0.877949, 0.694738, 1.17974, 1.06739, 0.508909, 0.749043, 0.689908, 1.01589, 0.810329, 1.16966, 0.476664, 0.407813, 0.786496, 0.599235, 0.374522, 1.04866, 0.131083, 1.31083, 0.393248, 0.174777, 2.09732, 1, 0.786496, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.}, + // RefMult: 125#leq Vz #leq135 + {0.922445, 0.87657, 1.01625, 1.14762, 1.17996, 1.16927, 1.1427, 1.12501, 1.11405, 1.08937, 1.06673, 1.04852, 1.03718, 1.02207, 1.02137, 1.01275, 0.99734, 0.99288, 0.984183, 0.988703, 0.982498, 0.97489, 0.973144, 0.975438, 0.972307, 0.974383, 0.960307, 0.966732, 0.974638, 0.958248, 0.971755, 0.970271, 0.960725, 0.963052, 0.955531, 0.957726, 0.959692, 0.95882, 0.964041, 0.965276, 0.961449, 0.964516, 0.962208, 0.966007, 0.955902, 0.959771, 0.967528, 0.95079, 0.962605, 0.955893, 0.957771, 0.963318, 0.95721, 0.952687, 0.965576, 0.962152, 0.94942, 0.960735, 0.94225, 0.949004, 0.960437, 0.954083, 0.953207, 0.946344, 0.947041, 0.946183, 0.968788, 0.954416, 0.964507, 0.951028, 0.972288, 0.97222, 0.959703, 0.965284, 0.974155, 0.963519, 0.954332, 0.947275, 0.953285, 0.951171, 0.959269, 0.960762, 0.961998, 0.95873, 0.966915, 0.973625, 0.955982, 0.96508, 0.969454, 0.951161, 0.956236, 0.956335, 0.967546, 0.968003, 0.962891, 0.946115, 0.953301, 0.955805, 0.967373, 0.955543, 0.967316, 0.969486, 0.961108, 0.978126, 0.96175, 0.945472, 0.964345, 0.97135, 0.961638, 0.969038, 0.967069, 0.957336, 0.970756, 0.956827, 0.96742, 0.978302, 0.989434, 0.978309, 0.969568, 0.980512, 0.969213, 0.969923, 0.971604, 0.962857, 0.960103, 0.974216, 0.9855, 0.947664, 0.980132, 0.955577, 0.96408, 0.993245, 0.980495, 0.980261, 0.951313, 0.970541, 0.985152, 0.964437, 0.987735, 0.984397, 0.970229, 0.979418, 0.974073, 0.995791, 0.996001, 0.971015, 0.977437, 0.983312, 0.994982, 0.997481, 0.98495, 0.977412, 0.975102, 0.958636, 0.996811, 0.978766, 0.964075, 0.997119, 0.985361, 0.974422, 0.981476, 0.984088, 0.98494, 0.994085, 0.980614, 0.990664, 0.998549, 0.997379, 0.982251, 1.01152, 0.995797, 0.989717, 1.0018, 0.992907, 0.993202, 1.01334, 0.98798, 0.998498, 1.00689, 0.986788, 0.99126, 0.98861, 1.02261, 1.02607, 1.01415, 1.0047, 1.00305, 1.01456, 1.02853, 0.986319, 1.0109, 1.0074, 1.01975, 1.01018, 1.00991, 0.996955, 1.03216, 1.02735, 1.01349, 1.00608, 0.999192, 1.03342, 1.01497, 1.02733, 1.00922, 1.03451, 1.02011, 1.04103, 1.05909, 1.02653, 1.04513, 1.04859, 1.03006, 1.03846, 1.06132, 1.03766, 1.0543, 1.04505, 1.05086, 1.0421, 1.06465, 1.04967, 1.06041, 1.06323, 1.04845, 1.07204, 1.07309, 1.06255, 1.06668, 1.07368, 1.07578, 1.06118, 1.07081, 1.08665, 1.08285, 1.09207, 1.07258, 1.07295, 1.05646, 1.10037, 1.08345, 1.06726, 1.0838, 1.10877, 1.10527, 1.11162, 1.08716, 1.08529, 1.11449, 1.09857, 1.10635, 1.11127, 1.09895, 1.12533, 1.09641, 1.09067, 1.1134, 1.13373, 1.12131, 1.11586, 1.1358, 1.12, 1.10818, 1.12557, 1.10944, 1.1085, 1.12191, 1.14269, 1.1383, 1.15806, 1.14039, 1.15053, 1.12165, 1.15717, 1.15696, 1.15456, 1.12488, 1.13982, 1.15221, 1.12349, 1.1748, 1.15466, 1.14265, 1.16054, 1.17531, 1.16154, 1.13758, 1.13714, 1.15645, 1.14809, 1.14631, 1.1221, 1.16636, 1.13728, 1.11477, 1.13901, 1.14035, 1.11256, 1.13139, 1.13045, 1.13523, 1.09159, 1.10074, 1.09489, 1.10734, 1.09651, 1.0664, 1.07831, 1.05352, 1.04875, 1.0635, 1.05422, 1.05633, 1.02081, 1.03139, 1.07329, 1.06497, 1.00446, 0.994957, 0.999692, 0.967688, 1.02161, 0.949961, 0.956555, 1.04713, 0.953724, 0.946737, 0.945791, 0.904399, 1.03012, 0.934885, 0.995786, 0.958601, 0.981211, 0.893249, 0.909833, 0.784043, 0.982165, 0.837975, 0.940985, 0.900275, 0.899496, 0.833673, 0.853518, 0.878036, 0.84179, 0.801786, 0.777733, 0.76601, 0.848504, 0.639497, 0.759778, 0.718674, 0.696038, 0.908717, 1.0564, 1.191, 0.742441, 0.630599, 0.835246, 1.32247, 0.900755, 0.696038, 1.0546, 0.68499, 0.438246, 0.841046, 0.421841, 0.406022, 0.556831, 0.618701, 1.16006, 0.618701, 0.0773376, 0.464025, 1.39208, 0.30935, 1.8561, 1, 1.39208, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.}, + // RefMult: 135#leq Vz #leq145 + {0.872908, 0.843096, 1.0054, 1.15974, 1.21228, 1.20963, 1.17763, 1.15584, 1.13412, 1.09952, 1.07636, 1.06474, 1.05417, 1.02417, 1.01362, 1.00804, 0.998983, 0.992403, 0.984478, 0.974728, 0.969563, 0.961574, 0.965694, 0.953456, 0.963036, 0.949282, 0.951406, 0.967747, 0.952238, 0.945719, 0.951699, 0.94456, 0.942537, 0.957434, 0.943928, 0.944148, 0.941169, 0.936261, 0.9422, 0.946992, 0.93727, 0.947963, 0.95115, 0.953563, 0.946442, 0.936713, 0.939739, 0.938289, 0.948171, 0.945537, 0.946853, 0.941908, 0.941828, 0.939469, 0.942125, 0.955711, 0.934495, 0.948691, 0.938047, 0.932478, 0.938185, 0.950658, 0.949336, 0.941089, 0.942823, 0.937283, 0.944677, 0.944378, 0.94759, 0.943322, 0.947044, 0.943372, 0.950786, 0.942819, 0.957921, 0.939978, 0.945782, 0.948038, 0.942393, 0.949431, 0.936473, 0.955306, 0.945948, 0.948869, 0.95157, 0.940517, 0.949356, 0.959724, 0.947808, 0.942858, 0.970468, 0.950766, 0.970693, 0.940687, 0.940271, 0.928855, 0.947051, 0.946353, 0.96058, 0.939949, 0.952511, 0.946174, 0.95289, 0.954841, 0.958032, 0.953381, 0.948078, 0.95768, 0.953119, 0.964115, 0.959017, 0.94242, 0.958819, 0.962762, 0.945921, 0.955002, 0.964604, 0.95865, 0.969255, 0.967499, 0.952702, 0.946904, 0.975642, 0.96652, 0.956984, 0.954647, 0.961606, 0.948586, 0.968697, 0.933877, 0.977783, 0.98519, 0.958792, 0.961048, 0.953138, 0.964196, 0.981694, 0.941975, 0.965623, 0.967052, 0.96546, 0.962665, 0.96018, 0.978508, 0.962842, 0.962428, 0.970386, 0.960327, 0.976474, 0.978059, 0.960851, 0.969506, 0.97701, 0.974198, 1.00195, 0.972031, 0.974886, 0.986004, 0.988241, 0.966187, 0.976072, 0.968845, 0.983535, 0.979664, 0.981174, 0.988697, 1.00232, 0.997824, 0.990971, 0.996491, 1.00467, 1.00271, 0.96774, 1.00978, 0.982311, 0.987796, 0.991636, 1.01549, 1.00146, 0.998803, 1.01595, 0.999677, 1.00059, 1.00361, 1.03972, 1.013, 1.02064, 1.01385, 1.00224, 1.02504, 1.01917, 1.01452, 0.996885, 1.02504, 1.03776, 1.02079, 1.01472, 1.03893, 1.02056, 1.02728, 1.01283, 1.02003, 1.04149, 1.03674, 1.04346, 1.02827, 1.06644, 1.03941, 1.07782, 1.04565, 1.04837, 1.07008, 1.04219, 1.06169, 1.06396, 1.0598, 1.07794, 1.07435, 1.06566, 1.07586, 1.08396, 1.08895, 1.07273, 1.09183, 1.08529, 1.09441, 1.08138, 1.09873, 1.09859, 1.08725, 1.11495, 1.11332, 1.08549, 1.09219, 1.09697, 1.13522, 1.1068, 1.14131, 1.10811, 1.11208, 1.12759, 1.12197, 1.15578, 1.15412, 1.12777, 1.16815, 1.13059, 1.1537, 1.11437, 1.13238, 1.129, 1.1948, 1.15025, 1.15488, 1.16519, 1.15809, 1.19988, 1.21097, 1.19791, 1.15807, 1.17039, 1.18523, 1.20001, 1.15822, 1.17803, 1.17802, 1.21727, 1.19956, 1.22936, 1.21221, 1.21167, 1.22023, 1.21258, 1.22658, 1.21696, 1.26291, 1.21681, 1.25078, 1.23742, 1.22107, 1.28351, 1.22127, 1.23082, 1.24373, 1.24924, 1.3042, 1.21977, 1.24472, 1.23832, 1.28294, 1.19716, 1.20758, 1.23319, 1.23932, 1.2149, 1.19804, 1.2473, 1.20958, 1.20156, 1.21872, 1.17655, 1.15405, 1.15526, 1.15407, 1.19387, 1.18318, 1.12545, 1.16131, 1.11956, 1.11999, 1.11994, 1.13432, 1.12128, 1.08647, 1.05445, 1.07182, 1.21141, 1.09846, 1.07923, 1.05468, 1.0538, 1.12395, 1.02238, 1.00462, 1.01848, 1.1166, 1.02089, 1.01052, 0.996308, 1.07655, 1.05279, 0.975063, 1.0323, 1.02669, 0.924773, 0.903096, 0.865681, 0.899399, 0.917252, 0.847634, 0.969235, 1.02398, 0.857155, 0.912979, 0.823099, 0.827296, 0.81268, 0.833697, 0.797346, 0.750166, 0.876839, 0.976526, 0.973682, 0.769907, 1.15745, 0.805155, 0.744956, 0.81268, 0.828308, 0.954015, 1.36243, 0.670461, 0.60951, 0.507925, 1.04971, 0.690778, 0.90645, 0.338617, 0.355547, 0.696583, 1.62536, 0.290243, 0.325072, 0.135447, 0.677233, 0.20317, 0.270893, 0.81268, 1, 1.21902, 1.62536, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.} +}; + +/* +//------------------------------------------------ +//------------- d+Au 200 GeV 2021 --------------- +//------------------------------------------------ + +// Number of nch bins +const int dau200_run21_nchBins = 150; +// Number of z vertex bins +const int dau200_run21_nVzBins = 10; +// Ranges of vz bins +const double dau200_run21_vzRangeLimits[dau200_run21_nVzBins][2] = { + {-45., -35.}, + {-35., -25.}, + {-25., -15.}, + {-15., -5.}, + { -5., 5.}, + { 5., 15.}, + { 15., 25.}, + { 25., 35.}, + { 35., 45.}, + { 45., 55.} +}; +// Values of vz correction (refMultAtCenter/refMultElsewhere) +const double dau200_run21_vzCorr[dau200_run21_nVzBins] = { + 1.138334, //(-45,-35)cm + 1.062401, //(-35,-25)cm + 1.021870, //(-25,-15)cm + 1.005578, //(-15,-5 )cm + 0.999073, //(-5 , 5 )cm + 0.997313, //( 5 , 15)cm + 0.998079, //( 15, 25)cm + 0.998944, //( 25, 35)cm + 0.995436, //( 35, 45)cm + 0.995224 //( 45, 55)cm +}; +// Shape correction values +const double dau200_run21_shapeWeightArray[dau200_run21_nVzBins][dau200_run21_nchBins] = { + // nch: -50 #leq Vz #leq -40 cm + {0.311521, 0.785813, 0.863541, 0.897319, 0.846426, 0.933433, 0.945319, 0.924839, 0.939947, 0.999125, 1.005165, 0.98313, 0.885164, 1.002847, 1.054853, 1.064806, 1.064754, 1.061151, 1.061136, 1.071735, 0.956987, 1.090182, 1.102878, 1.088915, 1.097804, 1.103796, 1.119471, 1.103403, 0.996514, 1.054726, 1.11187, 1.113255, 1.110055, 1.099316, 1.090056, 1.08861, 1.008384, 0.996151, 1.086539, 1.074767, 1.06486, 1.053785, 1.037135, 1.032398, 0.982566, 0.908265, 1.025298, 1.011261, 1.004254, 0.986327, 0.969689, 0.960173, 0.935778, 0.814697, 0.936335, 0.931172, 0.90209, 0.889924, 0.868226, 0.86274, 0.859885, 0.751651, 0.806524, 0.814356, 0.812439, 0.785163, 0.78078, 0.769797, 0.73592, 0.678568, 0.683795, 0.710574, 0.689987, 0.689852, 0.648556, 0.64672, 0.615248, 0.578823, 0.546708, 0.623687, 0.584657, 0.559333, 0.54651, 0.543574, 0.518181, 0.478855, 0.399803, 0.461619, 0.447423, 0.456328, 0.406171, 0.409328, 0.391352, 0.350181, 0.309894, 0.336282, 0.42173, 0.387781, 0.356843, 0.429197, 0.317571, 0.277004, 0.25604, 0.295126, 0.252828, 0.274801, 0.381376, 0.22152, 0.254003, 0.187183, 0.223027, 0.220372, 0.317813, 0.292723, 0.171916, 0.223027, 0.356843, 0.33454, 0.080537, 0.099123, 0.66908, 0.144967, 0.125453, 0.16727, 0.111513, 0.33454, 0.33454, 0.055757, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0}, + // nch: -40 #leq Vz #leq -30 cm + {0.557605, 0.925588, 0.940388, 0.978891, 0.98316, 0.970808, 0.976869, 0.943705, 0.92975, 0.993706, 0.998046, 0.998262, 0.98313, 0.995485, 1.012491, 1.019311, 1.018519, 1.013049, 1.019603, 1.036557, 1.032854, 1.030975, 1.026925, 1.028358, 1.039313, 0.974296, 1.031675, 1.031125, 1.040051, 1.039833, 1.037581, 1.024559, 1.035025, 1.033005, 1.025464, 1.028832, 1.030208, 1.027951, 1.019093, 1.018406, 1.01534, 1.012719, 0.950848, 1.014347, 1.006474, 1.001159, 1.011485, 0.994094, 0.996721, 0.996355, 0.980751, 0.971891, 0.977317, 0.960077, 0.969445, 0.959998, 0.947615, 0.946069, 0.954806, 0.903879, 0.93612, 0.942579, 0.925384, 0.930339, 0.917698, 0.916956, 0.913279, 0.903469, 0.896993, 0.872751, 0.881597, 0.869558, 0.856419, 0.851365, 0.842127, 0.836638, 0.780992, 0.835158, 0.81393, 0.807505, 0.791064, 0.835462, 0.759234, 0.788312, 0.756095, 0.722147, 0.669968, 0.692505, 0.737658, 0.728731, 0.647351, 0.734946, 0.763417, 0.59503, 0.66743, 0.701192, 0.677834, 0.733162, 0.730615, 0.712496, 0.653379, 0.757922, 0.575548, 0.765601, 0.655873, 0.604714, 0.529822, 0.484846, 0.628815, 0.80093, 0.736174, 0.942939, 0.647561, 0.47715, 0.945779, 1.226957, 0.654377, 0.490783, 1.329203, 1.635942, 0.613478, 0.664602, 0.460109, 0.306739, 0.204493, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0}, + // nch: -30 #leq Vz #leq -20 cm + {0.82678, 0.971285, 0.981202, 0.993593, 0.989706, 0.997641, 0.992824, 0.983186, 0.99836, 0.999373, 1.000581, 1.000144, 0.989142, 1.000112, 1.005339, 1.004607, 1.003538, 1.000112, 1.007763, 1.010133, 1.007461, 1.010075, 0.998333, 0.991221, 1.004314, 1.012203, 1.004958, 1.012489, 1.008015, 1.014475, 1.006739, 1.004073, 1.016319, 1.008207, 1.005554, 1.004894, 1.007355, 1.00334, 1.006715, 1.006129, 0.996516, 0.999067, 1.010526, 1.004173, 0.998141, 1.000014, 0.997912, 0.995717, 1.006279, 0.999662, 0.989967, 0.990254, 0.991015, 0.979881, 0.994333, 0.979626, 0.97808, 0.987252, 0.998316, 0.985877, 0.984606, 0.991586, 0.981436, 0.985383, 0.979717, 0.965135, 0.958973, 0.968505, 0.96159, 0.948998, 0.986771, 0.960201, 0.953344, 0.967398, 0.945439, 0.976875, 0.932492, 0.94594, 0.964049, 0.936008, 0.957293, 0.95763, 0.895085, 0.922868, 0.971695, 0.904466, 0.844005, 0.912836, 0.971081, 0.909868, 0.91109, 0.936842, 1.019341, 1.028523, 0.957362, 0.833714, 1.024116, 0.921574, 0.922148, 0.968894, 0.931848, 1.043715, 1.068878, 0.735844, 1.087408, 0.950965, 0.942696, 1.430095, 0.924653, 1.727356, 0.661541, 1.715871, 1.047439, 2.315392, 2.039751, 0.441027, 1.764109, 1.984622, 0.716669, 1.0, 1.984622, 2.150007, 0.496156, 0.496156, 1.0, 1.0, 0.992311, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0}, + // nch: -20 #leq Vz #leq -10 cm + {0.962046, 0.99017, 0.990874, 0.999714, 0.994843, 0.995324, 0.998077, 0.995417, 1.000541, 1.000958, 0.998055, 0.99948, 0.995224, 1.002282, 1.001665, 1.001933, 1.00335, 0.99988, 1.002269, 1.005242, 1.001262, 1.003628, 1.001198, 1.004119, 0.999862, 1.003893, 1.002812, 1.003133, 1.003195, 1.001739, 0.998477, 1.00414, 0.999427, 1.001658, 1.002977, 1.001676, 1.001121, 0.998009, 1.004257, 0.996879, 0.994947, 1.00116, 1.000555, 0.996511, 0.999566, 0.998401, 0.996998, 0.996867, 1.003316, 0.997974, 0.999667, 0.996914, 0.995533, 1.004778, 0.994522, 0.997329, 0.996749, 0.997834, 1.001207, 0.990599, 0.996992, 0.992324, 1.001582, 0.999306, 0.995369, 1.004091, 0.984434, 0.996026, 0.980062, 0.992566, 0.997204, 0.980936, 0.995023, 0.98477, 1.007769, 0.991115, 0.977209, 1.026524, 0.969275, 0.981984, 0.990289, 0.989945, 0.981563, 1.031367, 0.999827, 0.944489, 0.976768, 1.050771, 1.014376, 0.990006, 1.029408, 1.012402, 1.053204, 0.967802, 0.963579, 0.999976, 0.922294, 1.053842, 0.966426, 1.025724, 1.068293, 1.033693, 0.901253, 1.169695, 1.018752, 1.118834, 1.074134, 0.976142, 1.058779, 1.365437, 0.796851, 1.929043, 1.01905, 0.887402, 1.228479, 1.859319, 1.062468, 1.115591, 1.510697, 1.859319, 2.788978, 1.007131, 0.697245, 0.697245, 0.929659, 1.0, 0.697245, 0.348622, 0.232415, 1.0, 1.0, 1.0, 1.0, 0.232415, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0}, + // nch: -10 #leq Vz #leq 0 cm + {1.016281, 1.00043, 0.993818, 0.993086, 0.997911, 0.993606, 0.996611, 0.998174, 0.995639, 0.997926, 1.001822, 0.996917, 1.00061, 1.001508, 0.999474, 1.000822, 1.002578, 1.002509, 1.002016, 1.000522, 1.002323, 0.999669, 1.00339, 1.001533, 1.003876, 1.000421, 1.001839, 1.003864, 1.001433, 1.001594, 1.002285, 0.99863, 1.001308, 0.99874, 1.000618, 1.001546, 1.001894, 1.001274, 0.995494, 1.002363, 1.000628, 0.999724, 0.999051, 1.002191, 0.997324, 0.998252, 1.000725, 1.001142, 0.994749, 0.996797, 0.999608, 1.001102, 0.998745, 0.994249, 1.000644, 0.997482, 0.99838, 0.994775, 0.998077, 1.006015, 0.994208, 0.99275, 0.994741, 1.001707, 0.997116, 0.985661, 1.010276, 1.004721, 1.000151, 0.987435, 0.991924, 1.000557, 0.998383, 1.010221, 1.000689, 0.988212, 1.000188, 0.989815, 1.020931, 1.022041, 1.023522, 0.993172, 1.002319, 0.999305, 1.002866, 1.002226, 1.003393, 0.982701, 0.959792, 1.038966, 0.979317, 1.01907, 1.024037, 1.125275, 1.003806, 1.016544, 1.091983, 0.967552, 1.031688, 1.056692, 1.071851, 0.955256, 1.025261, 1.033859, 1.052552, 1.020749, 0.983765, 0.99008, 1.132193, 0.927057, 0.903746, 0.955, 0.983765, 0.72488, 1.277169, 0.662747, 1.767326, 0.736386, 0.717976, 1.104579, 0.552289, 1.79494, 2.485302, 0.828434, 1.104579, 0.331374, 1.656868, 0.828434, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0}, + // nch: 0 #leq Vz #leq 10 cm + {1.033268, 0.999654, 1.000526, 1.000293, 0.997404, 0.998096, 0.998478, 0.998253, 1.000041, 0.996433, 0.998242, 1.001891, 1.002194, 0.999129, 0.999547, 1.000649, 0.999092, 1.000866, 0.998396, 0.999538, 1.000588, 1.001225, 0.998016, 0.998973, 1.000858, 0.99994, 0.999017, 0.997955, 0.998009, 1.000782, 1.002064, 1.003502, 1.000161, 1.002998, 0.998035, 0.998855, 0.998835, 1.002552, 1.001586, 0.999776, 1.002911, 0.999414, 1.002591, 1.002581, 1.002228, 1.002027, 1.001486, 1.001103, 1.005485, 1.000835, 0.997946, 0.996301, 0.998931, 0.999545, 0.999958, 0.993646, 0.999779, 1.000287, 0.995573, 0.99946, 1.00914, 1.000796, 0.998909, 0.996271, 1.001029, 1.004269, 0.997943, 0.99625, 1.008238, 0.996852, 1.003514, 1.015518, 0.99329, 1.000056, 0.984408, 1.008278, 1.002497, 0.99373, 1.003964, 0.978424, 0.979366, 1.004451, 1.011779, 0.977447, 0.987942, 1.017549, 0.979169, 0.953104, 0.986223, 0.948805, 0.978391, 0.997767, 0.951177, 0.930788, 1.003419, 0.970216, 1.003065, 0.954753, 0.955953, 0.987396, 0.872667, 0.982725, 1.041092, 0.877242, 0.939392, 1.060228, 1.009121, 0.997613, 1.043422, 0.98143, 1.396077, 0.804683, 0.910187, 1.425162, 1.0044, 1.085838, 0.579113, 1.303005, 0.882243, 0.620479, 3.257513, 0.882243, 1.221567, 0.814378, 1.085838, 1.0, 0.814378, 1.0, 1.0, 1.0, 1.0, 0.271459, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0}, + // nch: 10 #leq Vz #leq 20 cm + {0.982164, 1.010485, 1.017182, 1.008757, 1.011446, 1.015637, 1.008253, 1.009407, 1.0049, 1.006052, 1.001952, 1.002108, 1.001606, 0.996791, 0.999465, 0.996146, 0.994398, 0.995933, 0.997074, 0.994438, 0.995057, 0.995111, 0.996956, 0.995038, 0.994274, 0.99547, 0.995963, 0.994428, 0.997308, 0.995227, 0.996223, 0.993107, 0.998768, 0.996161, 0.998521, 0.997714, 0.997888, 0.997376, 0.999249, 1.000626, 1.000997, 0.999845, 0.997424, 0.997784, 1.001086, 1.001396, 1.000442, 1.000529, 0.996417, 1.005175, 1.003396, 1.006512, 1.007696, 1.002807, 1.005088, 1.014086, 1.005789, 1.008608, 1.006676, 1.003197, 0.999324, 1.01663, 1.006356, 1.003224, 1.007331, 1.008788, 1.006523, 1.002971, 1.011347, 1.028577, 1.008941, 1.000979, 1.015903, 1.003583, 1.010648, 1.014523, 1.021797, 0.993447, 1.002891, 1.019912, 1.007568, 1.014088, 1.002581, 0.997221, 1.011795, 1.03953, 1.049467, 1.032809, 1.058037, 1.031108, 1.024152, 0.967425, 0.980877, 0.987321, 1.03196, 1.017789, 0.979916, 1.048879, 1.058209, 0.927563, 1.029197, 1.048277, 1.037478, 0.978756, 0.9975, 0.827929, 0.940419, 1.043136, 0.795814, 0.861592, 1.055909, 0.869449, 1.139902, 1.319886, 0.678275, 1.055909, 1.407879, 1.055909, 1.429877, 1.173232, 0.659943, 0.714938, 0.659943, 1.0, 0.879924, 1.319886, 1.319886, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0}, + // nch: 20 #leq Vz #leq 30 cm + {0.892445, 1.015754, 1.048866, 1.056072, 1.051968, 1.049592, 1.046972, 1.041696, 1.020743, 1.019351, 1.013211, 1.004481, 1.00088, 0.996247, 0.993356, 0.988673, 0.991306, 0.993676, 0.985296, 0.986627, 0.983478, 0.985365, 0.984861, 0.984381, 0.984246, 0.982494, 0.978992, 0.983144, 0.978955, 0.982262, 0.980473, 0.982655, 0.986499, 0.986455, 0.992946, 0.985397, 0.982221, 0.992885, 0.989563, 0.987216, 0.987917, 0.993123, 0.998553, 0.995501, 1.001157, 1.004346, 1.003704, 1.009155, 1.010448, 1.003771, 1.005137, 1.007621, 1.018975, 1.013183, 1.021442, 1.027287, 1.027877, 1.018697, 1.03466, 1.034319, 1.033508, 1.027066, 1.032038, 1.037189, 1.027048, 1.034673, 1.047823, 1.06559, 1.03077, 1.049041, 1.047721, 1.036513, 1.065049, 1.038148, 1.039421, 1.065807, 1.068163, 1.041033, 1.068335, 1.033778, 1.048522, 1.092622, 1.074886, 1.082237, 1.056644, 1.053736, 0.993099, 1.116058, 1.228376, 1.116945, 1.058382, 1.224868, 1.036354, 1.031417, 0.977097, 1.1064, 1.076781, 1.253364, 1.142706, 1.147328, 0.964216, 1.054632, 1.268731, 0.87996, 1.005123, 1.234123, 1.213682, 1.288832, 0.833317, 1.077736, 1.341438, 2.474208, 0.943975, 2.086681, 1.10296, 0.596195, 1.192389, 0.715434, 0.387526, 1.0, 0.596195, 0.968816, 1.0, 0.447146, 0.596195, 1.0, 1.0, 1.0, 0.298097, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0}, + // nch: 30 #leq Vz #leq 40 cm + {0.788714, 1.01881, 1.111573, 1.126551, 1.123285, 1.120335, 1.097467, 1.083356, 1.05735, 1.046576, 1.031962, 1.021572, 1.010949, 1.001052, 0.997644, 0.986981, 0.98322, 0.977977, 0.973583, 0.979837, 0.967891, 0.97339, 0.964415, 0.963507, 0.962064, 0.964165, 0.956625, 0.964961, 0.962907, 0.951885, 0.957159, 0.960011, 0.960082, 0.964526, 0.965212, 0.964683, 0.973234, 0.977161, 0.966419, 0.971013, 0.979442, 0.981725, 0.991601, 0.999486, 0.996633, 1.001398, 1.00589, 1.005979, 1.004629, 1.020801, 1.011431, 1.01572, 1.037008, 1.032471, 1.038428, 1.047498, 1.03811, 1.034406, 1.058786, 1.071799, 1.073686, 1.079782, 1.090962, 1.101739, 1.076447, 1.104352, 1.122991, 1.112591, 1.102688, 1.099125, 1.145702, 1.10395, 1.112408, 1.14695, 1.133257, 1.140458, 1.178033, 1.189054, 1.157379, 1.192641, 1.201816, 1.186348, 1.195036, 1.187548, 1.216925, 1.155501, 1.207462, 1.118815, 1.248661, 1.240835, 1.10256, 1.215508, 1.139334, 1.167958, 1.144393, 1.18094, 1.57304, 1.667662, 1.384611, 1.302006, 1.079667, 1.393563, 1.438182, 1.207601, 1.896628, 2.559057, 2.959605, 1.156464, 1.774032, 1.355764, 1.038458, 1.795667, 2.466337, 3.634603, 1.067304, 2.076916, 1.0, 0.519229, 1.124996, 1.384611, 1.038458, 0.562498, 0.778843, 0.259614, 1.0, 1.0, 1.0, 1.0, 0.173076, 1.0, 1.0, 0.086538, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0}, + // nch: 40 #leq Vz #leq 50 cm + {0.560949, 0.949118, 1.1366, 1.209637, 1.219796, 1.186593, 1.167876, 1.139532, 1.095436, 1.072831, 1.064607, 1.049568, 1.034996, 1.018441, 1.004598, 0.998168, 0.999019, 0.980311, 0.982594, 0.972619, 0.950002, 0.958462, 0.952566, 0.946757, 0.942017, 0.936023, 0.938059, 0.935694, 0.939077, 0.937977, 0.945762, 0.941424, 0.941481, 0.942959, 0.945165, 0.954208, 0.943786, 0.953594, 0.953225, 0.944336, 0.967645, 0.971778, 0.974381, 0.990966, 0.992623, 0.981005, 0.984605, 1.006736, 1.006672, 1.025136, 1.018864, 1.010719, 1.054839, 1.039633, 1.06185, 1.05017, 1.045787, 1.062013, 1.089222, 1.076791, 1.081246, 1.10216, 1.126396, 1.136655, 1.102302, 1.131005, 1.137202, 1.122757, 1.129203, 1.186845, 1.164576, 1.177627, 1.173985, 1.158234, 1.232534, 1.180819, 1.212841, 1.209048, 1.237775, 1.312539, 1.226231, 1.359976, 1.260026, 1.402629, 1.425103, 1.460774, 1.231473, 1.345434, 1.434776, 1.433042, 1.322621, 1.624862, 1.348721, 1.940037, 1.349209, 1.683359, 1.872337, 1.296629, 1.222751, 1.060532, 1.119273, 1.904356, 0.978429, 1.5301, 1.474652, 1.031696, 7.670435, 0.824235, 0.919555, 2.108248, 1.0, 0.930769, 1.278406, 0.627989, 0.829842, 1.0, 1.435403, 1.0, 0.583132, 1.0, 1.0, 0.291566, 1.0, 1.0, 1.0, 0.269138, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0} +}; +*/ + #endif diff --git a/StRoot/StRefMultCorr/StRefMultCorr.cxx b/StRoot/StRefMultCorr/StRefMultCorr.cxx index eb3a0d7371f..f16c8266d66 100644 --- a/StRoot/StRefMultCorr/StRefMultCorr.cxx +++ b/StRoot/StRefMultCorr/StRefMultCorr.cxx @@ -406,6 +406,207 @@ Bool_t StRefMultCorr::passnTofMatchRefmultCut(Double_t refmult, Double_t ntofmat refmultcutmin = calcPileUpRefMult(ntofmatch, c0, c1, c2, c3, c4); notPileUp = isInPileUpRefMultLimits(refmult, refmultcutmin, refmultcutmax); } + else if ( mParameterIndex==42 ) { // Au+Au 9.2 GeV 2020 TriggerID = 780020 + + if ( -145. <= vz && vz < -87. ) { + b0=25.6055790979197; + b1=2.02528136596901; + b2=-0.0058370984051939; + b3=2.59602314466234e-05; + b4=-5.3014743584261e-08; + c0=-17.7059596791057; + c1=0.614538168662738; + c2=0.00534180935164814; + c3=-1.79582873880806e-05; + c4=1.01623054170579e-08; + } + else if ( -87. <= vz && vz < -29. ) { + b0=23.0160060308621; + b1=1.61885832757588; + b2=-0.00275873189631398; + b3=1.31262550392554e-05; + b4=-2.94368020941846e-08; + c0=-17.3591842617911; + c1=0.796170989774258; + c2=0.000670722514533827; + c3=3.26258075150876e-06; + c4=-1.60611460182112e-08; + } + else if ( -29. <= vz && vz < 29. ) { + b0=16.4277056306649; + b1=1.71652229539398; + b2=-0.00406847684302521; + b3=1.65203560938885e-05; + b4=-2.96250329214512e-08; + c0=-15.7887025834219; + c1=0.789786364309292; + c2=-0.000637115144252616; + c3=1.00019972792727e-05; + c4=-2.45208851616324e-08; + } + else if ( 29. <= vz && vz < 87. ) { + b0=21.2024767158778; + b1=1.70521848381614; + b2=-0.00352260930859763; + b3=1.60905730948817e-05; + b4=-3.37443468806432e-08; + c0=-17.1166088395929; + c1=0.814739436616432; + c2=0.000227197779215977; + c3=6.55397838050604e-06; + c4=-2.28812912596058e-08; + } + else if ( 87. <= vz && vz <= 145. ) { + b0=26.0970905882739; + b1=1.88889714311734; + b2=-0.00195374948885512; + b3=-6.14244087431038e-06; + b4=1.99930095058841e-08; + c0=-15.6624325989392; + c1=0.52385751891358; + c2=0.00794996911844969; + c3=-4.09239155250494e-05; + c4=6.40163739983216e-08; + } + + refmultcutmax = calcPileUpRefMult(ntofmatch, b0, b1, b2, b3, b4); + refmultcutmin = calcPileUpRefMult(ntofmatch, c0, c1, c2, c3, c4); + notPileUp = isInPileUpRefMultLimits(refmult, refmultcutmin, refmultcutmax); + } + else if ( mParameterIndex==43 ) { // Au+Au 17.3 GeV 2021 + + if ( -145. <= vz && vz < -87. ) { + b0=25.8023785946209; + b1=1.80974818833103; + b2=-0.00230107205687879; + b3=1.04069753338853e-05; + b4=-2.43265995270951e-08; + c0=-25.7628397848; + c1=1.15844463977968; + c2=-0.00285234327923795; + c3=1.68279361312683e-05; + c4=-2.89872992178789e-08; + } + else if ( -87. <= vz && vz < -29. ) { + b0=26.2142811336132; + b1=1.40180659301151; + b2=-0.000197781802002694; + b3=1.02666189094347e-06; + b4=-5.52762010064236e-09; + c0=-21.4352021999217; + c1=1.01067273031472; + c2=-0.00160328567162831; + c3=8.94486444751978e-06; + c4=-1.46093145276812e-08; + } + else if ( -29. <= vz && vz < 29. ) { + b0=20.1361585417616; + b1=1.54339163322734; + b2=-0.00277257992675217; + b3=1.01670412308599e-05; + b4=-1.4564482074994e-08; + c0=-18.0093218064881; + c1=0.858263071231256; + c2=-0.000411359635522234; + c3=4.21562873026016e-06; + c4=-8.07993954642765e-09; + } + else if ( 29. <= vz && vz < 87. ) { + b0=25.8570023358432; + b1=1.37245590215625; + b2=-5.45184310087876e-05; + b3=6.25643605701836e-07; + b4=-4.90542835006027e-09; + c0=-20.7158089395719; + c1=1.00148007639466; + c2=-0.00138806953636318; + c3=7.92595642206008e-06; + c4=-1.32107375325913e-08; + } + else if ( 87. <= vz && vz <= 145. ) { + b0=28.2036847494035; + b1=1.640750436652; + b2=-0.000569887807630565; + b3=3.95821109316978e-06; + b4=-1.60367555403757e-08; + c0=-26.3129222166004; + c1=1.21481523017369; + c2=-0.00341644731702994; + c3=1.84782571448044e-05; + c4=-3.03333077890128e-08; + } + + refmultcutmax = calcPileUpRefMult(ntofmatch, b0, b1, b2, b3, b4); + refmultcutmin = calcPileUpRefMult(ntofmatch, c0, c1, c2, c3, c4); + notPileUp = isInPileUpRefMultLimits(refmult, refmultcutmin, refmultcutmax); + } + else if ( mParameterIndex==44 ) { // Au+Au 11.5 GeV 2020 + + if ( -145. <= vz && vz < -87. ) { + b0=18.0402708948567; + b1=2.09478604674414; + b2=-0.00685576746251115; + b3=3.88333589216404e-05; + b4=-8.12179090437804e-08; + c0=-12.7515169659501; + c1=0.705235205311516; + c2=0.00321598985910965; + c3=-1.56896265545575e-05; + c4=2.97072869656044e-08; + } + else if ( -87. <= vz && vz < -29. ) { + b0=14.2601983060724; + b1=1.71255613728895; + b2=-0.00383919825526746; + b3=1.7756145374654e-05; + b4=-3.19509246865534e-08; + c0=-10.9408282877465; + c1=0.617024824873745; + c2=0.00264576299008488; + c3=-1.158420066816e-05; + c4=2.01763088491799e-08; + } + else if ( -29. <= vz && vz < 29. ) { + b0=11.1331231719184; + b1=1.69710478538775; + b2=-0.00464826171041643; + b3=2.02639545153783e-05; + b4=-3.4169236655577e-08; + c0=-8.82209022882564; + c1=0.524312884632579; + c2=0.00321682247003759; + c3=-1.35894996081641e-05; + c4=2.26005417512409e-08; + } + else if ( 29. <= vz && vz < 87. ) { + b0=14.615141872526; + b1=1.69217111894767; + b2=-0.00377600546419821; + b3=1.83551619792816e-05; + b4=-3.48332786210067e-08; + c0=-11.0113966446419; + c1=0.616128886729022; + c2=0.00278642638292705; + c3=-1.3124493295967e-05; + c4=2.44388293439677e-08; + } + else if ( 87. <= vz && vz <= 145. ) { + b0=17.988224598148; + b1=2.07853473508418; + b2=-0.00668791264313384; + b3=3.61562317906595e-05; + b4=-7.30405696800251e-08; + c0=-12.6730707166176; + c1=0.709713827776669; + c2=0.00318794623382361; + c3=-1.47530903374243e-05; + c4=2.55638251982488e-08; + } + + refmultcutmax = calcPileUpRefMult(ntofmatch, b0, b1, b2, b3, b4); + refmultcutmin = calcPileUpRefMult(ntofmatch, c0, c1, c2, c3, c4); + notPileUp = isInPileUpRefMultLimits(refmult, refmultcutmin, refmultcutmax); + } else { notPileUp = kTRUE; } @@ -508,11 +709,66 @@ Bool_t StRefMultCorr::passnTofMatchRefmultCut(Double_t refmult, Double_t ntofmat refmultcutmin = calcPileUpRefMult(ntofmatch, c0, c1, c2, c3, c4); notPileUp = isInPileUpRefMultLimits(refmult, refmultcutmin, refmultcutmax); } + else if (mParameterIndex == 7) { // Run 20 Au+Au 13.5 GeV (sqrt(s_NN)=5.2 GeV) + b0=18.6707; + b1=6.92307; + b2=-0.0293523; + b3=0.000412261; + b4=-4.74922e-06; + c0=-14.4436; + c1=-0.047413; + c2=0.100793; + c3=-0.00121203; + c4=5.59521e-06; + + refmultcutmax = calcPileUpRefMult(ntofmatch, b0, b1, b2, b3, b4); + refmultcutmin = calcPileUpRefMult(ntofmatch, c0, c1, c2, c3, c4); + notPileUp = isInPileUpRefMultLimits(refmult, refmultcutmin, refmultcutmax); + } + else if (mParameterIndex == 8) { // Run 20 Au+Au 19.5 GeV (sqrt(s_NN)=6.2 GeV) + b0=25.0191; + b1=5.51924; + b2=0.0694824; + b3=-0.00121388; + b4=3.44057e-06; + c0=-16.9132; + c1=2.35278; + c2=-0.0341491; + c3=0.00131257; + c4=-9.0295e-06; + + refmultcutmax = calcPileUpRefMult(ntofmatch, b0, b1, b2, b3, b4); + refmultcutmin = calcPileUpRefMult(ntofmatch, c0, c1, c2, c3, c4); + notPileUp = isInPileUpRefMultLimits(refmult, refmultcutmin, refmultcutmax); + } else { notPileUp = kTRUE; } } + /* + else if ( mRefX == 6 ) { // refMult6 + if ( mParameterIndex==0 ) { // d+Au 200 GeV 2021 + b0 = 2.4412914662443033; + b1 = 5.523540420923605; + b2 = -0.16458436958697667; + b3 = 0.002805908341435613; + b4 = -1.6300934820294975e-05; + c0 = -0.86595124167792; + c1 = 0.44263208748354943; + c2 = 0.06024976895762696; + c3 = -0.0013523620327006189; + c4 = 1.0553696607739253e-05; + refmultcutmax = calcPileUpRefMult(ntofmatch, b0, b1, b2, b3, b4); + refmultcutmin = calcPileUpRefMult(ntofmatch, c0, c1, c2, c3, c4); + notPileUp = isInPileUpRefMultLimits(refmult, refmultcutmin, refmultcutmax); + } + else { + notPileUp = kTRUE; + } + } + */ + if (mVerbose) { std::cout << "\t notPileUp: "; if (notPileUp) { @@ -750,13 +1006,17 @@ Double_t StRefMultCorr::luminosityCorrection(Double_t zdcCoincidenceRate) const const Double_t par0_lum = mPar_luminosity[0][mParameterIndex] ; const Double_t par1_lum = mPar_luminosity[1][mParameterIndex] ; - if( mParameterIndex==36 || mParameterIndex==37 || mParameterIndex==40 ) { + if( mParameterIndex==36 || mParameterIndex==37 || mParameterIndex==40 || + ( mRefX==5 && mParameterIndex==7 ) || + ( mRefX==5 && mParameterIndex==8 ) ) { // if(mYear[mParameterIndex] == 2018 && mIsZr) zdcmean = 96.9914; // if(mYear[mParameterIndex] == 2018 && mIsRu) zdcmean = 97.9927; Double_t b_prime = 1.; if(mParameterIndex==36) b_prime = 96.9914; // Zr if(mParameterIndex==37) b_prime = 97.9927; // Ru if(mParameterIndex==40) b_prime = 213.383; // AuAu 200GeV Run19 + if(mParameterIndex==7 ) b_prime = 106.245; // AuAu 5.2GeV FXT Run20 + if(mParameterIndex==8 ) b_prime = 114.041; // AuAu 6.2GeV FXT Run20 lumiCorr = (par0_lum::epsilon() ) ? 1.0 : b_prime/(par0_lum+zdcCoincidenceRate*par1_lum); } else { @@ -795,7 +1055,7 @@ Double_t StRefMultCorr::vzCorrection(Double_t z) const { } Double_t vzCorr = 1.; - if ( mParameterIndex < 38 ) { + if ( mParameterIndex < 38 ) { // Old correction based on the 6th-order polynomial fit of the high-end point // fit of refMult for the given Vz range @@ -833,6 +1093,18 @@ Double_t StRefMultCorr::vzCorrection(Double_t z) const { // New Vz correction. All vz bins bins are normalize to that at the center vzCorr = auau7_run21_vzCorr[ getVzWindowForVzDepCentDef() ]; } + else if ( mParameterIndex == 42 ) { // Au+Au 9.2 GeV Run 20 TriggerID = 780020 + // New Vz correction. All vz bins bins are normalize to that at the center + vzCorr = auau9_trig2_run20_vzCorr[ getVzWindowForVzDepCentDef() ]; + } + else if ( mParameterIndex == 43 ) { // Au+Au 17.3 GeV Run 21 + // New Vz correction. All vz bins bins are normalize to that at the center + vzCorr = auau17_run21_vzCorr[ getVzWindowForVzDepCentDef() ]; + } + else if ( mParameterIndex == 44 ) { // Au+Au 11.5 GeV Run 20 + // New Vz correction. All vz bins bins are normalize to that at the center + vzCorr = auau11_run20_vzCorr[ getVzWindowForVzDepCentDef() ]; + } if (mVerbose) { std::cout << "\t Acceptance correction factor: " << vzCorr << std::endl; @@ -849,7 +1121,7 @@ Double_t StRefMultCorr::sampleRefMult(Int_t refMult) const { } Double_t refMult_d = -9999.; - if( mParameterIndex>=30 && mParameterIndex<=41 ) { + if( mParameterIndex>=30 && mParameterIndex<=44 ) { refMult_d = (Double_t)refMult - 0.5 + gRandom->Rndm(); } else { @@ -1140,7 +1412,7 @@ Double_t StRefMultCorr::getShapeWeight_SubVz2Center() const { } else if (mParameterIndex == 41) { // Au+Au 7.7 GeV 2020 - if (iVzBinIndex < 0 || iVzBinIndex > auau200_run19_nVzBins) return 1.0; + if (iVzBinIndex < 0 || iVzBinIndex > auau7_run21_nVzBins) return 1.0; weight = auau7_run21_shapeWeightArray[iVzBinIndex][TMath::Nint(mRefMult_corr)]; // Handle bad weight @@ -1148,6 +1420,50 @@ Double_t StRefMultCorr::getShapeWeight_SubVz2Center() const { weight = 1.; } } + else if (mParameterIndex == 42) { // Au+Au 9.2 GeV 2020 TrigerID = 780020 + + if (iVzBinIndex < 0 || iVzBinIndex > auau9_run20_nVzBins) return 1.0; + + weight = auau9_trig2_run20_shapeWeightArray[iVzBinIndex][TMath::Nint(mRefMult_corr)]; + // Handle bad weight + if (weight == 0 || TMath::IsNaN(weight)) { + weight = 1.; + } + } + else if (mParameterIndex == 43) { // Au+Au 17.3 GeV 2021 + + if (iVzBinIndex < 0 || iVzBinIndex > auau17_run21_nVzBins) return 1.0; + + weight = auau17_run21_shapeWeightArray[iVzBinIndex][TMath::Nint(mRefMult_corr)]; + // Handle bad weight + if (weight == 0 || TMath::IsNaN(weight)) { + weight = 1.; + } + } + else if (mParameterIndex == 44) { // Au+Au 11.5 GeV 2020 + + if (iVzBinIndex < 0 || iVzBinIndex > auau11_run20_nVzBins) return 1.0; + + weight = auau11_run20_shapeWeightArray[iVzBinIndex][TMath::Nint(mRefMult_corr)]; + // Handle bad weight + if (weight == 0 || TMath::IsNaN(weight)) { + weight = 1.; + } + } + + /* + else if (mRefX == 6 && mParameterIndex == 0) { // d+Au 200 GeV 2021 + + if (iVzBinIndex < 0 || iVzBinIndex > dau200_run21_nVzBins) return 1.0; + + weight = dau200_run21_shapeWeightArray[iVzBinIndex][TMath::Nint(mRefMult_corr)]; + // Handle bad weight + if (weight == 0 || TMath::IsNaN(weight)) { + weight = 1.; + } + } + */ + else { weight = 1.0; } @@ -1200,11 +1516,17 @@ Double_t StRefMultCorr::triggerWeight() const { && mRefMult_corr != -(par3/par2) ) { // avoid denominator = 0 // Parametrization of MC/data RefMult ratio - weight = ( par0 + - par1 / (par2 * mRefMult_corr + par3) + - par4 * (par2 * mRefMult_corr + par3) + - par6 / ( (par2 * mRefMult_corr + par3) * (par2 * mRefMult_corr + par3) ) + - par7 * ( (par2 * mRefMult_corr + par3) * (par2 * mRefMult_corr + par3) ) ); + if (mRefX == 5 && mParameterIndex == 0) { // Run 18 Au+Au 3.85 GeV (sqrt(s_NN)=3 GeV) + // Trigger efficiency correction does not exist. Temporarily set weight to 1 + weight = 1.; + } // else if (mRefX == 5 && mParameterIndex == 0) + else { + weight = ( par0 + + par1 / (par2 * mRefMult_corr + par3) + + par4 * (par2 * mRefMult_corr + par3) + + par6 / ( (par2 * mRefMult_corr + par3) * (par2 * mRefMult_corr + par3) ) + + par7 * ( (par2 * mRefMult_corr + par3) * (par2 * mRefMult_corr + par3) ) ); + } /* std::cout << "par0: " << par0 << " par1: " << par1 << " par2: " << par2 << " par3: " << par3 << " par4: " << par4 << " A: " << A @@ -1389,6 +1711,40 @@ Int_t StRefMultCorr::getVzWindowForVzDepCentDef() const { } } // for ( Int_t iVz=0; iVz10 /// "fxtmult" - number of primary tracks for the fixed-target mode of the experiment @@ -74,7 +75,7 @@ class StRefMultCorr { return !passnTofMatchRefmultCut(refmult, ntofmatch, vz); } /// Check if NOT pile-up event - Bool_t passnTofMatchRefmultCut(Double_t refmult, Double_t ntofmatch, Double_t vz=0.) const; + Bool_t passnTofMatchRefmultCut(Double_t refmult, Double_t ntofmatch, Double_t vz=0.) const; /// Get corrected multiplicity, correction as a function of primary z-vertex Double_t getRefMultCorr() const; @@ -120,7 +121,7 @@ class StRefMultCorr { void setVerbose(const Bool_t& verbose) { mVerbose = verbose; } private: - /// grefmult, refmult, refmult2, refmult3 or toftray (case insensitive), fxtmult + /// grefmult, refmult, refmult2, refmult3 or toftray (case insensitive), fxtmult, refmult6 const TString mName; /// Specify triggers, in case there are multiple parameters/definitions in the same runs const TString mSubName; @@ -198,12 +199,13 @@ class StRefMultCorr { /// 3 RefMult3 /// 4 RefMult4 /// 5 FxtMult + /// 6 RefMult6 Short_t mRefX; /// @brief Print debug information (default: kFALSE) Bool_t mVerbose; /// @brief Return reference multiplicity specified by the constructer - /// @return 0 - gRefMult, 1 - refMult, 2 - refMult2, 3 - refMult3, 4 - refMult4, 5 - fxtMult + /// @return 0 - gRefMult, 1 - refMult, 2 - refMult2, 3 - refMult3, 4 - refMult4, 5 - fxtMult, 6 - refMult6 const Int_t getRefX() const; const Int_t getNumberOfDatasets() const; /// Number of definitions for each X From 1132a843eba3b2096d4418d67ec9d332bd287587 Mon Sep 17 00:00:00 2001 From: Yuri Fisyak Date: Tue, 23 Apr 2024 09:24:22 -0400 Subject: [PATCH 16/45] =?UTF-8?q?Add=20Tommy's=20TpcRS=20tune=20up=20for?= =?UTF-8?q?=202023,=20see=20https://www.star.bnl.gov/~cts=E2=80=A6=20(#683?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add Tommy's TpcRS tune up for 2023, see https://www.star.bnl.gov/~ctsang/daq_2023AuAu200_TPC23_final/ and https://www.star.bnl.gov/~ctsang/daq_2023AuAu200_TPC23_final/README.md --- .../tpc/TpcResponseSimulator.y2023.C | 135 ++++++++++++++++++ 1 file changed, 135 insertions(+) create mode 100644 StarDb/Calibrations/tpc/TpcResponseSimulator.y2023.C diff --git a/StarDb/Calibrations/tpc/TpcResponseSimulator.y2023.C b/StarDb/Calibrations/tpc/TpcResponseSimulator.y2023.C new file mode 100644 index 00000000000..3cdec3bbc0b --- /dev/null +++ b/StarDb/Calibrations/tpc/TpcResponseSimulator.y2023.C @@ -0,0 +1,135 @@ +#ifndef __CINT__ +#include "tables/St_TpcResponseSimulator_Table.h" +#endif + +// $Id: TpcResponseSimulator.y2021.C,v 1.1 2021/05/10 21:02:56 fisyak Exp $ +// $Log: TpcResponseSimulator.y2021.C,v $ +// Revision 1.1 2021/05/10 21:02:56 fisyak +// Clean up and synch with TFG +// +// Revision 1.3 2019/05/23 11:50:01 fisyak +// Add default TpcAdcCorrectionMDF, 2019 version of TpcResponseSimulator +// +// Revision 1.2 2019/04/16 19:29:34 fisyak +// Run XIX preliminary dE/dx calibration +// +// Revision 1.1 2018/02/16 20:56:50 perev +// iTPC +// +// Revision 1.1 2017/02/07 16:58:36 fisyak +// Clean up +// +// Revision 1.1 2012/09/13 21:06:27 fisyak +// Default tables for devT +// +// Revision 1.1 2012/04/27 00:31:31 perev +// All defE tables +// +// Revision 1.8 2012/04/11 14:21:55 fisyak +// Fix T0offset from comparison with AuAu27 +// +// Revision 1.7 2012/04/03 14:06:55 fisyak +// Speed up using GetSaveL (__PAD_BLOCK__), sluggish shape histograms, Heed electron generation +// +// Revision 1.6 2012/01/18 13:57:57 fisyak +// Adjust T0offset : Xianglei Zhu from Run 11 AuAu 27 & 19.6 GeV embedding +// +// Revision 1.5 2011/12/30 00:04:01 fisyak +// Freeze parameters for y2011 base on TpcRS_2011_pp500LowLum_Q +// +// Revision 1.3 2011/10/11 19:09:23 fisyak +// Add Yi Guo's tables for Run XI AuAu200 RFF dE/dx calibration +// +// Revision 1.2 2010/10/28 23:41:54 fisyak +// extra t0 off set for Altro chip +// +// Revision 1.7 2010/06/14 23:36:08 fisyak +// Freeze version V +// +// Revision 1.6 2010/05/24 21:39:53 fisyak +// Fix bracket +// +// Revision 1.5 2010/05/24 16:07:20 fisyak +// Add default dE/dx calibration tables, replace TpcAltroParameters and asic_thresholds_tpx by tpcAltroParams +// +// Revision 1.4 2010/04/19 15:05:58 fisyak +// Final (2010_i) parameters for Run X +// +// Revision 1.3 2010/04/16 19:31:19 fisyak +// Intermidiate version +// +// Revision 1.3 2010/04/04 23:14:33 fisyak +// Add Row Correction +// +// Revision 1.2 2010/04/01 22:17:57 fisyak +// Freeze version W +// +TDataSet *CreateTable() { + // ----------------------------------------------------------------- + // db/.const/StarDb/Calibrations/tpc/.TpcResponseSimulator/TpcResponseSimulator Allocated rows: 1 Used rows: 1 Row size: 124 bytes + // Table: TpcResponseSimulator_st[0]--> TpcResponseSimulator_st[0] + // ==================================================================== + // ------ Test whether this table share library was loaded ------ + if (!TClass::GetClass("St_TpcResponseSimulator")) return 0; + TpcResponseSimulator_st row; + St_TpcResponseSimulator *tableSet = new St_TpcResponseSimulator("TpcResponseSimulator",1); + memset(&row,0,tableSet->GetRowSize()); + row.I0 = 13.1;// eV, CH4 + row.Cluster = 3.2; // average no. of electrons per primary + row.W = 26.2;// eV + row.OmegaTau = 3.02;// fit of data + row.K3IP = 0.68;//(pads) for a/s = 2.5e-3 and h/s = 0.5 + row.K3IR = 0.89;//(row) for a/s = 2.5e-3 and h/s = 0.5 + row.K3OP = 0.55;//(pads) for a/s = 2.5e-3 and h/s = 1.0 + row.K3OR = 0.61;//(row) for a/s = 2.5e-3 and h/s = 1.0 + row.FanoFactor = 0.3; // + row.AveragePedestal = 50.0;// + row.AveragePedestalRMS = -1.0; // Old Tpc electronics or iTPC 1.4 => 1.0; Tonko 12/12/2019 + row.AveragePedestalRMSX = -1.0; // New Tpx electronics + row.tauIntegration = 2.5*74.6e-9;// secs + row.tauF = 394.0e-9;// secs Tpc + row.tauP = 775.0e-9;// secs Tpc + row.tauXI = 60.0e-9;// secs Tpx Inner integration time + row.tauXO = 74.6e-9;// secs Tpx Outer integration time + row.tauCI = 0; + row.tauCO = 0; + row.SigmaJitterTI = 0.00000 + 0.47;// 0.4317;// 0.25;//ad 0.0;// b for Tpx inner + row.SigmaJitterTO = 0.00000 + 0;// 0.4300;// E: 0.4801;//0.25;//ad 0.0;// b for Tpx outer + row.SigmaJitterXI = 0.1 + 0.037; // 0.15; // J 0.06; // F 0.21; //0.03426;// 0.1027785; // P: 0.1353*1.05/1.10; //O: 0.1353*1.05;// N: 0.1353; // C:0.; + row.SigmaJitterXO = 0.13 + 0.025; // 0.15; // J 0.03; // I 0.04; //0.10; // F 0.21; // 0.03426*1.20;// 1.05;// 0.107525; // P: 0.1472*1.05/1.03; //O: 0.1472*1.05;// N: 0.1472; // C:0.; + row.longitudinalDiffusion = 0.03624*1.3*0.92; //*1.3 Magboltz // HD 0.03624*1.5; //HC 0.03624; // Magboltz + row.longitudinalDiffusionI= row.longitudinalDiffusion*0.95; + row.transverseDiffusion = 0.02218*TMath::Sqrt(1 + row.OmegaTau*row.OmegaTau) ; // Magboltz 87% Ar + 10% CH4 + 3%CF4 + row.transverseDiffusionI = row.transverseDiffusion/1.08;// J *0.983; // 0.97* + row.NoElPerAdc = 335.; // No. of electrons per 1 ADC count +#if 0 + row.OmegaTauScaleI = 2.145*1.515;// restore in D HC 1.;// 2.145*1.515; //i; 2.145*1.4; //h 2.145; //ad 2.145*1.25; //b effective reduction of OmegaTau near Inner sector anode wire + row.OmegaTauScaleO = 1.8 *1.201;// -"- HC 1.;// 1.8 *1.201; //i 1.8 *1.1; //h 1.8; //ad 1.8 *1.25; //b effective reduction of OmegaTau near Outer sector anode wire +#endif + // Inner_wire_to_plane_coupling ( 0.533 ) * Inner_wire_to_plane_couplingScale ( 0.843485 ) + // Outer_wire_to_plane_coupling ( 0.512 ) * Outer_wire_to_plane_couplingScale ( 0.725267 ) + row.SecRowCorIW[0] = row.SecRowCorIE[0] = 0.57692996501735538 + 5.13440e-02 - 0.23 + 2.02654e-01 -1.41451e-01 + -0.14; + row.SecRowCorIW[1] = row.SecRowCorIE[1] = -5.40702e-04; + row.SecRowCorOW[0] = row.SecRowCorOE[0] = 1.11982875000493309-1.27992e-01 + 2.52297e-02 - 0.135 + 1.72299e-01 -1.55654e-01; + row.SecRowCorOW[1] = row.SecRowCorOE[1] = -3.73511e-04; + // SecRow3CGF7p7GeV_2021.root: FitP->Draw("sigma:y","i&&j","prof") + // Inner 3.10477e-01, Outer 2.70452e-01 + // RunXXI/Hijing.2021AuAu200.VMCF + // Inner 2.93912e-01 Iuter 2.76624e-01 + const Double_t RowSigmaTrs[4] = { + 9.13675e-02, 0, // Inner + 6.29849e-02, 0}; // Outer + Float_t *b = &row.SecRowSigIW[0]; + for (Int_t i = 0; i < 8; i++) { + b[i] = RowSigmaTrs[i%4]; + } + row.PolyaInner = 1.38; + row.PolyaOuter = 1.38; + row.T0offset = 0.50 -1.43663e-01 -0.00932877 + 0.0416 + 0.0241 ;//g // 01/18/12 Xianglei Zhu from Run 11 AuAu 27 & 19.6 GeV embedding + row.T0offsetI = 0.0709683 -0.00865149 + 0.307 - 0.3255; // TFG23a = 0 + row.T0offsetO = -0.0710492 -0.0159205 + 0.257 - 0.2417; // TFG23a = 0 + row.tMaxI = row.tMaxO = 2e-5; // sec + tableSet->AddAt(&row); + // ----------------- end of code --------------- + return (TDataSet *)tableSet; +} From 2677be0225d242fed860bf5ed6e644651997e821 Mon Sep 17 00:00:00 2001 From: jml985 <44065529+jml985@users.noreply.github.com> Date: Wed, 24 Apr 2024 12:11:27 -0400 Subject: [PATCH 17/45] feat: update online plots for several detectors (#678) This constitutes the running Jevp plots at the experiment, with updates for plots in several detectors. It includes files from pull request #674 which hasn't been accepted yet, but of course is running in the production code online. --- OnlTools/Jevp/StJevpBuilders/fstBuilder.cxx | 28 +- OnlTools/Jevp/StJevpBuilders/fstBuilder.h | 9 +- OnlTools/Jevp/StJevpBuilders/fttBuilder.cxx | 2 + OnlTools/Jevp/StJevpBuilders/mtdBuilder.cxx | 12 +- OnlTools/Jevp/StJevpBuilders/tpcBuilder.cxx | 538 +++++++++++--------- OnlTools/Jevp/StJevpBuilders/tpcBuilder.h | 56 ++ OnlTools/Jevp/level.source | 2 +- OnlTools/Jevp/readme.txt | 93 +++- 8 files changed, 460 insertions(+), 280 deletions(-) diff --git a/OnlTools/Jevp/StJevpBuilders/fstBuilder.cxx b/OnlTools/Jevp/StJevpBuilders/fstBuilder.cxx index 7ec685200e2..eba0a55d244 100644 --- a/OnlTools/Jevp/StJevpBuilders/fstBuilder.cxx +++ b/OnlTools/Jevp/StJevpBuilders/fstBuilder.cxx @@ -1357,7 +1357,7 @@ void fstBuilder::event(daqReader *rdr) } PCP; - numTb = numTimeBin; //default: 9 timebins + numTb = numTb_default; //default: 9 timebins //LOG("JEFF", "numbTB=%d", numTimeBin); @@ -1401,6 +1401,12 @@ void fstBuilder::event(daqReader *rdr) } } } + //set plotting range for time bin distributions + hEventSumContents.hMaxTimeBin_ZS->GetXaxis()->SetRangeUser(tb_plot_low, tb_plot_high); + hEventSumContents.hMaxTimeBin->GetXaxis()->SetRangeUser(tb_plot_low, tb_plot_high); + for(int index = 0; index < mTbVsAdcHist; index++) hTbVsAdcContents.tbVsAdcArray[index]->GetXaxis()->SetRangeUser(tb_plot_low, tb_plot_high); + for(int index = 0; index < mMaxTimeBinHist; index++) hMaxTimeBinContents.maxTimeBinArray[index]->GetXaxis()->SetRangeUser(tb_plot_low, tb_plot_high); + for(int glbElecApvIdx = 0 ; glbElecApvIdx < totAPV ; glbElecApvIdx++) hMaxTimeBinContents_APV.maxTimeBinArray_APV[glbElecApvIdx]->GetXaxis()->SetRangeUser(tb_plot_low, tb_plot_high); PCP; @@ -2060,10 +2066,11 @@ void fstBuilder::stoprun(daqReader *rdr) } } - double entriesTB_123=0, entriesTB_all=0, fraction = 1.0; - if(hMaxTimeBinContents.maxTimeBinArray[j]->GetEntries()>0) { - entriesTB_123 = hMaxTimeBinContents.maxTimeBinArray[j]->Integral(2, numTb-1); - entriesTB_all = hMaxTimeBinContents.maxTimeBinArray[j]->Integral(1, numTb); + double entriesTB_123=0, entriesTB_all=0, fraction = 0.; + entriesTB_all = hMaxTimeBinContents.maxTimeBinArray[j]->Integral(1, numTb); + //if(hMaxTimeBinContents.maxTimeBinArray[j]->Integral(1, numTb)>0) { + if(entriesTB_all>0.) { + entriesTB_123 = hMaxTimeBinContents.maxTimeBinArray[j]->Integral(numTb/2+1, numTb/2+1); fraction = entriesTB_123/entriesTB_all; if(fractionGetEntries()>0){ - entriesTB_123 = hMaxTimeBinContents_APV.maxTimeBinArray_APV[glbElecApvIdx]->Integral(2, numTb-1); - entriesTB_all = hMaxTimeBinContents_APV.maxTimeBinArray_APV[glbElecApvIdx]->Integral(1, numTb); + double entriesTB_123=0, entriesTB_all=0, fraction = 0.; + entriesTB_all = hMaxTimeBinContents_APV.maxTimeBinArray_APV[glbElecApvIdx]->Integral(1, numTb); + //if(hMaxTimeBinContents_APV.maxTimeBinArray_APV[glbElecApvIdx]->GetEntries()>0){ + if(entriesTB_all>0.){ + entriesTB_123 = hMaxTimeBinContents_APV.maxTimeBinArray_APV[glbElecApvIdx]->Integral(numTb/2+1,numTb/2+1); fraction = entriesTB_123/entriesTB_all; } - hEventSumContents.hMaxTBfractionVsAPV_ZS->SetBinContent(glbElecApvIdx, fraction); + hEventSumContents.hMaxTBfractionVsAPV_ZS->SetBinContent(glbElecApvIdx+1, fraction); } } } diff --git a/OnlTools/Jevp/StJevpBuilders/fstBuilder.h b/OnlTools/Jevp/StJevpBuilders/fstBuilder.h index 38e778ca0bb..f6ccb3ff9f0 100644 --- a/OnlTools/Jevp/StJevpBuilders/fstBuilder.h +++ b/OnlTools/Jevp/StJevpBuilders/fstBuilder.h @@ -90,7 +90,6 @@ class fstBuilder : public JevpBuilder { static const int ApvNumOffset = 12; // APV RO number same as IST | used for APV number convertion static const int ApvRoPerPort = 12; // APV RO number same as IST static const int ApvRoPerArm = 24; // APV RO number same as IST - static const int numTimeBin = 9; // to be decided static const int goodChCut = 64; // to be decided static const int minPedVal = 200; // to be decided @@ -129,6 +128,10 @@ class fstBuilder : public JevpBuilder { static const float rStop[RstripPerMod]; static const float rDelta; + //Time Bin plots plot range + const float tb_plot_low = 0.; + const float tb_plot_high = 3.; + //FST mapping int fstGeomMapping[totCh]; //FST channel mapping (electronics ID to geometry ID transform) int fstElecMapping[totCh]; //FST channel mapping (geometry ID & electronics ID transform) @@ -137,7 +140,7 @@ class fstBuilder : public JevpBuilder { float fstPedestal[numTimeBin][totCh]; float fstRmsNoise[numTimeBin][totCh]; float fstRanNoise[numTimeBin][totCh]; - + //*** Histogram Declarations... union { TH2 *adcArray[1]; //ADC value of each module's channels (ADC value vs. channel index) @@ -960,7 +963,7 @@ class fstBuilder : public JevpBuilder { int sumHistogramsFilled; int numTb; - + const int numTb_default = 3; JLatex* errorMsg; ClassDef(fstBuilder, 1); diff --git a/OnlTools/Jevp/StJevpBuilders/fttBuilder.cxx b/OnlTools/Jevp/StJevpBuilders/fttBuilder.cxx index c34ced10c03..c9966fa537a 100644 --- a/OnlTools/Jevp/StJevpBuilders/fttBuilder.cxx +++ b/OnlTools/Jevp/StJevpBuilders/fttBuilder.cxx @@ -466,10 +466,12 @@ void fttBuilder::drawStrip( TH2 * h2, int row, int strip, VMMHardwareMap::Quadra int iy0 = ay->FindBin( y0 + row * rLength ); int iy1 = ay->FindBin( y0 + (row + 1) * rLength - 1 ); + /* Does nothing, intened to adjust indexes? if ( VMMHardwareMap::Quadrant::C == q || VMMHardwareMap::Quadrant::D == q ){ int iy0 = ay->FindBin( y0 + (row - 1) * rLength ); int iy1 = ay->FindBin( y0 + (row) * rLength - 1 ); } + */ const int ix0 = ax->FindBin( x0 + strip * sPitch ); const int ix1 = ax->FindBin( x0 + (strip) * sPitch ); floodFill( h2, ix0, iy0, ix1, iy1 ); diff --git a/OnlTools/Jevp/StJevpBuilders/mtdBuilder.cxx b/OnlTools/Jevp/StJevpBuilders/mtdBuilder.cxx index 30bdeaada5a..f1dd29311e3 100644 --- a/OnlTools/Jevp/StJevpBuilders/mtdBuilder.cxx +++ b/OnlTools/Jevp/StJevpBuilders/mtdBuilder.cxx @@ -675,7 +675,13 @@ void mtdBuilder::event(daqReader *rdr) { int err1 = (int)(contents.MTD_Error1->GetEntries()); int err2 = (int)(contents.MTD_Error2->GetEntries()); int err3 = (int)(contents.MTD_Error3->GetEntries()); - + bool is_ignore = true; + for(int bin=1; bin<=contents.MTD_Error3->GetNbinsX(); bin++) + { + if(contents.MTD_Error3->GetBinContent(bin)>2) + is_ignore = false; + } + //error1 label if(err1== 0) { sprintf(t, "No electronics errors in %d events",nev); @@ -703,6 +709,10 @@ void mtdBuilder::event(daqReader *rdr) { sprintf(t, "No read out errors in %d events",nev); MTD_Error3_label->SetTextColor(3); } + else if(is_ignore) { + sprintf(t, "%d read out errors in %d events. Ignore!",err3, nev); + MTD_Error3_label->SetTextColor(4); + } else { sprintf(t, "%d read out errors in %d events!",err3, nev); MTD_Error3_label->SetTextColor(2); diff --git a/OnlTools/Jevp/StJevpBuilders/tpcBuilder.cxx b/OnlTools/Jevp/StJevpBuilders/tpcBuilder.cxx index 70bb6fbec1c..8c395573f39 100644 --- a/OnlTools/Jevp/StJevpBuilders/tpcBuilder.cxx +++ b/OnlTools/Jevp/StJevpBuilders/tpcBuilder.cxx @@ -32,7 +32,11 @@ // Some summary plots do have the sums for itpc and tpx // Legends updated // -// +// March 24 +// Added histogramf #bytes read out for RDO's +// Added some histogram since in 23 the clusterfinder for very low signals in time ~8-10 +// it spills over into negative time bins which it should not. These are recorded in histogram +// that are showed in the charge steps plot. Occupancy is ~ 1:1o**3 for those low timebins #define checkcld 1 #define checklaser 1 @@ -94,9 +98,15 @@ void tpcBuilder::initialize(int argc, char *argv[]) { contents.itpc_pix_occ_laser = new TH1D("itpc_pix_occ_laser","iTPC Pixel Occupancy (in %) Lasers",100,0,1); contents.itpc_pix_occ_pulser = new TH1D("itpc_pix_occ_pulser","iTPC Pixel Occupancy (in %) Pulsers",100,0,10); - contents.tpc_pix_occ_physics = new TH1D("tpc_pic_occ_physics","TPC Pixel Occupancy (in %) Physics",100,0,2.5); - contents.tpc_pix_occ_laser = new TH1D("tpc_pic_occ_laser","TPC Pixel Occupancy (in %) Lasers",100,0,1); - contents.tpc_pix_occ_pulser = new TH1D("tpc_pic_occ_pulser","TPC Pixel Occupancy (in %) Pulsers",100,0,10); + contents.tpc_pix_occ_physics = new TH1D("tpc_pic_occ_physics","TPX Pixel Occupancy (in %) Physics",100,0,2.5); + contents.tpc_pix_occ_laser = new TH1D("tpc_pic_occ_laser","TPX Pixel Occupancy (in %) Lasers",100,0,1); + contents.tpc_pix_occ_pulser = new TH1D("tpc_pic_occ_pulser","TPX Pixel Occupancy (in %) Pulsers",100,0,10); + + contents.tpc_rdo_bytes = new TH1D("tpc_rdo_bytes","TPX Total bytes per RDO", + 24*6,0.5,144.5); + contents.itpc_rdo_bytes = new TH1D("itpc_rdo_bytes","iTPC Total bytes per RDO", + 24*4,0.5,96.5); + // Common for itpc and tpx // @@ -104,7 +114,7 @@ void tpcBuilder::initialize(int argc, char *argv[]) { contents.h_tpc_sec2 = new TH2D("h_tpc_sec2","TPC Sec. 2 charge per pad",Npads,0.5,Npads+0.5,Nrows,0.5,Nrows+0.5); contents.h_tpc_sec3 = new TH2D("h_tpc_sec3","TPC Sec. 3 charge per pad",Npads,0.5,Npads+0.5,Nrows,0.5,Nrows+0.5); contents.h_tpc_sec4 = new TH2D("h_tpc_sec4","TPC Sec. 4 charge per pad",Npads,0.5,Npads+0.5,Nrows,0.5,Nrows+0.5); - contents.h_tpc_sec5 = new TH2D("h_tpc_sec5","TPC Sec. 5 charge per pad",Npads,0.5,Npads+0.5,Nrows,0.5,Nrows+0.5); + contents.h_tpc_sec5 = new TH2D("h_tpc_sec5","TPc Sec. 5 charge per pad",Npads,0.5,Npads+0.5,Nrows,0.5,Nrows+0.5); contents.h_tpc_sec6 = new TH2D("h_tpc_sec6","TPC Sec. 6 charge per pad",Npads,0.5,Npads+0.5,Nrows,0.5,Nrows+0.5); contents.h_tpc_sec7 = new TH2D("h_tpc_sec7","TPC Sec. 7 charge per pad",Npads,0.5,Npads+0.5,Nrows,0.5,Nrows+0.5); contents.h_tpc_sec8 = new TH2D("h_tpc_sec8","TPC Sec. 8 charge per pad",Npads,0.5,Npads+0.5,Nrows,0.5,Nrows+0.5); @@ -204,29 +214,29 @@ void tpcBuilder::initialize(int argc, char *argv[]) { // tpx only // - contents.h_tpx_chargeStep_s1 = new TH1D("h_tpx_chargeStep_s1","TPC adc vs time sector#1",512,0,512); - contents.h_tpx_chargeStep_s2 = new TH1D("h_tpx_chargeStep_s2","TPC adc vs time sector#2",512,0,512); - contents.h_tpx_chargeStep_s3 = new TH1D("h_tpx_chargeStep_s3","TPC adc vs time sector#3",512,0,512); - contents.h_tpx_chargeStep_s4 = new TH1D("h_tpx_chargeStep_s4","TPC adc vs time sector#4",512,0,512); - contents.h_tpx_chargeStep_s5 = new TH1D("h_tpx_chargeStep_s5","TPC adc vs time sector#5",512,0,512); - contents.h_tpx_chargeStep_s6 = new TH1D("h_tpx_chargeStep_s6","TPC adc vs time sector#6",512,0,512); - contents.h_tpx_chargeStep_s7 = new TH1D("h_tpx_chargeStep_s7","TPC adc vs time sector#7",512,0,512); - contents.h_tpx_chargeStep_s8 = new TH1D("h_tpx_chargeStep_s8","TPC adc vs time sector#8",512,0,512); - contents.h_tpx_chargeStep_s9 = new TH1D("h_tpx_chargeStep_s9","TPC adc vs time sector#9",512,0,512); - contents.h_tpx_chargeStep_s10 = new TH1D("h_tpx_chargeStep_s10","TPC adc vs time sector#10",512,0,512); - contents.h_tpx_chargeStep_s11 = new TH1D("h_tpx_chargeStep_s11","TPC adc vs time sector#11",512,0,512); - contents.h_tpx_chargeStep_s12 = new TH1D("h_tpx_chargeStep_s12","TPC adc vs time sector#12",512,0,512); - contents.h_tpx_chargeStep_s13 = new TH1D("h_tpx_chargeStep_s13","TPC adc vs time sector#13",512,0,512); - contents.h_tpx_chargeStep_s14 = new TH1D("h_tpx_chargeStep_s14","TPC adc vs time sector#14",512,0,512); - contents.h_tpx_chargeStep_s15 = new TH1D("h_tpx_chargeStep_s15","TPC adc vs time sector#15",512,0,512); - contents.h_tpx_chargeStep_s16 = new TH1D("h_tpx_chargeStep_s16","TPC adc vs time sector#16",512,0,512); - contents.h_tpx_chargeStep_s17 = new TH1D("h_tpx_chargeStep_s17","TPC adc vs time sector#17",512,0,512); - contents.h_tpx_chargeStep_s18 = new TH1D("h_tpx_chargeStep_s18","TPC adc vs time sector#18",512,0,512); - contents.h_tpx_chargeStep_s19 = new TH1D("h_tpx_chargeStep_s19","TPC adc vs time sector#19",512,0,512); - contents.h_tpx_chargeStep_s20 = new TH1D("h_tpx_chargeStep_s20","TPC adc vs time sector#20",512,0,512); - contents.h_tpx_chargeStep_s21 = new TH1D("h_tpx_chargeStep_s21","TPC adc vs time sector#21",512,0,512); - contents.h_tpx_chargeStep_s22 = new TH1D("h_tpx_chargeStep_s22","TPC adc vs time sector#22",512,0,512); - contents.h_tpx_chargeStep_s23 = new TH1D("h_tpx_chargeStep_s23","TPC adc vs time sector#23",512,0,512); + contents.h_tpx_chargeStep_s1 = new TH1D("h_tpx_chargeStep_s1","TPX adc vs time sector#1",512,0,512); + contents.h_tpx_chargeStep_s2 = new TH1D("h_tpx_chargeStep_s2","TPX adc vs time sector#2",512,0,512); + contents.h_tpx_chargeStep_s3 = new TH1D("h_tpx_chargeStep_s3","TPX adc vs time sector#3",512,0,512); + contents.h_tpx_chargeStep_s4 = new TH1D("h_tpx_chargeStep_s4","TPX adc vs time sector#4",512,0,512); + contents.h_tpx_chargeStep_s5 = new TH1D("h_tpx_chargeStep_s5","TPX adc vs time sector#5",512,0,512); + contents.h_tpx_chargeStep_s6 = new TH1D("h_tpx_chargeStep_s6","TPX adc vs time sector#6",512,0,512); + contents.h_tpx_chargeStep_s7 = new TH1D("h_tpx_chargeStep_s7","TPX adc vs time sector#7",512,0,512); + contents.h_tpx_chargeStep_s8 = new TH1D("h_tpx_chargeStep_s8","TPX adc vs time sector#8",512,0,512); + contents.h_tpx_chargeStep_s9 = new TH1D("h_tpx_chargeStep_s9","TPX adc vs time sector#9",512,0,512); + contents.h_tpx_chargeStep_s10 = new TH1D("h_tpx_chargeStep_s10","TPX adc vs time sector#10",512,0,512); + contents.h_tpx_chargeStep_s11 = new TH1D("h_tpx_chargeStep_s11","TPX adc vs time sector#11",512,0,512); + contents.h_tpx_chargeStep_s12 = new TH1D("h_tpx_chargeStep_s12","TPX adc vs time sector#12",512,0,512); + contents.h_tpx_chargeStep_s13 = new TH1D("h_tpx_chargeStep_s13","TPX adc vs time sector#13",512,0,512); + contents.h_tpx_chargeStep_s14 = new TH1D("h_tpx_chargeStep_s14","TPX adc vs time sector#14",512,0,512); + contents.h_tpx_chargeStep_s15 = new TH1D("h_tpx_chargeStep_s15","TPX adc vs time sector#15",512,0,512); + contents.h_tpx_chargeStep_s16 = new TH1D("h_tpx_chargeStep_s16","TPX adc vs time sector#16",512,0,512); + contents.h_tpx_chargeStep_s17 = new TH1D("h_tpx_chargeStep_s17","TPX adc vs time sector#17",512,0,512); + contents.h_tpx_chargeStep_s18 = new TH1D("h_tpx_chargeStep_s18","TPX adc vs time sector#18",512,0,512); + contents.h_tpx_chargeStep_s19 = new TH1D("h_tpx_chargeStep_s19","TPX adc vs time sector#19",512,0,512); + contents.h_tpx_chargeStep_s20 = new TH1D("h_tpx_chargeStep_s20","TPX adc vs time sector#20",512,0,512); + contents.h_tpx_chargeStep_s21 = new TH1D("h_tpx_chargeStep_s21","TPX adc vs time sector#21",512,0,512); + contents.h_tpx_chargeStep_s22 = new TH1D("h_tpx_chargeStep_s22","TPX adc vs time sector#22",512,0,512); + contents.h_tpx_chargeStep_s23 = new TH1D("h_tpx_chargeStep_s23","TPX adc vs time sector#23",512,0,512); contents.h_tpx_chargeStep_s24 = new TH1D("h_tpx_chargeStep_s24","TPC adc vs time sector#24",512,0,512); //contents.h_tpc_drift_vel = new TH1D("h_tpc_drift_vel", "TPC Drift Velocity (cm/us)",400,5.4,5.8); @@ -239,28 +249,28 @@ void tpcBuilder::initialize(int argc, char *argv[]) { contents.cl_width_itpc_tb = new TH2D("cl_width_itpc_tb","iTPC clusterwidth (time)", 24,0.5,24.5, - 30,0.5,30.5); + 31,-0.5,30.5); contents.cl_width_itpc_tb->GetXaxis()->SetTitle("sector"); contents.cl_width_itpc_pad = new TH2D("cl_width_itpc_pad","iTPC clusterwidth (pad)", 24,0.5,24.5, - 30,0.5,30.5); + 21,-0.5,20.5); contents.cl_width_itpc_pad->GetXaxis()->SetTitle("sector"); contents.cl_width_tpx_tb = new TH2D("cl_width_tpx_tb","TPX clusterwidth (time)", 24,0.5,24.5, - 30,0.5,30.5); + 31,-0.5,30.5); contents.cl_width_tpx_tb->GetXaxis()->SetTitle("sector"); contents.cl_width_tpx_pad = new TH2D("cl_width_tpx_pad","TPX clusterwidth (pad)", 24,0.5,24.5, - 30,0.5,30.5); + 21,-0.5,20.5); contents.cl_width_tpx_pad->GetXaxis()->SetTitle("sector"); contents.no_clust_tpx = new TH2F("no_clust_tpx","TPX #clusters vs sector", - 24,0.5,24.5,80,0,8); + 24,0.5,24.5,60,0,6); contents.no_clust_tpx->GetXaxis()->SetTitle("sector"); contents.no_clust_tpx->GetYaxis()->SetTitle("log10(no clusters)"); contents.no_clust_itpc = new TH2F("no_clust_itpc","iTPC #clusters vs sector", - 24,0.5,24.5,80,0,8); + 24,0.5,24.5,60,0,6); contents.no_clust_itpc->GetXaxis()->SetTitle("sector"); contents.no_clust_itpc->GetYaxis()->SetTitle("log10(no clusters)"); @@ -275,8 +285,6 @@ void tpcBuilder::initialize(int argc, char *argv[]) { extras.tpc_clpix_occ_pulser = new TH1D("tpc_clpix_occ_pulser","TPC Pixel Occupancy (in %) Pulsers",100,0,10); - - extras.cl_itpc_chargeStep_s1 = new TH1D("cl_itpc_chargeStep_s1","iTPC adc vs time sector#1",512,0,512); extras.cl_itpc_chargeStep_s2 = new TH1D("cl_itpc_chargeStep_s2","iTPC adc vs time sector#2",512,0,512); extras.cl_itpc_chargeStep_s3 = new TH1D("cl_itpc_chargeStep_s3","iTPC adc vs time sector#3",512,0,512); @@ -302,30 +310,84 @@ void tpcBuilder::initialize(int argc, char *argv[]) { extras.cl_itpc_chargeStep_s23 = new TH1D("cl_itpc_chargeStep_s23","iTPC adc vs time sector#23",512,0,512); extras.cl_itpc_chargeStep_s24 = new TH1D("cl_itpc_chargeStep_s24","iTPC adc vs time sector#24",512,0,512); - extras.cl_tpx_chargeStep_s1 = new TH1D("cl_tpx_chargeStep_s1","iTPC adc vs time sector#1",512,0,512); - extras.cl_tpx_chargeStep_s2 = new TH1D("cl_tpx_chargeStep_s2","iTPC adc vs time sector#2",512,0,512); - extras.cl_tpx_chargeStep_s3 = new TH1D("cl_tpx_chargeStep_s3","iTPC adc vs time sector#3",512,0,512); - extras.cl_tpx_chargeStep_s4 = new TH1D("cl_tpx_chargeStep_s4","iTPC adc vs time sector#4",512,0,512); - extras.cl_tpx_chargeStep_s5 = new TH1D("cl_tpx_chargeStep_s5","iTPC adc vs time sector#5",512,0,512); - extras.cl_tpx_chargeStep_s6 = new TH1D("cl_tpx_chargeStep_s6","iTPC adc vs time sector#6",512,0,512); - extras.cl_tpx_chargeStep_s7 = new TH1D("cl_tpx_chargeStep_s7","iTPC adc vs time sector#7",512,0,512); - extras.cl_tpx_chargeStep_s8 = new TH1D("cl_tpx_chargeStep_s8","iTPC adc vs time sector#8",512,0,512); - extras.cl_tpx_chargeStep_s9 = new TH1D("cl_tpx_chargeStep_s9","iTPC adc vs time sector#9",512,0,512); - extras.cl_tpx_chargeStep_s10 = new TH1D("cl_tpx_chargeStep_s10","iTPC adc vs time sector#10",512,0,512); - extras.cl_tpx_chargeStep_s11 = new TH1D("cl_tpx_chargeStep_s11","iTPC adc vs time sector#11",512,0,512); - extras.cl_tpx_chargeStep_s12 = new TH1D("cl_tpx_chargeStep_s12","iTPC adc vs time sector#12",512,0,512); - extras.cl_tpx_chargeStep_s13 = new TH1D("cl_tpx_chargeStep_s13","iTPC adc vs time sector#13",512,0,512); - extras.cl_tpx_chargeStep_s14 = new TH1D("cl_tpx_chargeStep_s14","iTPC adc vs time sector#14",512,0,512); - extras.cl_tpx_chargeStep_s15 = new TH1D("cl_tpx_chargeStep_s15","iTPC adc vs time sector#15",512,0,512); - extras.cl_tpx_chargeStep_s16 = new TH1D("cl_tpx_chargeStep_s16","iTPC adc vs time sector#16",512,0,512); - extras.cl_tpx_chargeStep_s17 = new TH1D("cl_tpx_chargeStep_s17","iTPC adc vs time sector#17",512,0,512); - extras.cl_tpx_chargeStep_s18 = new TH1D("cl_tpx_chargeStep_s18","iTPC adc vs time sector#18",512,0,512); - extras.cl_tpx_chargeStep_s19 = new TH1D("cl_tpx_chargeStep_s19","iTPC adc vs time sector#19",512,0,512); - extras.cl_tpx_chargeStep_s20 = new TH1D("cl_tpx_chargeStep_s20","iTPC adc vs time sector#20",512,0,512); - extras.cl_tpx_chargeStep_s21 = new TH1D("cl_tpx_chargeStep_s21","iTPC adc vs time sector#21",512,0,512); - extras.cl_tpx_chargeStep_s22 = new TH1D("cl_tpx_chargeStep_s22","iTPC adc vs time sector#22",512,0,512); - extras.cl_tpx_chargeStep_s23 = new TH1D("cl_tpx_chargeStep_s23","iTPC adc vs time sector#23",512,0,512); - extras.cl_tpx_chargeStep_s24 = new TH1D("cl_tpx_chargeStep_s24","iTPC adc vs time sector#24",512,0,512); +#if 1 + + extras.bad_cl_itpc_chargeStep_s1 = new TH1D("bad_cl_itpc_chargeStep_s1","iTPC adc vs time sector#1",512,0,512); + extras.bad_cl_itpc_chargeStep_s2 = new TH1D("bad_cl_itpc_chargeStep_s2","iTPC adc vs time sector#2",512,0,512); + extras.bad_cl_itpc_chargeStep_s3 = new TH1D("bad_cl_itpc_chargeStep_s3","iTPC adc vs time sector#3",512,0,512); + extras.bad_cl_itpc_chargeStep_s4 = new TH1D("bad_cl_itpc_chargeStep_s4","iTPC adc vs time sector#4",512,0,512); + extras.bad_cl_itpc_chargeStep_s5 = new TH1D("bad_cl_itpc_chargeStep_s5","iTPC adc vs time sector#5",512,0,512); + extras.bad_cl_itpc_chargeStep_s6 = new TH1D("bad_cl_itpc_chargeStep_s6","iTPC adc vs time sector#6",512,0,512); + extras.bad_cl_itpc_chargeStep_s7 = new TH1D("bad_cl_itpc_chargeStep_s7","iTPC adc vs time sector#7",512,0,512); + extras.bad_cl_itpc_chargeStep_s8 = new TH1D("bad_cl_itpc_chargeStep_s8","iTPC adc vs time sector#8",512,0,512); + extras.bad_cl_itpc_chargeStep_s9 = new TH1D("bad_cl_itpc_chargeStep_s9","iTPC adc vs time sector#9",512,0,512); + extras.bad_cl_itpc_chargeStep_s10 = new TH1D("bad_cl_itpc_chargeStep_s10","iTPC adc vs time sector#10",512,0,512); + extras.bad_cl_itpc_chargeStep_s11 = new TH1D("bad_cl_itpc_chargeStep_s11","iTPC adc vs time sector#11",512,0,512); + extras.bad_cl_itpc_chargeStep_s12 = new TH1D("bad_cl_itpc_chargeStep_s12","iTPC adc vs time sector#12",512,0,512); + extras.bad_cl_itpc_chargeStep_s13 = new TH1D("bad_cl_itpc_chargeStep_s13","iTPC adc vs time sector#13",512,0,512); + extras.bad_cl_itpc_chargeStep_s14 = new TH1D("bad_cl_itpc_chargeStep_s14","iTPC adc vs time sector#14",512,0,512); + extras.bad_cl_itpc_chargeStep_s15 = new TH1D("bad_cl_itpc_chargeStep_s15","iTPC adc vs time sector#15",512,0,512); + extras.bad_cl_itpc_chargeStep_s16 = new TH1D("bad_cl_itpc_chargeStep_s16","iTPC adc vs time sector#16",512,0,512); + extras.bad_cl_itpc_chargeStep_s17 = new TH1D("bad_cl_itpc_chargeStep_s17","iTPC adc vs time sector#17",512,0,512); + extras.bad_cl_itpc_chargeStep_s18 = new TH1D("bad_cl_itpc_chargeStep_s18","iTPC adc vs time sector#18",512,0,512); + extras.bad_cl_itpc_chargeStep_s19 = new TH1D("bad_cl_itpc_chargeStep_s19","iTPC adc vs time sector#19",512,0,512); + extras.bad_cl_itpc_chargeStep_s20 = new TH1D("bad_cl_itpc_chargeStep_s20","iTPC adc vs time sector#20",512,0,512); + extras.bad_cl_itpc_chargeStep_s21 = new TH1D("bad_cl_itpc_chargeStep_s21","iTPC adc vs time sector#21",512,0,512); + extras.bad_cl_itpc_chargeStep_s22 = new TH1D("bad_cl_itpc_chargeStep_s22","iTPC adc vs time sector#22",512,0,512); + extras.bad_cl_itpc_chargeStep_s23 = new TH1D("bad_cl_itpc_chargeStep_s23","iTPC adc vs time sector#23",512,0,512); + extras.bad_cl_itpc_chargeStep_s24 = new TH1D("bad_cl_itpc_chargeStep_s24","iTPC adc vs time sector#24",512,0,512); + + extras.bad_cl_tpx_chargeStep_s1 = new TH1D("bad_cl_tpx_chargeStep_s1","TPX adc vs time sector#1",512,0,512); + extras.bad_cl_tpx_chargeStep_s2 = new TH1D("bad_cl_tpx_chargeStep_s2","TPX adc vs time sector#2",512,0,512); + extras.bad_cl_tpx_chargeStep_s3 = new TH1D("bad_cl_tpx_chargeStep_s3","TPX adc vs time sector#3",512,0,512); + extras.bad_cl_tpx_chargeStep_s4 = new TH1D("bad_cl_tpx_chargeStep_s4","TPX adc vs time sector#4",512,0,512); + extras.bad_cl_tpx_chargeStep_s5 = new TH1D("bad_cl_tpx_chargeStep_s5","TPX adc vs time sector#5",512,0,512); + extras.bad_cl_tpx_chargeStep_s6 = new TH1D("bad_cl_tpx_chargeStep_s6","TPX adc vs time sector#6",512,0,512); + extras.bad_cl_tpx_chargeStep_s7 = new TH1D("bad_cl_tpx_chargeStep_s7","TPX adc vs time sector#7",512,0,512); + extras.bad_cl_tpx_chargeStep_s8 = new TH1D("bad_cl_tpx_chargeStep_s8","TPX adc vs time sector#8",512,0,512); + extras.bad_cl_tpx_chargeStep_s9 = new TH1D("bad_cl_tpx_chargeStep_s9","TPX adc vs time sector#9",512,0,512); + extras.bad_cl_tpx_chargeStep_s10 = new TH1D("bad_cl_tpx_chargeStep_s10","TPX adc vs time sector#10",512,0,512); + extras.bad_cl_tpx_chargeStep_s11 = new TH1D("bad_cl_tpx_chargeStep_s11","TPX adc vs time sector#11",512,0,512); + extras.bad_cl_tpx_chargeStep_s12 = new TH1D("bad_cl_tpx_chargeStep_s12","TPX adc vs time sector#12",512,0,512); + extras.bad_cl_tpx_chargeStep_s13 = new TH1D("bad_cl_tpx_chargeStep_s13","TPX adc vs time sector#13",512,0,512); + extras.bad_cl_tpx_chargeStep_s14 = new TH1D("bad_cl_tpx_chargeStep_s14","TPX adc vs time sector#14",512,0,512); + extras.bad_cl_tpx_chargeStep_s15 = new TH1D("bad_cl_tpx_chargeStep_s15","TPX adc vs time sector#15",512,0,512); + extras.bad_cl_tpx_chargeStep_s16 = new TH1D("bad_cl_tpx_chargeStep_s16","TPX adc vs time sector#16",512,0,512); + extras.bad_cl_tpx_chargeStep_s17 = new TH1D("bad_cl_tpx_chargeStep_s17","TPX adc vs time sector#17",512,0,512); + extras.bad_cl_tpx_chargeStep_s18 = new TH1D("bad_cl_tpx_chargeStep_s18","TPX adc vs time sector#18",512,0,512); + extras.bad_cl_tpx_chargeStep_s19 = new TH1D("bad_cl_tpx_chargeStep_s19","TPX adc vs time sector#19",512,0,512); + extras.bad_cl_tpx_chargeStep_s20 = new TH1D("bad_cl_tpx_chargeStep_s20","TPX adc vs time sector#20",512,0,512); + extras.bad_cl_tpx_chargeStep_s21 = new TH1D("bad_cl_tpx_chargeStep_s21","TPX adc vs time sector#21",512,0,512); + extras.bad_cl_tpx_chargeStep_s22 = new TH1D("bad_cl_tpx_chargeStep_s22","TPX adc vs time sector#22",512,0,512); + extras.bad_cl_tpx_chargeStep_s23 = new TH1D("bad_cl_tpx_chargeStep_s23","TPX adc vs time sector#23",512,0,512); + extras.bad_cl_tpx_chargeStep_s24 = new TH1D("bad_cl_tpx_chargeStep_s24","TPX adc vs time sector#24",512,0,512); + +#endif + + extras.cl_tpx_chargeStep_s1 = new TH1D("cl_tpx_chargeStep_s1","TPX adc vs time sector#1",512,0,512); + extras.cl_tpx_chargeStep_s2 = new TH1D("cl_tpx_chargeStep_s2","TPX adc vs time sector#2",512,0,512); + extras.cl_tpx_chargeStep_s3 = new TH1D("cl_tpx_chargeStep_s3","TPX adc vs time sector#3",512,0,512); + extras.cl_tpx_chargeStep_s4 = new TH1D("cl_tpx_chargeStep_s4","TPX adc vs time sector#4",512,0,512); + extras.cl_tpx_chargeStep_s5 = new TH1D("cl_tpx_chargeStep_s5","TPX adc vs time sector#5",512,0,512); + extras.cl_tpx_chargeStep_s6 = new TH1D("cl_tpx_chargeStep_s6","TPX adc vs time sector#6",512,0,512); + extras.cl_tpx_chargeStep_s7 = new TH1D("cl_tpx_chargeStep_s7","TPX adc vs time sector#7",512,0,512); + extras.cl_tpx_chargeStep_s8 = new TH1D("cl_tpx_chargeStep_s8","TPX adc vs time sector#8",512,0,512); + extras.cl_tpx_chargeStep_s9 = new TH1D("cl_tpx_chargeStep_s9","TPX adc vs time sector#9",512,0,512); + extras.cl_tpx_chargeStep_s10 = new TH1D("cl_tpx_chargeStep_s10","TPX adc vs time sector#10",512,0,512); + extras.cl_tpx_chargeStep_s11 = new TH1D("cl_tpx_chargeStep_s11","TPX adc vs time sector#11",512,0,512); + extras.cl_tpx_chargeStep_s12 = new TH1D("cl_tpx_chargeStep_s12","TPX adc vs time sector#12",512,0,512); + extras.cl_tpx_chargeStep_s13 = new TH1D("cl_tpx_chargeStep_s13","TPX adc vs time sector#13",512,0,512); + extras.cl_tpx_chargeStep_s14 = new TH1D("cl_tpx_chargeStep_s14","TPX adc vs time sector#14",512,0,512); + extras.cl_tpx_chargeStep_s15 = new TH1D("cl_tpx_chargeStep_s15","TPX adc vs time sector#15",512,0,512); + extras.cl_tpx_chargeStep_s16 = new TH1D("cl_tpx_chargeStep_s16","TPX adc vs time sector#16",512,0,512); + extras.cl_tpx_chargeStep_s17 = new TH1D("cl_tpx_chargeStep_s17","TPX adc vs time sector#17",512,0,512); + extras.cl_tpx_chargeStep_s18 = new TH1D("cl_tpx_chargeStep_s18","TPX adc vs time sector#18",512,0,512); + extras.cl_tpx_chargeStep_s19 = new TH1D("cl_tpx_chargeStep_s19","TPX adc vs time sector#19",512,0,512); + extras.cl_tpx_chargeStep_s20 = new TH1D("cl_tpx_chargeStep_s20","TPX adc vs time sector#20",512,0,512); + extras.cl_tpx_chargeStep_s21 = new TH1D("cl_tpx_chargeStep_s21","TPX adc vs time sector#21",512,0,512); + extras.cl_tpx_chargeStep_s22 = new TH1D("cl_tpx_chargeStep_s22","TPX adc vs time sector#22",512,0,512); + extras.cl_tpx_chargeStep_s23 = new TH1D("cl_tpx_chargeStep_s23","TPX adc vs time sector#23",512,0,512); + extras.cl_tpx_chargeStep_s24 = new TH1D("cl_tpx_chargeStep_s24","TPX adc vs time sector#24",512,0,512); extras.cl_itpc_phi_charge = new TH1D("cl_itpc_phi_charge","Azimuthal Distribution of iTPC Charge",360,-180,180); extras.cl_itpc_sector_charge = new TH1D("cl_itpc_sector_charge","iTPC Charge per Sector",24,0.5,24.5); @@ -405,6 +467,16 @@ void tpcBuilder::initialize(int argc, char *argv[]) { plots[++n] = new JevpPlot(extras.clusters_per_bx); plots[n]->optstat = 0; + // + // Add the rdo bytes plots + // + plots[++n] = new JevpPlot(contents.tpc_rdo_bytes); + plots[n]->optstat=0; + plots[++n] = new JevpPlot(contents.itpc_rdo_bytes); + plots[n]->optstat=0; + + // plots for each sector + // int pl_q_idx = n+1; plots[++n] = new JevpPlot(contents.h_tpc_sec1); @@ -487,110 +559,167 @@ void tpcBuilder::initialize(int argc, char *argv[]) { // these plots should likely all be logy // - +#if fvd + cout << "Add charge steps " << endl; +#endif int pl_qs_idx = n+1; plots[++n] = new JevpPlot(contents.h_itpc_chargeStep_s1); - plots[n]->logy = 1; plots[n]->addHisto(extras.cl_itpc_chargeStep_s1); + plots[n]->logy = 1; + plots[n]->addHisto(extras.cl_itpc_chargeStep_s1); + plots[n]->addHisto(extras.bad_cl_itpc_chargeStep_s1); plots[++n] = new JevpPlot(contents.h_itpc_chargeStep_s2); - plots[n]->logy = 1; plots[n]->addHisto(extras.cl_itpc_chargeStep_s2); + plots[n]->logy = 1; + plots[n]->addHisto(extras.cl_itpc_chargeStep_s2); + plots[n]->addHisto(extras.bad_cl_itpc_chargeStep_s2); plots[++n] = new JevpPlot(contents.h_itpc_chargeStep_s3); plots[n]->logy = 1; plots[n]->addHisto(extras.cl_itpc_chargeStep_s3); + plots[n]->logy = 1; plots[n]->addHisto(extras.bad_cl_itpc_chargeStep_s3); plots[++n] = new JevpPlot(contents.h_itpc_chargeStep_s4); plots[n]->logy = 1; plots[n]->addHisto(extras.cl_itpc_chargeStep_s4); + plots[n]->logy = 1; plots[n]->addHisto(extras.bad_cl_itpc_chargeStep_s4); plots[++n] = new JevpPlot(contents.h_itpc_chargeStep_s5); plots[n]->logy = 1; plots[n]->addHisto(extras.cl_itpc_chargeStep_s5); + plots[n]->logy = 1; plots[n]->addHisto(extras.bad_cl_itpc_chargeStep_s5); plots[++n] = new JevpPlot(contents.h_itpc_chargeStep_s6); plots[n]->logy = 1; plots[n]->addHisto(extras.cl_itpc_chargeStep_s6); + plots[n]->logy = 1; plots[n]->addHisto(extras.bad_cl_itpc_chargeStep_s6); plots[++n] = new JevpPlot(contents.h_itpc_chargeStep_s7); plots[n]->logy = 1; plots[n]->addHisto(extras.cl_itpc_chargeStep_s7); + plots[n]->logy = 1; plots[n]->addHisto(extras.bad_cl_itpc_chargeStep_s7); plots[++n] = new JevpPlot(contents.h_itpc_chargeStep_s8); plots[n]->logy = 1; plots[n]->addHisto(extras.cl_itpc_chargeStep_s8); + plots[n]->logy = 1; plots[n]->addHisto(extras.bad_cl_itpc_chargeStep_s8); plots[++n] = new JevpPlot(contents.h_itpc_chargeStep_s9); plots[n]->logy = 1; plots[n]->addHisto(extras.cl_itpc_chargeStep_s9); + plots[n]->logy = 1; plots[n]->addHisto(extras.bad_cl_itpc_chargeStep_s9); plots[++n] = new JevpPlot(contents.h_itpc_chargeStep_s10); plots[n]->logy = 1; plots[n]->addHisto(extras.cl_itpc_chargeStep_s10); + plots[n]->logy = 1; plots[n]->addHisto(extras.bad_cl_itpc_chargeStep_s10); plots[++n] = new JevpPlot(contents.h_itpc_chargeStep_s11); plots[n]->logy = 1; plots[n]->addHisto(extras.cl_itpc_chargeStep_s11); + plots[n]->logy = 1; plots[n]->addHisto(extras.bad_cl_itpc_chargeStep_s11); plots[++n] = new JevpPlot(contents.h_itpc_chargeStep_s12); plots[n]->logy = 1; plots[n]->addHisto(extras.cl_itpc_chargeStep_s12); + plots[n]->logy = 1; plots[n]->addHisto(extras.bad_cl_itpc_chargeStep_s12); plots[++n] = new JevpPlot(contents.h_itpc_chargeStep_s13); plots[n]->logy = 1; plots[n]->addHisto(extras.cl_itpc_chargeStep_s13); + plots[n]->logy = 1; plots[n]->addHisto(extras.bad_cl_itpc_chargeStep_s13); plots[++n] = new JevpPlot(contents.h_itpc_chargeStep_s14); plots[n]->logy = 1; plots[n]->addHisto(extras.cl_itpc_chargeStep_s14); + plots[n]->logy = 1; plots[n]->addHisto(extras.bad_cl_itpc_chargeStep_s14); plots[++n] = new JevpPlot(contents.h_itpc_chargeStep_s15); plots[n]->logy = 1; plots[n]->addHisto(extras.cl_itpc_chargeStep_s15); + plots[n]->logy = 1; plots[n]->addHisto(extras.bad_cl_itpc_chargeStep_s15); plots[++n] = new JevpPlot(contents.h_itpc_chargeStep_s16); plots[n]->logy = 1; plots[n]->addHisto(extras.cl_itpc_chargeStep_s16); + plots[n]->logy = 1; plots[n]->addHisto(extras.bad_cl_itpc_chargeStep_s16); plots[++n] = new JevpPlot(contents.h_itpc_chargeStep_s17); plots[n]->logy = 1; plots[n]->addHisto(extras.cl_itpc_chargeStep_s17); + plots[n]->logy = 1; plots[n]->addHisto(extras.bad_cl_itpc_chargeStep_s17); plots[++n] = new JevpPlot(contents.h_itpc_chargeStep_s18); - plots[n]->logy = 1; plots[n]->addHisto(extras.cl_itpc_chargeStep_s18); + plots[n]->addHisto(extras.cl_itpc_chargeStep_s18); + plots[n]->logy = 1; plots[n]->addHisto(extras.bad_cl_itpc_chargeStep_s18); plots[++n] = new JevpPlot(contents.h_itpc_chargeStep_s19); plots[n]->logy = 1; plots[n]->addHisto(extras.cl_itpc_chargeStep_s19); + plots[n]->logy = 1; plots[n]->addHisto(extras.bad_cl_itpc_chargeStep_s19); plots[++n] = new JevpPlot(contents.h_itpc_chargeStep_s20); - plots[n]->logy = 1; plots[n]->addHisto(extras.cl_itpc_chargeStep_s20); - // plots[n]->logy = 1; plots[n]->logy = 1; + plots[n]->logy = 1; + plots[n]->addHisto(extras.cl_itpc_chargeStep_s20); + plots[n]->addHisto(extras.bad_cl_itpc_chargeStep_s20); plots[++n] = new JevpPlot(contents.h_itpc_chargeStep_s21); - plots[n]->logy = 1; plots[n]->addHisto(extras.cl_itpc_chargeStep_s21); + plots[n]->logy = 1; + plots[n]->addHisto(extras.cl_itpc_chargeStep_s21); + plots[n]->addHisto(extras.bad_cl_itpc_chargeStep_s21); plots[++n] = new JevpPlot(contents.h_itpc_chargeStep_s22); plots[n]->logy = 1; plots[n]->addHisto(extras.cl_itpc_chargeStep_s22); + plots[n]->addHisto(extras.bad_cl_itpc_chargeStep_s22); plots[++n] = new JevpPlot(contents.h_itpc_chargeStep_s23); plots[n]->logy = 1; plots[n]->addHisto(extras.cl_itpc_chargeStep_s23); + plots[n]->addHisto(extras.bad_cl_itpc_chargeStep_s23); plots[++n] = new JevpPlot(contents.h_itpc_chargeStep_s24); plots[n]->logy = 1; plots[n]->addHisto(extras.cl_itpc_chargeStep_s24); + plots[n]->addHisto(extras.bad_cl_itpc_chargeStep_s24); + cout << "creating tpx charge steps " << endl; int pl_qs_idx_tpx = n+1; plots[++n] = new JevpPlot(contents.h_tpx_chargeStep_s1); - plots[n]->logy = 1; plots[n]->addHisto(extras.cl_tpx_chargeStep_s1); + plots[n]->logy = 1; + plots[n]->addHisto(extras.cl_tpx_chargeStep_s1); + plots[n]->addHisto(extras.bad_cl_tpx_chargeStep_s1); plots[++n] = new JevpPlot(contents.h_tpx_chargeStep_s2); - plots[n]->logy = 1; plots[n]->addHisto(extras.cl_tpx_chargeStep_s2); + plots[n]->logy = 1; + plots[n]->addHisto(extras.cl_tpx_chargeStep_s2); + plots[n]->addHisto(extras.bad_cl_tpx_chargeStep_s2); plots[++n] = new JevpPlot(contents.h_tpx_chargeStep_s3); plots[n]->logy = 1; plots[n]->addHisto(extras.cl_tpx_chargeStep_s3); + plots[n]->addHisto(extras.bad_cl_tpx_chargeStep_s3); plots[++n] = new JevpPlot(contents.h_tpx_chargeStep_s4); plots[n]->logy = 1; plots[n]->addHisto(extras.cl_tpx_chargeStep_s4); + plots[n]->addHisto(extras.bad_cl_tpx_chargeStep_s4); plots[++n] = new JevpPlot(contents.h_tpx_chargeStep_s5); plots[n]->logy = 1; plots[n]->addHisto(extras.cl_tpx_chargeStep_s5); + plots[n]->addHisto(extras.bad_cl_tpx_chargeStep_s5); plots[++n] = new JevpPlot(contents.h_tpx_chargeStep_s6); plots[n]->logy = 1; plots[n]->addHisto(extras.cl_tpx_chargeStep_s6); + plots[n]->addHisto(extras.bad_cl_tpx_chargeStep_s6); plots[++n] = new JevpPlot(contents.h_tpx_chargeStep_s7); plots[n]->logy = 1; plots[n]->addHisto(extras.cl_tpx_chargeStep_s7); + plots[n]->addHisto(extras.bad_cl_tpx_chargeStep_s7); plots[++n] = new JevpPlot(contents.h_tpx_chargeStep_s8); plots[n]->logy = 1; plots[n]->addHisto(extras.cl_tpx_chargeStep_s8); + plots[n]->addHisto(extras.bad_cl_tpx_chargeStep_s8); plots[++n] = new JevpPlot(contents.h_tpx_chargeStep_s9); plots[n]->logy = 1; plots[n]->addHisto(extras.cl_tpx_chargeStep_s9); + plots[n]->addHisto(extras.bad_cl_tpx_chargeStep_s9); plots[++n] = new JevpPlot(contents.h_tpx_chargeStep_s10); plots[n]->logy = 1; plots[n]->addHisto(extras.cl_tpx_chargeStep_s10); + plots[n]->addHisto(extras.bad_cl_tpx_chargeStep_s10); plots[++n] = new JevpPlot(contents.h_tpx_chargeStep_s11); plots[n]->logy = 1; plots[n]->addHisto(extras.cl_tpx_chargeStep_s11); + plots[n]->addHisto(extras.bad_cl_tpx_chargeStep_s11); plots[++n] = new JevpPlot(contents.h_tpx_chargeStep_s12); plots[n]->logy = 1; plots[n]->addHisto(extras.cl_tpx_chargeStep_s12); + plots[n]->addHisto(extras.bad_cl_tpx_chargeStep_s12); plots[++n] = new JevpPlot(contents.h_tpx_chargeStep_s13); plots[n]->logy = 1; plots[n]->addHisto(extras.cl_tpx_chargeStep_s13); + plots[n]->addHisto(extras.bad_cl_tpx_chargeStep_s13); plots[++n] = new JevpPlot(contents.h_tpx_chargeStep_s14); plots[n]->logy = 1; plots[n]->addHisto(extras.cl_tpx_chargeStep_s14); + plots[n]->addHisto(extras.bad_cl_tpx_chargeStep_s14); plots[++n] = new JevpPlot(contents.h_tpx_chargeStep_s15); plots[n]->logy = 1; plots[n]->addHisto(extras.cl_tpx_chargeStep_s15); + plots[n]->addHisto(extras.bad_cl_tpx_chargeStep_s15); plots[++n] = new JevpPlot(contents.h_tpx_chargeStep_s16); - plots[n]->logy = 1; plots[n]->addHisto(extras.cl_tpx_chargeStep_s16); + plots[n]->logy = 1; + plots[n]->addHisto(extras.cl_tpx_chargeStep_s16); + plots[n]->addHisto(extras.bad_cl_tpx_chargeStep_s17); plots[++n] = new JevpPlot(contents.h_tpx_chargeStep_s17); - plots[n]->logy = 1; plots[n]->addHisto(extras.cl_tpx_chargeStep_s17); + plots[n]->logy = 1; + plots[n]->addHisto(extras.cl_tpx_chargeStep_s17); + plots[n]->addHisto(extras.bad_cl_tpx_chargeStep_s17); plots[++n] = new JevpPlot(contents.h_tpx_chargeStep_s18); - plots[n]->logy = 1; plots[n]->addHisto(extras.cl_tpx_chargeStep_s18); + plots[n]->logy = 1; + plots[n]->addHisto(extras.cl_tpx_chargeStep_s18); + plots[n]->addHisto(extras.bad_cl_tpx_chargeStep_s18); plots[++n] = new JevpPlot(contents.h_tpx_chargeStep_s19); plots[n]->logy = 1; plots[n]->addHisto(extras.cl_tpx_chargeStep_s19); + plots[n]->addHisto(extras.bad_cl_tpx_chargeStep_s19); plots[++n] = new JevpPlot(contents.h_tpx_chargeStep_s20); plots[n]->logy = 1; plots[n]->addHisto(extras.cl_tpx_chargeStep_s20); + plots[n]->addHisto(extras.bad_cl_tpx_chargeStep_s20); plots[++n] = new JevpPlot(contents.h_tpx_chargeStep_s21); plots[n]->logy = 1; plots[n]->addHisto(extras.cl_tpx_chargeStep_s21); + plots[n]->addHisto(extras.bad_cl_tpx_chargeStep_s21); plots[++n] = new JevpPlot(contents.h_tpx_chargeStep_s22); plots[n]->logy = 1; plots[n]->addHisto(extras.cl_tpx_chargeStep_s22); + plots[n]->addHisto(extras.bad_cl_tpx_chargeStep_s22); plots[++n] = new JevpPlot(contents.h_tpx_chargeStep_s23); plots[n]->logy = 1; plots[n]->addHisto(extras.cl_tpx_chargeStep_s23); + plots[n]->addHisto(extras.bad_cl_tpx_chargeStep_s23); plots[++n] = new JevpPlot(contents.h_tpx_chargeStep_s24); plots[n]->logy = 1; plots[n]->addHisto(extras.cl_tpx_chargeStep_s24); + plots[n]->addHisto(extras.bad_cl_tpx_chargeStep_s24); - //plots[++n] = new JevpPlot(contents.h_tpc_drift_vel); - plots[++n] = new JevpPlot(contents.h_itpc_phi_charge); plots[n]->addHisto(extras.cl_itpc_phi_charge); plots[n]->optstat = 0; @@ -651,16 +780,20 @@ void tpcBuilder::initialize(int argc, char *argv[]) { plots[++n] = new JevpPlot(contents.no_clust_itpc); plots[n]->setOptStat(0); - // - // indices for blocks into the plots[] list + // indices for blocks into the contents and extras offsets + // the plot_ offsets are updated during adding plots + // // // long q_idx = ((long)&contents.h_tpc_sec1 - (long)contents.array) / (sizeof(TH1 *)); long qs_idx = ((long)&contents.h_itpc_chargeStep_s1 - (long)contents.array) / (sizeof(TH1 *)); //long qe_idx = ((long)&contents.e_tpc_sec1 - (long)contents.array) / (sizeof(TH1 *)); long cl_qs_idx = ((long)&extras.cl_itpc_chargeStep_s1 - (long)extras.array) / (sizeof(TH1 *)); + long bad_cl_qs_idx = ((long)&extras.bad_cl_itpc_chargeStep_s1 - (long)extras.array) / (sizeof(TH1 *)); + long qs_idx_tpx = ((long)&contents.h_tpx_chargeStep_s1 - (long)contents.array) / (sizeof(TH1 *)); long cl_qs_idx_tpx = ((long)&extras.cl_tpx_chargeStep_s1 - (long)extras.array) / (sizeof(TH1 *)); + long bad_cl_qs_idx_tpx = ((long)&extras.bad_cl_tpx_chargeStep_s1 - (long)extras.array) / (sizeof(TH1 *)); // The indices should only be used to address offsets into the contents or the extras TH1 arrays // They should not be used for plots[..] which may or may not correspond to the offset into @@ -677,20 +810,26 @@ void tpcBuilder::initialize(int argc, char *argv[]) { plots[i+pl_qs_idx]->setLegend(.7,.8,.95,.95); plots[i+pl_qs_idx]->getHisto(0)->setLegText("adc's"); plots[i+pl_qs_idx]->getHisto(1)->setLegText("clusters"); + plots[i+pl_qs_idx]->getHisto(2)->setLegText("bad clds"); plots[i+pl_qs_idx]->getHisto(0)->setLegArgs("l"); plots[i+pl_qs_idx]->getHisto(1)->setLegArgs("l"); + plots[i+pl_qs_idx]->getHisto(2)->setLegArgs("l"); plots[i+pl_qs_idx_tpx]->optstat = 0; plots[i+pl_qs_idx_tpx]->setLegend(.7,.8,.95,.95); plots[i+pl_qs_idx_tpx]->getHisto(0)->setLegText("adc's"); plots[i+pl_qs_idx_tpx]->getHisto(1)->setLegText("clusters"); + plots[i+pl_qs_idx_tpx]->getHisto(2)->setLegText("bad clds"); plots[i+pl_qs_idx_tpx]->getHisto(0)->setLegArgs("l"); plots[i+pl_qs_idx_tpx]->getHisto(1)->setLegArgs("l"); + plots[i+pl_qs_idx_tpx]->getHisto(2)->setLegArgs("l"); contents.array[i+qs_idx]->SetLineColor(kGreen); extras.array[i+cl_qs_idx]->SetLineColor(kRed); + extras.array[i+bad_cl_qs_idx]->SetLineColor(kBlue); contents.array[i+qs_idx_tpx]->SetLineColor(kGreen); extras.array[i+cl_qs_idx_tpx]->SetLineColor(kRed); + extras.array[i+bad_cl_qs_idx_tpx]->SetLineColor(kBlue); } // Add Plots to plot set... @@ -719,8 +858,9 @@ void tpcBuilder::startrun(daqReader *rdr) { void tpcBuilder::event(daqReader *rdr) { - int has_adc=0; + int has_cld=0; + int has_adc=0; int bunch7bit=0; // Get bunch crossing from trigger data.. @@ -736,8 +876,10 @@ void tpcBuilder::event(daqReader *rdr) long qe_idx = ((long)&contents.e_tpc_sec1 - (long)contents.array) / (sizeof(TH1 *)); long qs_idx = ((long)&contents.h_itpc_chargeStep_s1 - (long)contents.array) / (sizeof(TH1 *)); long cl_qs_idx = ((long)&extras.cl_itpc_chargeStep_s1 - (long)extras.array) / (sizeof(TH1 *)); + long bad_cl_qs_idx = ((long)&extras.bad_cl_itpc_chargeStep_s1 - (long)extras.array) / (sizeof(TH1 *)); long qs_idx_tpx = ((long)&contents.h_tpx_chargeStep_s1 - (long)contents.array) / (sizeof(TH1 *)); long cl_qs_idx_tpx = ((long)&extras.cl_tpx_chargeStep_s1 - (long)extras.array) / (sizeof(TH1 *)); + long bad_cl_qs_idx_tpx = ((long)&extras.bad_cl_tpx_chargeStep_s1 - (long)extras.array) / (sizeof(TH1 *)); @@ -755,6 +897,7 @@ void tpcBuilder::event(daqReader *rdr) double itpc_pix_count_cl = 0; double pixel_count = 0; double itpc_pixel_count=0; + double total_cluster =0; event_no++; // // reset event cluster plots @@ -768,44 +911,60 @@ void tpcBuilder::event(daqReader *rdr) double tb_charge_counts[512]; double charge_counts_cl[Npads1][Nrows1]; double tb_charge_counts_cl[512]; + double tb_bad_charge_counts_cl[512]; + // + // Loop over sectors + // step1 itpc adc + // step2 tpx adc + // 3 cld itpc + // 4 itpc cld for(int s=1;s<=24;s++) { + daq_dta *ddr = rdr->det("tpx")->get("raw",s); + while(ddr&&ddr->iterate()){ + // cout << "sector " << s << " rdo " << ddr->rdo << " " << ddr->ncontent << endl; + contents.tpc_rdo_bytes->Fill((s-1)*6+ddr->rdo, ddr->ncontent); + } + + daq_dta *ddi = rdr->det("itpc")->get("raw",s); + while(ddi&&ddi->iterate()){ + // cout << "sector " << s << " rdo " << ddi->rdo << " " << ddi->ncontent << endl; + contents.itpc_rdo_bytes->Fill((s-1)*4+ddi->rdo, ddi->ncontent); + } + #if fvd daq_dta *dda = rdr->det("tpx")->get("adc",s) ; cout << "tpx adc " << dda << endl; daq_dta *ddb = rdr->det("itpc")->get("adc",s) ; cout << "itpc adc " << ddb << endl; #endif - - + + double charge_count_sector = 0; memset(channel_counts, 0, sizeof(channel_counts)); memset(charge_counts, 0, sizeof(charge_counts)); memset(tb_charge_counts, 0, sizeof(tb_charge_counts)); memset(tb_charge_counts_cl, 0, sizeof(tb_charge_counts_cl)); - + // // get itpc data // daq_dta *dd = rdr->det("itpc")->get("adc",s) ; -#if fvd - cout << "itpc adc" << endl; -#endif if(dd) { if(tpcDataInThisRun==0) addServerTags("tpc"); tpcDataInThisRun = 1; - + // regular data... Note its always there even if empty // e.g. for Run 18 data there are data banks for all sectors? // has_adc = 1; tpc_max_channels += tpc_max_channels_inner_sector; itpc_max_channels += tpc_max_channels_inner_sector; - + while(dd->iterate()) { if (dd->ncontent == 0) continue; // skip padrow _tb0 @@ -816,14 +975,14 @@ void tpcBuilder::event(daqReader *rdr) { continue; } - - + + pixel_count += dd->ncontent ; itpc_pixel_count += dd->ncontent ; if(dd->ncontent > 0) { channel_counts[dd->pad][dd->row] = 1; } - + for(u_int i=0;incontent;i++) { int tb = dd->adc[i].tb; int adc = dd->adc[i].adc; @@ -836,52 +995,34 @@ void tpcBuilder::event(daqReader *rdr) // this cut was used in run18 due to partial lack of pedetsal sub.. // remove timebins where GG osc is important. if(tb>32 && tb<430) { - - /* - // this pad is sometimes hot mask out - // - if(s==10){ - if(dd->pad==66 && dd->row==37) - continue; - } - - if(s==12){ - if(dd->pad==41 && dd->row==26) - continue; - } - - if(s==14){ - if(dd->pad==41 && dd->row==38) - continue; - } - */ + charge_counts[dd->pad][dd->row] += adc; } tb_charge_counts[tb] += adc; } } } // end iterate - + for(int i=1;i 0 ) { contents.h_itpc_phi_charge->Fill(mPhiAngleMap[s-1][j-1][i-1],charge_counts[i][j]); ((TH2D *)contents.array[s + q_idx - 1])->Fill(i, j, charge_counts[i][j]); } } } // end i,j - + for(int i=0;i<512;i++) { contents.array[s + qs_idx - 1]->Fill(i,tb_charge_counts[i]); } contents.h_itpc_sector_charge->Fill(s, charge_count_sector); - + } //end if(dd) - + // // tpx data // @@ -889,9 +1030,6 @@ void tpcBuilder::event(daqReader *rdr) charge_count_sector = 0.0; dd = rdr->det("tpx")->get("adc",s) ; -#if fvd - cout << "tpx " << dd << endl; -#endif if(dd) { // regular data... if(tpcDataInThisRun==0) addServerTags("tpc"); tpcDataInThisRun = 1; @@ -900,12 +1038,6 @@ void tpcBuilder::event(daqReader *rdr) tpc_max_channels += tpc_max_channels_outer_sector; while(dd->iterate()){ -#if fvd - cout << "Sector " << s << " " << dd->ncontent << endl; -#endif -#if fvd - cout << " " << dd->pad << " " << dd->row << endl; -#endif // // skip rows < 14 ! should not appear in run 19 data // @@ -935,37 +1067,14 @@ void tpcBuilder::event(daqReader *rdr) LOG(ERR, "event=%d pad=%d row=%d tb=%d out of range. Ignore.", event_no, dd->pad, dd->row, tb); } else { -#if fvd - cout << dd->pad << " " << dd->row << " " << tb << " " << adc < 24){ - if(s==4) - if(dd->row+27 == 72 && dd->pad==110){ - continue; - } - if(s==12){ - if(dd->pad==19 && dd->row+27==43) - continue; - - } - - if(s==22){ - if(dd->pad==71 && dd->row+27==56) - continue; - - - } - charge_counts[dd->pad][dd->row+27] += adc; - } - tb_charge_counts[tb] += adc; + charge_counts[dd->pad][dd->row+27] += adc; } - + tb_charge_counts[tb] += adc; } + } + // // All data have been looked at // @@ -989,7 +1098,7 @@ void tpcBuilder::event(daqReader *rdr) } contents.h_tpx_sector_charge->Fill(s,charge_count_sector); } // end dd - + // // go to clusters // @@ -998,6 +1107,7 @@ void tpcBuilder::event(daqReader *rdr) double charge_cl=0; memset(charge_counts_cl, 0, sizeof(charge_counts_cl)); memset(tb_charge_counts_cl, 0, sizeof(tb_charge_counts_cl)); + memset(tb_bad_charge_counts_cl, 0, sizeof(tb_bad_charge_counts_cl)); // // Itpc data @@ -1017,24 +1127,37 @@ void tpcBuilder::event(daqReader *rdr) for(u_int i=0;incontent;i++) { noClustiTPC++; if((dd->cld[i].flags==0) || (dd->cld[i].flags==2)) { - pix_count_cl += (dd->cld[i].t2 - dd->cld[i].t1)*(dd->cld[i].p2 - dd->cld[i].p1); - itpc_pix_count_cl += (dd->cld[i].t2 - dd->cld[i].t1)*(dd->cld[i].p2 - dd->cld[i].p1); - itpc_pix_count_cl += (dd->cld[i].t2 - dd->cld[i].t1)*(dd->cld[i].p2 - dd->cld[i].p1); + if((dd->cld[i].t2 - dd->cld[i].t1)*(dd->cld[i].p2 - dd->cld[i].p1) <0) { +#if fvd + cout << "negative pixel event no " << event_no << " iTPC sector " << s << " row " << dd->row << endl; + cout << " time ( " << dd->cld[i].t2 << " " << dd->cld[i].t1 << " ) pads ( " << dd->cld[i].p2 << " , " << dd->cld[i].p1 <cld[i].tb << " pad " << dd->cld[i].pad << endl; +#endif + tb_bad_charge_counts_cl[(int)dd->cld[i].tb] += dd->cld[i].charge; + + } else { + pix_count_cl += (dd->cld[i].t2 - dd->cld[i].t1)*(dd->cld[i].p2 - dd->cld[i].p1); + itpc_pix_count_cl += (dd->cld[i].t2 - dd->cld[i].t1)*(dd->cld[i].p2 - dd->cld[i].p1); + } charge_counts_cl[(int)dd->cld[i].pad][dd->row] += dd->cld[i].charge; tb_charge_counts_cl[(int)dd->cld[i].tb] += dd->cld[i].charge; charge_cl += dd->cld[i].charge; - ((TH2D*)contents.cl_width_itpc_tb)->Fill(s,dd->cld[i].t2 - dd->cld[i].t1); + int tb_wd = dd->cld[i].t2 - dd->cld[i].t1; + if(tb_wd<0) tb_wd=0; + ((TH2D*)contents.cl_width_itpc_tb)->Fill(s,tb_wd); ((TH2D*)contents.cl_width_itpc_pad)->Fill(s,dd->cld[i].p2 - dd->cld[i].p1); } } } contents.no_clust_itpc->Fill(s, safelog(noClustiTPC)); + total_cluster += noClustiTPC; } // dd itpc if(has_cld) { for(int i=0;i<512;i++) { extras.array[s + cl_qs_idx - 1]->Fill(i,tb_charge_counts_cl[i]); + extras.array[s + bad_cl_qs_idx - 1]->Fill(i,tb_bad_charge_counts_cl[i]); } } for(int i=1;idet("tpx")->get("cld",s) ; if(dd) { @@ -1066,21 +1190,35 @@ void tpcBuilder::event(daqReader *rdr) if(dd->row<14) continue; // fix for reading pre run 19 files for(u_int i=0;incontent;i++) { noClustTPX++; - if((dd->cld[i].flags==0)) { + if(((dd->cld[i].flags==0)) || (dd->cld[i].flags==2)) { + + if((dd->cld[i].t2 - dd->cld[i].t1)*(dd->cld[i].p2 - dd->cld[i].p1) <0) { + tb_bad_charge_counts_cl[(int)dd->cld[i].tb] += dd->cld[i].charge; +#if fvd + cout << "negative pixel event no " << event_no << " TPX sector " << s << "row " << dd->row+27 << endl; + cout << " time ( " << dd->cld[i].t2 << " " << dd->cld[i].t1 << " ) pads ( " << dd->cld[i].p2 << " , " << dd->cld[i].p1 <cld[i].tb << " pad " << dd->cld[i].pad << endl; +#endif + } pix_count_cl += (dd->cld[i].t2 - dd->cld[i].t1)*(dd->cld[i].p2 - dd->cld[i].p1); charge_counts_cl[(int)dd->cld[i].pad][dd->row+27] += dd->cld[i].charge; tb_charge_counts_cl[(int)dd->cld[i].tb] += dd->cld[i].charge; charge_cl += dd->cld[i].charge; - ((TH2D*)contents.cl_width_tpx_tb)->Fill(s,dd->cld[i].t2 - dd->cld[i].t1); + + int tb_wd = dd->cld[i].t2 - dd->cld[i].t1; + if(tb_wd<0) tb_wd=0; + ((TH2D*)contents.cl_width_tpx_tb)->Fill(s,tb_wd); ((TH2D*)contents.cl_width_tpx_pad)->Fill(s,dd->cld[i].p2 - dd->cld[i].p1); } } } contents.no_clust_tpx->Fill(s, safelog(noClustTPX)); + total_cluster += noClustTPX; } if(has_cld) { for(int i=0;i<512;i++) { extras.array[s + cl_qs_idx_tpx - 1]->Fill(i,tb_charge_counts_cl[i]); + extras.array[s + bad_cl_qs_idx_tpx - 1]->Fill(i,tb_bad_charge_counts_cl[i]); } } @@ -1103,39 +1241,6 @@ void tpcBuilder::event(daqReader *rdr) // Summaries are completed... //printf("%d channel counts: %lf (%lf)\n",rdr->seq, channel_count, pixel_count); // - // Need scale differently for itpx,itpc addc may not be in same event ??? - // must also scale tpx differently. - - //FV This whole scaling does not make much sense to me. Commented out. - // It does make some sense since it tries to ensure that adc - // and clusters are on approximately the same scale - // - /* - if(has_adc) { - - n_adc++; - double adc_scale = (double)(n_adc-1) / (double)n_adc; - if(n_adc == 1) adc_scale = 1; - - for(int i=1;i<=24;i++) { - contents.array[i + qs_idx - 1]->Scale(adc_scale); - } - contents.h_itpc_phi_charge->Scale(adc_scale); - contents.h_itpc_sector_charge->Scale(adc_scale); - } - - if(has_cld) { - n_cld++; - double cld_scale = (double)(n_cld-1) / (double)n_cld; - if(n_cld == 1) cld_scale = 1; - - for(int i=1;i<=24;i++) { - extras.array[i + cl_qs_idx - 1]->Scale(cld_scale); - } - extras.cl_itpc_phi_charge->Scale(cld_scale); - extras.cl_itpc_sector_charge->Scale(cld_scale); - } - */ switch(rdr->trgcmd) { @@ -1149,62 +1254,17 @@ void tpcBuilder::event(daqReader *rdr) contents.itpc_pix_occ_physics->Fill(100.0 * (double)itpc_pixel_count / (itpc_max_channels * 400.0)); extras.itpc_clpix_occ_physics->Fill(100.0 * (double)itpc_pix_count_cl / (itpc_cl_max_channels * 400.0)); - extras.clusters_per_bx->Fill(bunch7bit, pix_count_cl); - - break; - case 8: // Lasers... - case 9: -#if checklaser - { - - LOG(DBG, "Got a laser..."); - - contents.tpc_pix_occ_laser->Fill(100.0 * (double)pixel_count / (tpc_max_channels * 400.0)); - extras.tpc_clpix_occ_laser->Fill(100.0 * (double)pix_count_cl / (cl_max_channels * 400.0)); - contents.itpc_pix_occ_laser->Fill(100.0 * (double)itpc_pixel_count / (itpc_max_channels * 400.0)); - extras.itpc_clpix_occ_laser->Fill(100.0 * (double)itpc_pix_count_cl / (itpc_cl_max_channels * 400.0)); + extras.clusters_per_bx->Fill(bunch7bit, total_cluster); - /* Remove lasers from tpcBuilder - double vDrift = laserReader->Make(rdr); - - LOG("JEFF","Laser Event Processed: run=%d evt=%d vDrift=%lf total_tpc_evts=%d",run, rdr->event_number, vDrift, numberOfEventsRun); - - if((vDrift > 5.4) && (vDrift < 5.8)) { - nlasers++; - contents.h_tpc_drift_vel->Fill(vDrift); - } - drift_vel = contents.h_tpc_drift_vel->GetMean(); - //LOG("JEFF", "run=%d nlasers: %d curr_drift=%lf", run, nlasers, drift_vel); - //if(nlasers == 50) { - if(1) { // inneficient! write all of them :-) - FILE *f = fopen("/RTS/conf/handler/.l4_drift_velocity","w"); - if(f) { - fprintf(f, "%lf", drift_vel); - fclose(f); - } - else { - LOG(OPER, "Can't access drift velocity file!"); - } - - f = fopen("/RTS/conf/handler/.l4_drift_velocity_run","w"); - if(f) { - fprintf(f, "%d", run); - fclose(f); - } - else { - LOG(OPER, "Can't access drift velocity run number file!"); - } - - LOG("JEFF", "Wrote laser to .l4_drift_velocity file %lf %d", drift_vel, run); - } - */ - } -#endif break; - + case 8: // Lasers... + case 9: + + break; + case 10: // Pulsers.. contents.tpc_pix_occ_pulser->Fill(100.0 * (double)pixel_count / (tpc_max_channels * 400.0)); diff --git a/OnlTools/Jevp/StJevpBuilders/tpcBuilder.h b/OnlTools/Jevp/StJevpBuilders/tpcBuilder.h index eab8e469057..c47d00f7fd1 100644 --- a/OnlTools/Jevp/StJevpBuilders/tpcBuilder.h +++ b/OnlTools/Jevp/StJevpBuilders/tpcBuilder.h @@ -49,6 +49,10 @@ class tpcBuilder : public JevpBuilder { TH1 *tpc_pix_occ_laser; TH1 *tpc_pix_occ_pulser; + TH1 *tpc_rdo_bytes; + TH1 *itpc_rdo_bytes; + + TH1 *h_tpc_sec1; TH1 *h_tpc_sec2; @@ -206,6 +210,8 @@ class tpcBuilder : public JevpBuilder { TH1 *tpc_clpix_occ_laser; TH1 *tpc_clpix_occ_pulser; + + TH1 *cl_itpc_chargeStep_s1; TH1 *cl_itpc_chargeStep_s2; TH1 *cl_itpc_chargeStep_s3; @@ -231,6 +237,31 @@ class tpcBuilder : public JevpBuilder { TH1 *cl_itpc_chargeStep_s23; TH1 *cl_itpc_chargeStep_s24; + TH1 *bad_cl_itpc_chargeStep_s1; + TH1 *bad_cl_itpc_chargeStep_s2; + TH1 *bad_cl_itpc_chargeStep_s3; + TH1 *bad_cl_itpc_chargeStep_s4; + TH1 *bad_cl_itpc_chargeStep_s5; + TH1 *bad_cl_itpc_chargeStep_s6; + TH1 *bad_cl_itpc_chargeStep_s7; + TH1 *bad_cl_itpc_chargeStep_s8; + TH1 *bad_cl_itpc_chargeStep_s9; + TH1 *bad_cl_itpc_chargeStep_s10; + TH1 *bad_cl_itpc_chargeStep_s11; + TH1 *bad_cl_itpc_chargeStep_s12; + TH1 *bad_cl_itpc_chargeStep_s13; + TH1 *bad_cl_itpc_chargeStep_s14; + TH1 *bad_cl_itpc_chargeStep_s15; + TH1 *bad_cl_itpc_chargeStep_s16; + TH1 *bad_cl_itpc_chargeStep_s17; + TH1 *bad_cl_itpc_chargeStep_s18; + TH1 *bad_cl_itpc_chargeStep_s19; + TH1 *bad_cl_itpc_chargeStep_s20; + TH1 *bad_cl_itpc_chargeStep_s21; + TH1 *bad_cl_itpc_chargeStep_s22; + TH1 *bad_cl_itpc_chargeStep_s23; + TH1 *bad_cl_itpc_chargeStep_s24; + TH1 *cl_tpx_chargeStep_s1; TH1 *cl_tpx_chargeStep_s2; TH1 *cl_tpx_chargeStep_s3; @@ -256,6 +287,31 @@ class tpcBuilder : public JevpBuilder { TH1 *cl_tpx_chargeStep_s23; TH1 *cl_tpx_chargeStep_s24; + TH1 *bad_cl_tpx_chargeStep_s1; + TH1 *bad_cl_tpx_chargeStep_s2; + TH1 *bad_cl_tpx_chargeStep_s3; + TH1 *bad_cl_tpx_chargeStep_s4; + TH1 *bad_cl_tpx_chargeStep_s5; + TH1 *bad_cl_tpx_chargeStep_s6; + TH1 *bad_cl_tpx_chargeStep_s7; + TH1 *bad_cl_tpx_chargeStep_s8; + TH1 *bad_cl_tpx_chargeStep_s9; + TH1 *bad_cl_tpx_chargeStep_s10; + TH1 *bad_cl_tpx_chargeStep_s11; + TH1 *bad_cl_tpx_chargeStep_s12; + TH1 *bad_cl_tpx_chargeStep_s13; + TH1 *bad_cl_tpx_chargeStep_s14; + TH1 *bad_cl_tpx_chargeStep_s15; + TH1 *bad_cl_tpx_chargeStep_s16; + TH1 *bad_cl_tpx_chargeStep_s17; + TH1 *bad_cl_tpx_chargeStep_s18; + TH1 *bad_cl_tpx_chargeStep_s19; + TH1 *bad_cl_tpx_chargeStep_s20; + TH1 *bad_cl_tpx_chargeStep_s21; + TH1 *bad_cl_tpx_chargeStep_s22; + TH1 *bad_cl_tpx_chargeStep_s23; + TH1 *bad_cl_tpx_chargeStep_s24; + TH1 *cl_itpc_phi_charge; TH1 *cl_itpc_sector_charge; TH1 *cl_tpx_phi_charge; diff --git a/OnlTools/Jevp/level.source b/OnlTools/Jevp/level.source index e4bbe2620c8..c950a7999fd 100644 --- a/OnlTools/Jevp/level.source +++ b/OnlTools/Jevp/level.source @@ -1,6 +1,6 @@ # STAR LEVEL for EVP code -starver SL23c +starver SL24a #starver SL21b diff --git a/OnlTools/Jevp/readme.txt b/OnlTools/Jevp/readme.txt index 2882d69e1ac..13ca76ad1da 100644 --- a/OnlTools/Jevp/readme.txt +++ b/OnlTools/Jevp/readme.txt @@ -14,32 +14,43 @@ readme files: * I. Obtain and compile the code according to rules for the current distro *************************************************************************** -1. Using github clone https://github.com/jml985/star-sw.git - -2. - To guarentee the most modern codes you need to have a mixed git/cvs directory. - - The production jevp code is in the github under jml985/star-sw.git in the branch JevpProduction - - The production RTS code is in cvs under StRoot/RTS - -git init -git config core.sparseCheckout true -git remote add origin https://github.com/YOURCLONE/star-sw.git -echo 'OnlTools/Jevp' > .git/info/sparse-checkout -echo 'OnlTools/PDFUtil' >> .git/info/sparse-checkout -git fetch origin -git checkout origin/JevpProduction -b JevpProduction -cvs co StRoot/RTS -source OnlTools/Jevp/level.source -cons - -3. Make a pull request - - When you have tested your code, use "git commit" and "git push" to put it into your - local repository. Then issue a pull request to the main branch of - https://github.com/star-bnl/star-sw.git. If you use these directions - directly you will need to modify the defaults - - Tell jml@bnl.gov the pull request #. This will allow me to incorporate the code - in the production server without waiting on the various evaluation procedures. - - +I now recommend using code directly from the JevpProduction branch as follows. +Note that cons will take a long time the first time it is compiled + +1. To get your repository, use the upstream repo: jml985/JevpProduction +From scratch +> git init +> get remote add origin https://github.com/YOURCLONE/star-sw.git +> git remote add upstream https://github.com/jml985/star-sw.git + +> git config core.sparseCheckout true +> echo 'OnlTools/Jevp' > .git/info/sparse-checkout +> echo 'StRoot/RTS' >> .git/info/sparse-checkout +> echo 'StRoot/StEEmcPool' >> .git/info/sparse-checkout +> echo 'StRoot/StEmcPool' >> .git/info/sparse-checkout +> echo 'StRoot/StEmcUtil' >> .git/info/sparse-checkout + +> git fetch upstream +> git checkout upstream/JevpProduction -b JevpProduction +> source OnlTools/Jevp/level.source +> cons + +2. To update existing JevpProduction branch +> git fetch upstream +> git merge upstream/JevpProduction +> source OnlTools/Jevp/level.source +> cons + +3. To make a pull request +> git add -u +> git commit -m "your comment" +> git push origin JevpProduction + +Then, use gituhub to make a pull request to the official main branch: + + a. pull request from your JevpProduction to https://github.com/star-bnl/star-sw.git / main + b. tell jml@bnl.gov the pull request # + ********************************** * II. Code structure ********************************** @@ -208,3 +219,33 @@ deep -- value // typically these are not neccessary. The program a a 1 x 10 stack of histograms you can set wide=1 and deep=10 scaley -- value // This forces all histos in the tab to have the same maximum y value + + + +// Old git instructions using merged cvs/github + +// Mixed Distribution... +1. Using github clone https://github.com/jml985/star-sw.git + +2. - To guarentee the most modern codes you need to have a mixed git/cvs directory. + - The production jevp code is in the github under jml985/star-sw.git in the branch JevpProduction + - The production RTS code is in cvs under StRoot/RTS + +git init +git config core.sparseCheckout true +git remote add origin https://github.com/YOURCLONE/star-sw.git +echo 'OnlTools/Jevp' > .git/info/sparse-checkout +echo 'OnlTools/PDFUtil' >> .git/info/sparse-checkout +git fetch origin +git checkout origin/JevpProduction -b JevpProduction +cvs co StRoot/RTS +source OnlTools/Jevp/level.source +cons + +3. Make a pull request + - When you have tested your code, use "git commit" and "git push" to put it into your + local repository. Then issue a pull request to the main branch of + https://github.com/star-bnl/star-sw.git. If you use these directions + directly you will need to modify the defaults + - Tell jml@bnl.gov the pull request #. This will allow me to incorporate the code + in the production server without waiting on the various evaluation procedures. From 7a2220691e08ea2ca4cb4306a1e5f46973a1bbd5 Mon Sep 17 00:00:00 2001 From: akioogawa <85249930+akioogawa@users.noreply.github.com> Date: Wed, 8 May 2024 12:25:05 -0400 Subject: [PATCH 18/45] Adding FCS online gain used on DEP in offline DB (#668) Adding FCS online gain used on DEP in offline DB which will be used for offline trigger emulation (StFcsTriggerSimMaker). Offline DB already has tables pushed. Here is code needed to reading of those tables, and using them. Assorted macros to push those into DB and input files are also in here for future reference/updates. Those gainOnline tables will be only useful for trigger emulation in offline, and other analysis only uses gain and gaincorr for offline energy gain calibrations. --- StRoot/StFcsDbMaker/StFcsDb.cxx | 94 +- StRoot/StFcsDbMaker/StFcsDb.h | 29 +- StRoot/StFcsDbMaker/StFcsDbMaker.cxx | 31 + StRoot/StFcsDbMaker/macro/fcsGain_db.C | 186 +- .../macro/fcsTimedepGainCorr_db.C | 336 ++++ .../macro/ratio2_ecal_23047026_23005043.txt | 1497 ++++++++++++++++ .../macro/ratio2_ecal_23058015_23005043.txt | 1497 ++++++++++++++++ .../ratio2_ecal_23065037_23005043_0.5.txt | 1497 ++++++++++++++++ .../macro/ratio2a_ecal_23047026_23005043.txt | 1497 ++++++++++++++++ .../StFcsTriggerSimMaker.cxx | 41 +- .../StFcsTriggerSimMaker.h | 2 + .../files/fcs_ecal_electronics_gains.txt | 1537 +++++++++++++++++ .../files/fcs_ecal_et_gains_new.txt | 1537 +++++++++++++++++ .../files/fcs_ecal_et_gains_old.txt | 1537 +++++++++++++++++ .../files/fcs_hcal_electronics_gains.txt | 577 +++++++ .../files/fcs_hcal_electronics_gains_1.0.txt | 577 +++++++ .../files/fcs_hcal_electronics_gains_1.3.txt | 577 +++++++ .../files/fcs_hcal_et_gains_new.txt | 577 +++++++ .../files/fcs_hcal_et_gains_old.txt | 577 +++++++ .../files/ratio2_ecal_23047026_23005043.txt | 1497 ++++++++++++++++ .../files/ratio2_ecal_23058015_23005043.txt | 1497 ++++++++++++++++ .../ratio2_ecal_23065037_23005043_0.5.txt | 1497 ++++++++++++++++ .../files/ratio2a_ecal_23047026_23005043.txt | 1497 ++++++++++++++++ 23 files changed, 20141 insertions(+), 50 deletions(-) create mode 100644 StRoot/StFcsDbMaker/macro/fcsTimedepGainCorr_db.C create mode 100644 StRoot/StFcsDbMaker/macro/ratio2_ecal_23047026_23005043.txt create mode 100644 StRoot/StFcsDbMaker/macro/ratio2_ecal_23058015_23005043.txt create mode 100644 StRoot/StFcsDbMaker/macro/ratio2_ecal_23065037_23005043_0.5.txt create mode 100644 StRoot/StFcsDbMaker/macro/ratio2a_ecal_23047026_23005043.txt create mode 100644 StRoot/StSpinPool/StFcsTriggerSimMaker/files/fcs_ecal_electronics_gains.txt create mode 100644 StRoot/StSpinPool/StFcsTriggerSimMaker/files/fcs_ecal_et_gains_new.txt create mode 100644 StRoot/StSpinPool/StFcsTriggerSimMaker/files/fcs_ecal_et_gains_old.txt create mode 100644 StRoot/StSpinPool/StFcsTriggerSimMaker/files/fcs_hcal_electronics_gains.txt create mode 100644 StRoot/StSpinPool/StFcsTriggerSimMaker/files/fcs_hcal_electronics_gains_1.0.txt create mode 100644 StRoot/StSpinPool/StFcsTriggerSimMaker/files/fcs_hcal_electronics_gains_1.3.txt create mode 100644 StRoot/StSpinPool/StFcsTriggerSimMaker/files/fcs_hcal_et_gains_new.txt create mode 100644 StRoot/StSpinPool/StFcsTriggerSimMaker/files/fcs_hcal_et_gains_old.txt create mode 100644 StRoot/StSpinPool/StFcsTriggerSimMaker/files/ratio2_ecal_23047026_23005043.txt create mode 100644 StRoot/StSpinPool/StFcsTriggerSimMaker/files/ratio2_ecal_23058015_23005043.txt create mode 100644 StRoot/StSpinPool/StFcsTriggerSimMaker/files/ratio2_ecal_23065037_23005043_0.5.txt create mode 100644 StRoot/StSpinPool/StFcsTriggerSimMaker/files/ratio2a_ecal_23047026_23005043.txt diff --git a/StRoot/StFcsDbMaker/StFcsDb.cxx b/StRoot/StFcsDbMaker/StFcsDb.cxx index bea6dc30797..4c645fa9f0d 100644 --- a/StRoot/StFcsDbMaker/StFcsDb.cxx +++ b/StRoot/StFcsDbMaker/StFcsDb.cxx @@ -287,9 +287,28 @@ void StFcsDb::setFcsPresValley(fcsPresValley_st* t){ else { memcpy(&mFcsPresValley,t,sizeof(fcsPresValley_st)); } } +void StFcsDb::setFcsEcalGainOnline(fcsEcalGainOnline_st* t){ + if(!t) { memset(&mFcsEcalGainOnline,0,sizeof(fcsEcalGainOnline_st)); } + else { memcpy(&mFcsEcalGainOnline,t,sizeof(fcsEcalGainOnline_st)); } +} + +void StFcsDb::setFcsHcalGainOnline(fcsHcalGainOnline_st* t){ + if(!t) { memset(&mFcsHcalGainOnline,0,sizeof(fcsHcalGainOnline_st)); } + else { memcpy(&mFcsHcalGainOnline,t,sizeof(fcsHcalGainOnline_st)); } +} + +void StFcsDb::setFcsPresThreshold(fcsPresThreshold_st* t){ + if(!t) { memset(&mFcsPresThreshold,0,sizeof(fcsPresThreshold_st)); } + else { memcpy(&mFcsPresThreshold,t,sizeof(fcsPresThreshold_st)); } +} + int StFcsDb::InitRun(int runNumber) { LOG_INFO << "StFcsDb::InitRun - run = " << runNumber << endm; mRun=runNumber; + if(mEtGainMode==0){ + if(200000000){ makeMap2019(); @@ -354,8 +373,31 @@ int StFcsDb::InitRun(int runNumber) { readGainCorrFromText(); } + int ie=0, ih=0, ip=0, ehp, ns, crt, slt, dep, ch; + for(int ins=0; insGetDataBase("Calibrations/rhic/vertexSeed"); + //TDataSet* dbDataSet = StMaker::GetChain()->GetDataBase("Calibrations/rhic/vertexSeed"); + TDataSet* dbDataSet = 0; if(dbDataSet){ vertexSeed_st* vSeed = ((St_vertexSeed*) (dbDataSet->FindObject("vertexSeed")))->GetTable(); if(vSeed){ @@ -935,6 +977,36 @@ float StFcsDb::getPresValley(int det, int id) const { return getGainCorrection(det,id); } +float StFcsDb::getGainOnline(StFcsHit* hit) const { + return getGainOnline(hit->detectorId(), hit->id()); +} + +float StFcsDb::getGainOnline(int det, int id) const { + switch(mGainOnlineMode){ + case GAINMODE::FORCED : + if(det<=kFcsEcalSouthDetId) return mForceUniformGainOnlineEcal; + if(det<=kFcsHcalSouthDetId) return mForceUniformGainOnlineHcal; + if(det<=kFcsPresSouthDetId) return mForceUniformGainOnlinePres; + case GAINMODE::DB : + default: + if(det>=0 && det=0 && iddetectorId(), hit->id()); +} + +float StFcsDb::getPresThreshold(int det, int id) const { + return getGainCorrection(det,id); +} + + float StFcsDb::getGain8(StFcsHit* hit) const { return getGain8(hit->detectorId(), hit->id()); } @@ -1942,19 +2014,33 @@ float StFcsDb::getEtGain(int det, int id, float factor) const{ } void StFcsDb::printEtGain(){ - // double norm[2]={0.24711, 0.21781}; // [MeV/coint] + // double norm[2]={0.24711, 0.21781}; // [MeV/coint] double norm[2]={0.24711, 0.24711}; + double xoff[2]={6.570*2.54 - 6.850*2.54, 7.430*2.54-8.380*2.54}; + double yoff[2]={-5.26,1.80}; + double gain=0.0053; + if(mEtGainMode==1){ + gain/=0.7; + norm[1]=0.24711; + } for(int det=0; det0 dump tables to text files int mRun19=0; //! run19 flag int mLeakyHcal=0; //! LeakyHcal has different center positions + int mEtGainMode=0; //! ET Gain Setting GAINMODE mGainMode = GAINMODE::DB; //! Gain mode selection float mForceUniformGainEcal=-1.0; //! forcing a value @@ -322,11 +340,17 @@ class StFcsDb : public TDataSet { float mForceUniformGainCorrectionPres=-1.0; //! forcing a value char mGainCorrFilename[256]; //! gaincorr filename void readGainCorrFromText(); + + GAINMODE mGainOnlineMode = GAINMODE::DB; //! GainOnline mode selection + float mForceUniformGainOnlineEcal=-1.0; //! forcing a value + float mForceUniformGainOnlineHcal=-1.0; //! forcing a value + float mForceUniformGainOnlinePres=-1.0; //! forcing a value //DEP sorted ped/gain/corr float mPed[kFcsEHP][kFcsNorthSouth][kFcsMaxDepBd][kFcsMaxDepCh]; //! Pedestal float mGain[kFcsEHP][kFcsNorthSouth][kFcsMaxDepBd][kFcsMaxDepCh]; //! Gain float mGainCorr[kFcsEHP][kFcsNorthSouth][kFcsMaxDepBd][kFcsMaxDepCh]; //! GainCorr (Valley value for PRES) + float mGainOnline[kFcsEHP][kFcsNorthSouth][kFcsMaxDepBd][kFcsMaxDepCh]; //! GainOnline (Threshold value for PRES) //Beam line parameters double mVx=0.0; //! beamline x offset @@ -344,6 +368,9 @@ class StFcsDb : public TDataSet { fcsEcalGainCorr_st mFcsEcalGainCorr; fcsHcalGainCorr_st mFcsHcalGainCorr; fcsPresValley_st mFcsPresValley; + fcsEcalGainOnline_st mFcsEcalGainOnline; + fcsHcalGainOnline_st mFcsHcalGainOnline; + fcsPresThreshold_st mFcsPresThreshold; /// Getting pointer to parent & primary g2t_track from StFcsCluster /// mode=0 for parent, and mode=1 for primary diff --git a/StRoot/StFcsDbMaker/StFcsDbMaker.cxx b/StRoot/StFcsDbMaker/StFcsDbMaker.cxx index 0d74fc1a3a5..fa994d33884 100644 --- a/StRoot/StFcsDbMaker/StFcsDbMaker.cxx +++ b/StRoot/StFcsDbMaker/StFcsDbMaker.cxx @@ -129,6 +129,9 @@ #include "tables/St_fcsEcalGainCorr_Table.h" #include "tables/St_fcsHcalGainCorr_Table.h" #include "tables/St_fcsPresValley_Table.h" +#include "tables/St_fcsEcalGainOnline_Table.h" +#include "tables/St_fcsHcalGainOnline_Table.h" +#include "tables/St_fcsPresThreshold_Table.h" #include "tables/St_vertexSeed_Table.h" ClassImp(StFcsDbMaker) @@ -196,6 +199,9 @@ int StFcsDbMaker::InitRun(int runNumber) { St_fcsEcalGainCorr *dbFcsEcalGainCorr =0; St_fcsHcalGainCorr *dbFcsHcalGainCorr =0; St_fcsPresValley *dbFcsPresValley =0; + St_fcsEcalGainOnline *dbFcsEcalGainOnline =0; + St_fcsHcalGainOnline *dbFcsHcalGainOnline =0; + St_fcsPresThreshold *dbFcsPresThreshold =0; DBcalib = GetInputDB("Calibrations/fcs"); if(!DBcalib){ LOG_ERROR << "StFcsDbMaker::InitRun - No Calibration/fcs"<Find("fcsEcalGainCorr"); dbFcsHcalGainCorr = (St_fcsHcalGainCorr*) DBcalib->Find("fcsHcalGainCorr"); dbFcsPresValley = (St_fcsPresValley*) DBcalib->Find("fcsPresValley"); + dbFcsEcalGainOnline = (St_fcsEcalGainOnline*)DBcalib->Find("fcsEcalGainOnline"); + dbFcsHcalGainOnline = (St_fcsHcalGainOnline*)DBcalib->Find("fcsHcalGainOnline"); + dbFcsPresThreshold = (St_fcsPresThreshold*) DBcalib->Find("fcsPresThreshold"); } //Ecal Gain @@ -250,6 +259,28 @@ int StFcsDbMaker::InitRun(int runNumber) { }else{ mFcsDb->setFcsPresValley((fcsPresValley_st*) dbFcsPresValley->GetTable()); } + + //Ecal GainOnline + if(!dbFcsEcalGainOnline) { + LOG_ERROR << "StFcsDbMaker::InitRun - No Calibration/fcs/fcsEcalGainOnline"<setFcsEcalGainOnline(0); + }else{ + mFcsDb->setFcsEcalGainOnline((fcsEcalGainOnline_st*) dbFcsEcalGainOnline->GetTable()); + } + //Hcal GainOnline + if(!dbFcsHcalGainOnline) { + LOG_ERROR << "StFcsDbMaker::InitRun - No Calibration/fcs/fcsHcalGainOnline"<setFcsHcalGainOnline(0); + }else{ + mFcsDb->setFcsHcalGainOnline((fcsHcalGainOnline_st*) dbFcsHcalGainOnline->GetTable()); + } + //Pres Threshold + if(!dbFcsPresThreshold) { + LOG_ERROR << "StFcsDbMaker::InitRun - No Calibration/fcs/fcsPresThreshold"<setFcsPresThreshold(0); + }else{ + mFcsDb->setFcsPresThreshold((fcsPresThreshold_st*) dbFcsPresThreshold->GetTable()); + } } mFcsDb->InitRun(runNumber); diff --git a/StRoot/StFcsDbMaker/macro/fcsGain_db.C b/StRoot/StFcsDbMaker/macro/fcsGain_db.C index e107b9bf220..83e48597d69 100644 --- a/StRoot/StFcsDbMaker/macro/fcsGain_db.C +++ b/StRoot/StFcsDbMaker/macro/fcsGain_db.C @@ -1,19 +1,62 @@ #include #include +class StFcsDb; +StFcsDb* mFcsDb=0; + +void readElectronicsGain(char* file, float* eonl){ + printf("Reading Electronics Gain file : %s\n",file); + FILE* F=fopen(file,"r"); + if(F == NULL){ + printf("Could not open %s\n",file); + return; + } + int ehp,ns,dep,ch; + float gain; + char dummy[100]; + fgets(dummy,100,F); + printf("%s\n",dummy); + while(fscanf(F,"%d %d %d %d %f",&ehp,&ns,&dep,&ch,&gain) != EOF){ + int det,id,crt,slt; + mFcsDb->getIdfromDep(ehp,ns,dep,ch,det,id,crt,slt); + int idx=det*748 + id; + eonl[idx]=gain; + printf("ELECTRONICS GAIN ehp%1d ns%1d dep%02d ch%02d id=%3d idx=%4d gain=%f\n", + ehp,ns,dep,ch,id,idx,eonl[idx]); + } + fclose(F); +} + void fcsGain_db(char* opt = "", char* input) { gROOT->Macro("LoadLogger.C"); gSystem->Load("St_base.so"); gSystem->Load("libStDb_Tables.so"); - gSystem->Load("StDbLib.so"); - + gSystem->Load("StDbLib.so"); + gSystem->Load("StChain"); + gSystem->Load("StBFChain"); + gSystem->Load("StUtilities"); + gSystem->Load("StIOMaker"); + gSystem->Load("StarClassLibrary"); + gSystem->Load("St_Tables"); + gSystem->Load("StDbLib"); + gSystem->Load("StDbBroker"); + gSystem->Load("St_db_Maker"); + gSystem->Load("StFcsDbMaker.so"); + + mFcsDb=new StFcsDb; + mFcsDb->Init(); + mFcsDb->InitRun(23000000); + // structure to fill up fcsEcalGain_st egain; fcsHcalGain_st hgain; fcsPresGain_st pgain; fcsEcalGainCorr_st ecorr; fcsHcalGainCorr_st hcorr; - fcsPresValley_st pcorr; + fcsPresValley_st pcorr; + fcsEcalGainOnline_st eonl; + fcsHcalGainOnline_st honl; + fcsPresThreshold_st ponl; TString option(opt); std::cout << "Opt =" << opt << "\n"; @@ -22,28 +65,34 @@ void fcsGain_db(char* opt = "", char* input) { std::cout << "hcal = " << option.Contains("hcal") << "\n"; std::cout << "pres = " << option.Contains("pres") << "\n"; std::cout << "ehp = " << option.Contains("ehp") << "\n"; - std::cout << "gain = " << option.Contains("gain") << "\n"; - std::cout << "corr = " << option.Contains("corr") << "\n"; - std::cout << "both = " << option.Contains("both") << "\n"; + std::cout << "gain = " << option.Contains("gain") << "\n"; + std::cout << "corr = " << option.Contains("corr") << "\n"; + std::cout << "onl = " << option.Contains("onl") << "\n"; + std::cout << "both = " << option.Contains("both") << "\n"; + std::cout << "all = " << option.Contains("all") << "\n"; - int ecal=0, hcal=0, pres=0, gain=0, corr=0; + int ecal=0, hcal=0, pres=0, gain=0, corr=0, onl=0; if(option.Contains("ecal") || option.Contains("ehp")) ecal=1; if(option.Contains("hcal") || option.Contains("ehp")) hcal=1; if(option.Contains("pres") || option.Contains("ehp")) pres=1; - if(option.Contains("gain") || option.Contains("both")) gain=1; - if(option.Contains("corr") || option.Contains("both")) corr=1; + if(option.Contains("gain") || option.Contains("both") || option.Contains("all")) gain=1; + if(option.Contains("corr") || option.Contains("both") || option.Contains("all")) corr=1; + if(option.Contains("onl") || option.Contains("all")) onl=1; TString data(input); TString storeTime(""); TString flavor; if(data.Contains("run22sim")){ storeTime = "2021-10-15 00:00:00"; flavor="sim"; - if(ecal && gain) for(int i=0; i<1496; i++) egain.gain[i]=0.0053; //default 5.3MeV/ch - if(hcal && gain) for(int i=0; i< 520; i++) hgain.gain[i]=0.0053; //default 5.3MeV/ch - if(pres && gain) for(int i=0; i< 384; i++) pgain.gain[i]=0.01; //100ch for MIP - if(ecal && corr) for(int i=0; i<1496; i++) ecorr.gaincorr[i]=1.0;//default 1 - if(hcal && corr) for(int i=0; i< 520; i++) hcorr.gaincorr[i]=1.0;//default 1 - if(pres && corr) for(int i=0; i< 384; i++) pcorr.valley[i]=0.5; //0.5 for 1/2 MIP + if(ecal && gain) for(int i=0; i<1496; i++) egain.gain[i]=0.0053; //default 5.3MeV/ch + if(hcal && gain) for(int i=0; i< 520; i++) hgain.gain[i]=0.0053; //default 5.3MeV/ch + if(pres && gain) for(int i=0; i< 384; i++) pgain.gain[i]=0.01; //100ch for MIP + if(ecal && corr) for(int i=0; i<1496; i++) ecorr.gaincorr[i]=1.0; //default 1 + if(hcal && corr) for(int i=0; i< 520; i++) hcorr.gaincorr[i]=1.0; //default 1 + if(pres && corr) for(int i=0; i< 384; i++) pcorr.valley[i]=0.5; //0.5 for 1/2 MIP + if(ecal && onl) for(int i=0; i<1496; i++) eonl.gainOnline[i]=1.0; //default 1 + if(hcal && onl) for(int i=0; i< 520; i++) honl.gainOnline[i]=1.0; //default 1 + if(pres && onl) for(int i=0; i< 384; i++) ponl.threshold[i]=200; //200 for 1/2 MIP } if(data.Contains("run22ofl")){ storeTime = "2021-10-25 00:00:10"; flavor="ofl"; @@ -53,6 +102,9 @@ void fcsGain_db(char* opt = "", char* input) { if(ecal && corr) for(int i=0; i<1496; i++) ecorr.gaincorr[i]=1.21; //avg gaincorr=1.21 if(hcal && corr) for(int i=0; i< 520; i++) hcorr.gaincorr[i]=1.0; if(pres && corr) for(int i=0; i< 384; i++) pcorr.valley[i]=0.5; //0.5 for 1/2 MIP + if(ecal && onl) for(int i=0; i<1496; i++) eonl.gainOnline[i]=1.0; //default 1 + if(hcal && onl) for(int i=0; i< 520; i++) honl.gainOnline[i]=1.0; //default 1 + if(pres && onl) for(int i=0; i< 384; i++) ponl.threshold[i]=200; //200 for 1/2 MIP } if(data.Contains("run22Dec01")){ storeTime = "2021-12-01 00:00:10 "; flavor="ofl"; @@ -60,11 +112,33 @@ void fcsGain_db(char* opt = "", char* input) { } if(data.Contains("run22Dec21")){ storeTime = "2021-12-22 03:50:10 "; flavor="ofl"; - if(ecal && gain) for(int i=0; i<1496; i++) egain.gain[i]=0.0053; //Attenuator 1/5.31 + if(ecal && gain) for(int i=0; i<1496; i++) egain.gain[i]=0.0053; //Attenuator 1/5.31 + if(hcal && onl) for(int i=0; i< 520; i++) honl.gainOnline[i]=1.3; //changed to 1.3 } if(data.Contains("run22Jan27")){ storeTime = "2022-01-28 01:33:00 "; flavor="ofl"; if(hcal && gain) for(int i=0; i< 520; i++) hgain.gain[i]=0.0053*1.3*1.21; //increased V for *1.65 gain + if(pres && onl) for(int i=0; i< 384; i++) ponl.threshold[i]=250; //250 + } + if(data.Contains("run22Feb17")){ + storeTime = "2022-02-17 16:58:04"; flavor="ofl"; + readElectronicsGain("ratio2_ecal_23047026_23005043.txt",eonl.gainOnline); + } + if(data.Contains("run22Feb18")){ + storeTime = "2022-02-18 16:11:17"; flavor="ofl"; + readElectronicsGain("ratio2a_ecal_23047026_23005043.txt",eonl.gainOnline); + } + if(data.Contains("run22Feb28")){ + storeTime = "2022-02-28 17:26:56"; flavor="ofl"; + readElectronicsGain("ratio2_ecal_23058015_23005043.txt",eonl.gainOnline); + } + if(data.Contains("run22Mar07")){ + storeTime = "2022-03-07 20:52:07"; flavor="ofl"; + readElectronicsGain("ratio2_ecal_23065037_23005043_0.5.txt",eonl.gainOnline); + } + if(data.Contains("run22Mar14")){ + storeTime = "2022-03-14 20:26:28"; flavor="ofl"; + if(ecal && onl) for(int i=0; i<1496; i++) eonl.gainOnline[i]=1.0; } if(storeTime==""){ @@ -79,6 +153,9 @@ void fcsGain_db(char* opt = "", char* input) { if(ecal && corr) printf("INPUT EcalGainCorr %f\n",ecorr.gaincorr[0]); if(hcal && corr) printf("INPUT HcalGainCorr %f\n",hcorr.gaincorr[0]); if(pres && corr) printf("INPUT PresValley %f\n",pcorr.valley[0]); + if(ecal && onl) printf("INPUT EcalGainOnline %f\n",eonl.gainOnline[0]); + if(hcal && onl) printf("INPUT HcalGainOnline %f\n",honl.gainOnline[0]); + if(pres && onl) printf("INPUT PresThreshold %f\n",ponl.threshold[0]); if(option.Contains("writedb")) { gSystem->Setenv("DB_ACCESS_MODE","write"); @@ -122,20 +199,28 @@ void fcsGain_db(char* opt = "", char* input) { table->setFlavor(flavor.Data()); mgr->storeDbTable(table); } + if(ecal && onl){ + StDbTable* table = node->addDbTable("fcsEcalGainOnline"); + table->SetTable((char*)&eonl,1); + table->setFlavor(flavor.Data()); + mgr->storeDbTable(table); + } + if(hcal && onl){ + StDbTable* table = node->addDbTable("fcsHcalGainOnline"); + table->SetTable((char*)&honl,1); + table->setFlavor(flavor.Data()); + mgr->storeDbTable(table); + } + if(pres && onl){ + StDbTable* table = node->addDbTable("fcsPresThreshold"); + table->SetTable((char*)&ponl,1); + table->setFlavor(flavor.Data()); + mgr->storeDbTable(table); + } gSystem->Unsetenv("DB_ACCESS_MODE"); std::cout << "Done with database upload \n"; } - gSystem->Load("StChain"); - gSystem->Load("StBFChain"); - gSystem->Load("StUtilities"); - gSystem->Load("StIOMaker"); - gSystem->Load("StarClassLibrary"); - gSystem->Load("St_Tables"); - gSystem->Load("StDbLib"); - gSystem->Load("StDbBroker"); - gSystem->Load("St_db_Maker"); - int date,time,from=0,n=0; TString datetime(storeTime),token; datetime.ReplaceAll("-",""); @@ -253,5 +338,54 @@ void fcsGain_db(char* opt = "", char* input) { std::cout << "WARNING: No data in fcsPresValley table\n"; } } + + if(ecal && onl){ + St_fcsEcalGainOnline *dbTable_ec = (St_fcsEcalGainOnline*) DB->Find("fcsEcalGainOnline"); + if(dbTable_ec){ + std::cout << "Reading fcsEcalGainOnline table from DB\n"; + fcsEcalGainOnline_st *dbSt_ec = dbTable_ec->GetTable(); + Int_t rows = dbTable_ec->GetNRows(); + for(int i=0; iFind("fcsHcalGainOnline"); + if(dbTable_hc){ + std::cout << "Reading fcsHcalGainOnline table from DB\n"; + fcsHcalGainOnline_st *dbSt_hc = dbTable_hc->GetTable(); + Int_t rows = dbTable_hc->GetNRows(); + for(int i=0; iFind("fcsPresThreshold"); + if(dbTable_pc){ + std::cout << "Reading fcsPresThreshold table from DB\n"; + fcsPresThreshold_st *dbSt_pc = dbTable_pc->GetTable(); + Int_t rows = dbTable_pc->GetNRows(); + for(int i=0; i +#include +#include + +class StFcsDb; +StFcsDb* mFcsDb=0; + +static const int NPERIOD=9; +const int RUN0[NPERIOD+1]={22359013,23005043,23048036,23066056,23073059,23080057,23087057,23094050,23101043,23164000}; //starts of period +const int RUN1[NPERIOD] ={23007007,23007007,23048050,23067001,23074017,23081008,23087070,23095010,23101063}; //1st calib RUN near start +const int RUN2[NPERIOD] ={23007011,23007011,23048051,23067002,23074018,23081009,23087072,23095011,23101064}; //2nd calib run near start +const int RUN3[NPERIOD] ={23048002,23048002,23066013,23073042,23080044,23087033,23094044,23101005,23108014}; //1st calib run near end +const int RUN4[NPERIOD] ={23048003,23048003,23066017,23073043,23080045,23087034,23094045,23101013,23108015}; //2nd calib run near end +const char *gainfile[NPERIOD][2] ={{"period1/fcsgaincorr_007_final.txt","period1/fcsgaincorr_048P1_final.txt"}, //period0 + {"period1/fcsgaincorr_007_final.txt","period1/fcsgaincorr_048P1_final.txt"}, //period1 + {"period2/fcsgaincorr_048_03.txt", "period2/fcsgaincorr_066_03.txt"}, //period2 + {"period3/fcsgaincorr_067_05.txt", "period3/fcsgaincorr_073_06.txt"}, //period3 + {"period4/fcsgaincorr_074_final.txt","period4/fcsgaincorr_080_final.txt"}, //period4 + {"period5/fcsgaincorr_081_03.txt", "period5/fcsgaincorr_087_04.txt"}, //period5 + {"period6/fcsgaincorr_70_3.txt", "period6/fcsgaincorr_94_3.txt"}, //period6 + {"period7/fcsgaincorr_095_2.txt", "period7/fcsgaincorr_101_3.txt"}, //period7 + {"period8/fcsgaincorr_101_4.txt", "period8/fcsgaincorr_108_4.txt"}}; //period8 +const int NIDX=1496; +float mGainCorrCalib[NIDX][2]; +float mGainCorr[NIDX]; +const int showidx=500; + +const int MAXSCL=350000; +const int MAXRUN=10000; +const int LIMIT[4] = {5e6,1e7,2e6,2e6}; +const int STARTRUN=22354029; + +unsigned int NDATA=0; +unsigned int TIME[MAXSCL]; +double BBCW[MAXSCL]; +double BBCA[MAXSCL]; +double ZDCW[MAXSCL]; +double ZDCA[MAXSCL]; + +unsigned int NRUN=0; +unsigned int RUNT[MAXRUN]; +unsigned int RUNN[MAXRUN]; +double ITGL[MAXRUN]; + + +//read gain file +void readGainCorr(int period){ + for(int i=0; i<2; i++){ + printf("Reading GainCorr from %s\n",gainfile[period][i]); + FILE* F=fopen(gainfile[period][i],"r"); + if(F == NULL){ + printf("Could not open %s\n",gainfile[period][i]); + return; + } + int ehp,ns,dep,ch; + float gain; + while(fscanf(F,"%d %d %d %d %f",&ehp,&ns,&dep,&ch,&gain) != EOF){ + int det,id,crt,slt; + mFcsDb->getIdfromDep(ehp,ns,dep,ch,det,id,crt,slt); + int idx=det*748 + id; + mGainCorrCalib[idx][i]=gain; + if(idx==showidx){ + printf("GAINCORR ehp%1d ns%1d dep%02d ch%02d id=%3d idx=%4d start/stop=%1d %f\n", + ehp,ns,dep,ch,id,idx,i,mGainCorrCalib[idx][i]); + } + } + fclose(F); + } +} + +//write gain file +void writeGainCorr(int run){ + char file[200]; + sprintf(file,"corr/%d.txt",run); + printf("Writing %s\n",file); + FILE* F=fopen(file,"w"); + if(F == NULL){ + printf("Could not open %s\n",file); + return; + } + int ehp=0; + for(int ns=0; ns<2; ns++){ + for(int dep=0; dep<24; dep++){ + for(int ch=0; ch<32; ch++){ + int det,id,crt,slt; + mFcsDb->getIdfromDep(ehp,ns,dep,ch,det,id,crt,slt); + int idx = -1; + float gain=0; + if(det>=0 && det<2){ + idx=det*748 + id; + gain=mGainCorr[idx]; + } + fprintf(F,"%1d %1d %2d %2d %f\n",ehp,ns,dep,ch,gain); + } + } + } + fclose(F); +} + +// Reading scaler file +void readScaler(){ + char filename[100],line[200]; + sprintf(filename,"scaler.txt"); + FILE *F=fopen(filename,"r"); + if(F==NULL){ + cout << "Cannot open " << filename << endl; + continue; + } + cout << "Reading " << filename << endl; + while(fgets(line, 200, F) != NULL){ + unsigned int ts; + double rs2,rs3,rs7,rs8; + char d[100],t[100]; + sscanf(line,"%lf %lf %lf %lf %d %s %s",&rs2,&rs3,&rs7,&rs8,&ts,d,t); + if(rs2>0 || rs3>0 || rs7>0 || rs8>0){ + //if(rs2 > LIMIT[0]) continue; + //if(rs3 > LIMIT[1]) continue; + if(rs7 > LIMIT[2]) continue; + //if(rs8 > LIMIT[3]) continue; + BBCW[NDATA]=rs2; + BBCA[NDATA]=rs3; + ZDCW[NDATA]=rs7; + ZDCA[NDATA]=rs8; + TIME[NDATA]=ts; + NDATA++; + //printf("%d %f %f %f %f %d %s %s\n",NDATA,rs2,rs3,rs7,rs8,ts,d,t); + } + } + fclose(F); + printf("Read %d scaler data\n",NDATA); +} + +// Reading run file +void readRun(){ + char filename[100],line[200]; + sprintf(filename,"runs.txt"); + FILE *F=fopen(filename,"r"); + if(F==NULL){ + cout << "Cannot open " << filename << endl; + continue; + } + cout << "Reading " << filename << endl; + while(fgets(line, 200, F) != NULL){ + unsigned int run, ts; + sscanf(line,"%d %d",&run,&ts); + if(run>=STARTRUN){ + RUNN[NRUN]=run; + RUNT[NRUN]=ts; + //printf("%d %d %d\n",NRUN,run,ts); + NRUN++; + } + } + fclose(F); + printf("Read %d runs\n",NRUN); +} + +void scaler(){ + readScaler(); + readRun(); + + FILE* F=fopen("integralLumi.txt","w"); + fprintf(F,"# run bbcW bbcE*W zdcW zdcE*W [10^9 counts]\n"); + unsigned int itime=0; + double bbcw=0,bbca=0,zdcw=0,zdca=0; + for(unsigned int irun=0; irun= NDATA) break; + } + double f=30e-9; + printf("%8d %14.6f %14.6f %14.6f %14.6f TS=%12d %12d %12d %12d\n", + RUNN[irun],bbcw*f,bbca*f,zdcw*f,zdca*f,RUNT[irun],TIME[itime],RUNT[irun]-TIME[itime],itime); + fprintf(F,"%8d %14.6f %14.6f %14.6f %14.6f\n", + RUNN[irun],bbcw*f,bbca*f,zdcw*f,zdca*f); + ITGL[irun]=bbca*f; + } + fclose(F); + + c1 = new TCanvas("c1","SCALER",50,0,1500,1200); + gStyle->SetLabelSize(0.03,"xy"); + gStyle->SetPalette(1); + gStyle->SetOptStat(0); + c1->Divide(1,2); + c1->SaveAs("scaler.png"); +} + +double getIntgLumi(int run){ + for(unsigned int irun=0; irunMacro("LoadLogger.C"); + gSystem->Load("St_base.so"); + gSystem->Load("libStDb_Tables.so"); + gSystem->Load("StDbLib.so"); + gSystem->Load("StChain.so"); + gSystem->Load("StBFChain"); + gSystem->Load("StUtilities"); + gSystem->Load("StIOMaker"); + gSystem->Load("StarClassLibrary"); + gSystem->Load("St_Tables"); + gSystem->Load("StDbLib"); + gSystem->Load("StDbBroker"); + gSystem->Load("St_db_Maker"); + gSystem->Load("StFcsDbMaker.so"); + + //create and initialize StFcsDb + mFcsDb=new StFcsDb; + mFcsDb->Init(); + + // structure to fill up + fcsEcalGainCorr_st ecorr; + int readTime, readDate; + + TString option(opt); + std::cout << "Opt =" << opt << "\n"; + std::cout << "writedb = " << option.Contains("writedb") << "\n"; + + // scaler analsys + scaler(); + + int p=-1; + double l12,l34; + for(unsigned int irun=0; irun=0 && (period==-1 || period==p) ){ //do this run + if(onlydorun>0 && run!=onlydorun) continue; + //getting run start time from DB + int year=run/1000000-1; + int port=3400+year-1; + //printf("Year=%d Port=%d\n",year,port); + char cmd[400]; + sprintf(cmd,"mysql -h db04.star.bnl.gov --port=%d -N -s -e \"SELECT startRunTime FROM RunLog.runDescriptor WHERE runNumber=%d LIMIT 1\"",port,run); + //printf("cmd=%s\n",cmd); + TString st=gSystem->GetFromPipe(cmd); + int starttime=st.Atoi(); + readDate=gSystem->GetFromPipe(Form("date -u -d \@%d +%%Y%%m%%d",starttime)).Atoi(); + readTime=gSystem->GetFromPipe(Form("date -u -d \@%d +%%H%%M%%S",starttime)).Atoi(); + + //getting integrated lumionosity for the run and calc gain + double l=getIntgLumi(run); + double w1=(l34-l)/(l34-l12); + double w2=(l-l12)/(l34-l12); + for(int idx=0; idxSetenv("DB_ACCESS_MODE","write"); + cout << "DB_ACCESS_MODE="<Getenv("DB_ACCESS_MODE")<initConfig("Calibrations_fcs"); + mgr->setStoreTime(starttime); + StDbTable* table = node->addDbTable("fcsEcalGainCorr"); + table->SetTable((char*)&ecorr,1); + table->setFlavor("ofl"); + mgr->storeDbTable(table); + } + } + } + + //reqading back DB + printf("Reading back DB\n"); + int date,time,from=0,n=0; + /* + TString datetime(storeTime),token; + datetime.ReplaceAll("-",""); + datetime.ReplaceAll(":",""); + while(datetime.Tokenize(token,from," ")){ + if(n==0) date=atoi(token.Data()); + if(n==1) time=atoi(token.Data()); + n++; + } + std::cout << "Readout time="<SetDebug(); + dbMk->SetDateTime(readDate,readTime); + dbMk->SetFlavor("ofl"); + dbMk->Init(); + dbMk->Make(); + + TDataSet *DB = 0; + DB = dbMk->GetInputDB("Calibrations/fcs"); + if(!DB){std::cout << "ERROR: no db maker or Calibrations/fcs" << std::endl; } + St_fcsEcalGainCorr *dbTable_ec = (St_fcsEcalGainCorr*) DB->Find("fcsEcalGainCorr"); + if(dbTable_ec){ + std::cout << "Reading fcsEcalGainCorr table from DB\n"; + fcsEcalGainCorr_st *dbSt_ec = dbTable_ec->GetTable(); + Int_t rows = dbTable_ec->GetNRows(); + for(int i=0; igetDepfromId(det,id,ehp,ns,crt,sub,dep,ch); if(det<4){ fcs_trg_pt_correction[ns][ehp][dep][ch] = mFcsDb->getEtGain(det,id,mEtFactor); - fcs_trg_gain_correction[ns][ehp][dep][ch] = mFcsDb->getGainCorrection(det,id); + fcs_trg_gain_correction[ns][ehp][dep][ch] = mFcsDb->getGainOnline(det,id); }else{ fcs_trg_pt_correction[ns][ehp][dep][ch] = 1.0; fcs_trg_gain_correction[ns][ehp][dep][ch] = 1.0; @@ -224,19 +224,21 @@ int StFcsTriggerSimMaker::InitRun(int runNumber){ mTrgSim->p_g[ns][ehp][dep][ch].ped = fcs_trg_pedestal[ns][ehp][dep][ch]; - float ggg = fcs_trg_pt_correction[ns][ehp][dep][ch]; - //float ggg = (fcs_trg_pt_correction[ns][ehp][dep][ch]-1.0)/2.0 + 1.0; - float gg = ggg * fcs_trg_gain_correction[ns][ehp][dep][ch]; - int g = (uint32_t)(gg*256.0+0.5) ; - mTrgSim->p_g[ns][ehp][dep][ch].gain = g; + if(mOverwriteGain==1){ + float ggg = fcs_trg_pt_correction[ns][ehp][dep][ch]; + //float ggg = (fcs_trg_pt_correction[ns][ehp][dep][ch]-1.0)/2.0 + 1.0; + float gg = ggg * fcs_trg_gain_correction[ns][ehp][dep][ch]; + int g = (uint32_t)(gg*256.0+0.5) ; + mTrgSim->p_g[ns][ehp][dep][ch].gain = g; + } /* - printf("AAAGAIN %1d %1d %2d %2d pT=%6.3f corr=%6.3f ped=%4d\n",ns,ehp,dep,ch, - fcs_trg_pt_correction[ns][ehp][dep][ch], - fcs_trg_gain_correction[ns][ehp][dep][ch], - fcs_trg_pedestal[ns][ehp][dep][ch]); - */ - + printf("AAAGAIN %1d %1d %2d %2d pT=%6.3f corr=%6.3f ped=%4d\n",ns,ehp,dep,ch, + fcs_trg_pt_correction[ns][ehp][dep][ch], + fcs_trg_gain_correction[ns][ehp][dep][ch], + fcs_trg_pedestal[ns][ehp][dep][ch]); + */ + if(gainfile) fprintf(gainfile,"%2d %2d %2d %2d %8.3f\n",ns,ehp,dep,ch, fcs_trg_pt_correction[ns][ehp][dep][ch]); @@ -278,15 +280,16 @@ int StFcsTriggerSimMaker::Finish(){ int StFcsTriggerSimMaker::Make(){ StEvent* event = nullptr; event = (StEvent*)GetInputDS("StEvent"); - if(!event) {LOG_INFO << "StFcsTriggerSimMaker::Make did not find StEvent"<fcsCollection(); - if(!mFcsColl) {LOG_INFO << "StFcsTriggerSimMaker::Make did not find StEvent->StFcsCollection"<fcsCollection(); + if(!mFcsColl){LOG_INFO << "StFcsTriggerSimMaker::Make did not find StEvent->StFcsCollection"< Date: Thu, 23 May 2024 18:10:59 -0400 Subject: [PATCH 19/45] CODEOWNERS: add @mrosales2016 to FCS and spin pool (#687) --- .github/CODEOWNERS | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 96a871c219e..3ae49e3d184 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -54,7 +54,7 @@ /StRoot/StEventUtilities/StRedoTracks* @genevb /StRoot/StEventUtilities/StuFixTopoMap* @genevb /StRoot/StEventUtilities/TwistPatch* @genevb -/StRoot/StFcs* @akioogawa @jdbrice +/StRoot/StFcs* @akioogawa @jdbrice @mrosales2016 /StRoot/StFms* @akioogawa /StRoot/StFpd* @akioogawa /StRoot/StFst* @jdbrice @sunxuhit @yezhenyu2003 @techuan-huang @@ -85,7 +85,7 @@ /StRoot/StRHICf* @ggfdsa10 /StRoot/StRTSClient @jml985 @tonko-lj /StRoot/StShadowMaker @genevb -/StRoot/StSpinPool @akioogawa @zlchang @veprbl +/StRoot/StSpinPool @akioogawa @zlchang @veprbl @mrosales2016 /StRoot/StSsd* @starsdong @plexoos /StRoot/StSst* @starsdong @plexoos /StRoot/StStarLogger @fisyak @R-Witt @iraklic From 2fcaba46a62f5d0e06bf1449c005fe93b77e5583 Mon Sep 17 00:00:00 2001 From: akioogawa <85249930+akioogawa@users.noreply.github.com> Date: Thu, 23 May 2024 18:11:42 -0400 Subject: [PATCH 20/45] StSpinPool FCS trigger simulator and QA Update for run24 (#684) StSpinPool FCS trigger simulator and QA Update for run24 --------- Co-authored-by: Akio Ogawa --- StRoot/RTS/src/TRG_FCS/fcs_trg_base.cxx | 3 +- .../StFcsEpdQaMaker/StFcsEpdQaMaker.cxx | 67 ++++++----- .../StFcsEpdQaMaker/StFcsEpdQaMaker.h | 8 +- .../StFcsTrgQaMaker/StFcsTrgQaMaker.cxx | 26 +++-- .../StFcsTrgQaMaker/StFcsTrgQaMaker.h | 4 +- .../StFcsTriggerSimMaker.cxx | 106 ++++++++++++++++-- .../StFcsTriggerSimMaker.h | 15 ++- 7 files changed, 169 insertions(+), 60 deletions(-) diff --git a/StRoot/RTS/src/TRG_FCS/fcs_trg_base.cxx b/StRoot/RTS/src/TRG_FCS/fcs_trg_base.cxx index 6e8b1b33ef9..a22ada155c5 100644 --- a/StRoot/RTS/src/TRG_FCS/fcs_trg_base.cxx +++ b/StRoot/RTS/src/TRG_FCS/fcs_trg_base.cxx @@ -540,7 +540,7 @@ int fcs_trg_base::end_event() verify_event_io() ; // verify interconnectivity - int dsmout = 0; + //int dsmout = 0; moved to .h file self_trigger = 0 ; @@ -1274,7 +1274,6 @@ u_int fcs_trg_base::run_event_sim(int xing, int type) return d_out.s3.dsm_out + ((int)(d_out.s2[0].s2_to_dsm & 0xFF) << 16) + ((int)(d_out.s2[1].s2_to_dsm & 0xFF) << 24); - } diff --git a/StRoot/StSpinPool/StFcsEpdQaMaker/StFcsEpdQaMaker.cxx b/StRoot/StSpinPool/StFcsEpdQaMaker/StFcsEpdQaMaker.cxx index 5a736a19120..abeeeb59a01 100644 --- a/StRoot/StSpinPool/StFcsEpdQaMaker/StFcsEpdQaMaker.cxx +++ b/StRoot/StSpinPool/StFcsEpdQaMaker/StFcsEpdQaMaker.cxx @@ -38,26 +38,37 @@ Int_t StFcsEpdQaMaker::Init(){ return kStFatal; } - if(mFilename[0]==0 && mRun>0){ + if(mFilename[0]=='0' && mRun>0){ int yday=mRun/1000; sprintf(mFilename,"%d/%d.epdqa.root",yday,mRun); printf("StFcsEpdQaMaker::Init - Opening %s\n",mFilename); } mFile=new TFile(mFilename,"RECREATE"); - - char t[100], tt[100]; - for(int i=0; i<16; i++){ - sprintf(t,"QtDepAdcCh%d",i); - sprintf(tt,"Dep01Ch%d-PP10TT%d; QTADC; DEP Fit Integral",i,i*2); - mQtDepA[i] = new TH2F(t,tt,256,0,1024,256,0,1024*4); - sprintf(t,"QtDepTacCh%d",i); - sprintf(tt,"Dep01Ch%d-PP10TT%d; QTTAC; DEP Peak Timebin",i,i*2); - mQtDepT[i] = new TH2F(t,tt,100,0,3000,100,45,56); - sprintf(t,"QtDepRatCh%d",i); - sprintf(tt,"Dep01Ch%d-PP10TT%d; DEP Peak Timebin; QTADC/DEPIntg;",i,i*2); - mQtDepR[i] = new TH2F(t,tt,100,44,57,100,0.0,0.8); - } + char t[100], n[100]; + char *cNS[2]={"N","S"}; + for(int det=kFcsPresNorthDetId; det<=kFcsPresSouthDetId; det++){ + for(int id=0; idnorthSouth(det); + mFcsDb->getName(det,id,name); + sprintf(t,"EPDADC_%1s%03d",cNS[ns],id); + sprintf(n,"%s; QTADC; DEP Fit Integral",name); + mQtDepA[ns][id] = new TH2F(t,n,64,0,1024,64,0,1024*4); + sprintf(t,"EPDTAC_%1s%03d",cNS[ns],id); + sprintf(n,"%s; QTTAC; DEP Fit Peak Timebin",name); + mQtDepT[ns][id] = new TH2F(t,n,50,0,3000,50,45,56); + sprintf(t,"EPDRatio_%1s%03d",cNS[ns],id); + sprintf(n,"%s; DEP Peak Timebin; QTADC/DEPIntg",name); + mQtDepR[ns][id] = new TH2F(t,n,50,44,57,50,0.0,0.8); + } + } + mQtDepA[0][kFcsPresMaxId] = new TH2F("EPDADCc","EPDADC QTc; QTc ADC; DEP Fit Integral",64,0,1024,64,0,1024*4); + mQtDepT[0][kFcsPresMaxId] = new TH2F("EPDTACc","EPDTAC QTc; QTc TAC; DEP Fit Peak Timebin",50,0,3000,50,45,56); + mQtDepR[0][kFcsPresMaxId] = new TH2F("EPDRatioc","EPDRatio QTc; DEP Peak Timebin; QTcADC/DEPIntg",50,44,57,50,0.0,0.8); + mQtDepA[1][kFcsPresMaxId] = new TH2F("EPDADCbmqtad","EPDADC QTb; QTb ADC; DEP Fit Integral",64,0,1024,64,0,1024*4); + mQtDepT[1][kFcsPresMaxId] = new TH2F("EPDTACb","EPDTAC QTb; QTb TAC; DEP Fit Peak Timebin",50,0,3000,50,45,56); + mQtDepR[1][kFcsPresMaxId] = new TH2F("EPDRatiob","EPDRatio QTb; DEP Peak Timebin; QTbADC/DEPIntg",50,44,57,50,0.0,0.8); return kStOK; }; @@ -95,8 +106,9 @@ Int_t StFcsEpdQaMaker::Make(){ //unsigned short lastdsm4 = trg->lastDSM(4); //unsigned short fcs2019 = (lastdsm4 >> 10) & 0x1; //printf("fcs2019=%1d\n",fcs2019); + unsigned short lastdsm2 = trg->lastDSM(2); unsigned short lastdsm5 = trg->lastDSM(5); - printf("lastdsm5=%04x tofmult=%d\n",lastdsm5,tofmult); + printf("lastdsm2=%04x lastdsm5=%04x tofmult=%d\n",lastdsm2,lastdsm5,tofmult); } if(!event) { @@ -121,21 +133,20 @@ Int_t StFcsEpdQaMaker::Make(){ StSPtrVecFcsHit& hits = mFcsCollection->hits(det); for (int i=0; iid(); - int ehp = hits[i]->ehp(); + //int ehp = hits[i]->ehp(); int ns = hits[i]->ns(); int dep = hits[i]->dep(); int ch = hits[i]->channel(); - int ntb = hits[i]->nTimeBin(); + //int ntb = hits[i]->nTimeBin(); int pp,tt; mFcsDb->getEPDfromId(det,id,pp,tt); - if(pp==11) pp=10; //HACK for run21 map - if(pp!=10 || ch>=16 || ch<0) continue; + int QTcQRb = tt<=9?0:1; //from fits float fititeg=0; float fitpeak=0; fititeg = hits[i]->adcSum(); - fitpeak = hits[i]->fitPeak(); + fitpeak = hits[i]->fitPeak(); // printf("Dep=%02d Ch=%02d PP=%02d TT=%02d DEP=%6d PEAK=%f", // dep,ch,pp,tt,fititeg,fitpeak); @@ -153,12 +164,16 @@ Int_t StFcsEpdQaMaker::Make(){ break; } } - printf(" Dep=%02d Ch=%02d PP=%02d TT=%02d QT=%4d DEP=%6.1f TAC=%4d PEAK=%4.2f\n", - dep,ch,pp,tt,adc,fititeg,tac,fitpeak); - mQtDepA[ch]->Fill(adc,fititeg); - mQtDepT[ch]->Fill(tac,fitpeak); - if(fititeg>100){ - mQtDepR[ch]->Fill(fitpeak,float(adc)/fititeg); + if(Debug()) printf(" Dep=%02d Ch=%02d PP=%02d TT=%02d QT=%4d DEP=%6.1f TAC=%4d PEAK=%4.2f\n", + dep,ch,pp,tt,adc,fititeg,tac,fitpeak); + + mQtDepA[ns][id]->Fill(adc,fititeg); + mQtDepA[QTcQRb][kFcsPresMaxId]->Fill(adc,fititeg); + if(fititeg>100) { + mQtDepT[ns][id]->Fill(tac,fitpeak); + mQtDepT[QTcQRb][kFcsPresMaxId]->Fill(tac,fitpeak); + mQtDepR[ns][id]->Fill(fitpeak,float(adc)/fititeg); + mQtDepR[QTcQRb][kFcsPresMaxId]->Fill(fitpeak,float(adc)/fititeg); } } } diff --git a/StRoot/StSpinPool/StFcsEpdQaMaker/StFcsEpdQaMaker.h b/StRoot/StSpinPool/StFcsEpdQaMaker/StFcsEpdQaMaker.h index a5f4d48202a..c8b17404ec9 100644 --- a/StRoot/StSpinPool/StFcsEpdQaMaker/StFcsEpdQaMaker.h +++ b/StRoot/StSpinPool/StFcsEpdQaMaker/StFcsEpdQaMaker.h @@ -37,10 +37,10 @@ class StFcsEpdQaMaker : public StMaker { int mRun=0; TFile* mFile; char mFilename[100]; - - TH2F* mQtDepA[15]; - TH2F* mQtDepT[15]; - TH2F* mQtDepR[15]; + + TH2F* mQtDepA[kFcsNorthSouth][kFcsPresMaxId+1]; + TH2F* mQtDepT[kFcsNorthSouth][kFcsPresMaxId+1]; + TH2F* mQtDepR[kFcsNorthSouth][kFcsPresMaxId+1]; ClassDef(StFcsEpdQaMaker,1); }; diff --git a/StRoot/StSpinPool/StFcsTrgQaMaker/StFcsTrgQaMaker.cxx b/StRoot/StSpinPool/StFcsTrgQaMaker/StFcsTrgQaMaker.cxx index b84b2f6a04e..a39309a6be1 100644 --- a/StRoot/StSpinPool/StFcsTrgQaMaker/StFcsTrgQaMaker.cxx +++ b/StRoot/StSpinPool/StFcsTrgQaMaker/StFcsTrgQaMaker.cxx @@ -7,16 +7,17 @@ #include "StFcsTrgQaMaker.h" -#include "StRoot/StEvent/StEvent.h" -#include "StRoot/St_base/StMessMgr.h" -#include "StRoot/StEvent/StTriggerData.h" -#include "StRoot/StEvent/StFcsCollection.h" -#include "StRoot/StEvent/StFcsHit.h" -#include "StRoot/StEvent/StFcsCluster.h" -#include "StRoot/StFcsDbMaker/StFcsDb.h" -#include "StRoot/StSpinPool/StFcsTriggerSimMaker/StFcsTriggerSimMaker.h" - -#include "StRoot/RTS/src/TRG_FCS/fcs_trg_base.h" +#include "StMessMgr.h" +//#include "Stypes.h" +#include "StEvent/StEventTypes.h" +#include "StEvent/StTriggerData.h" +#include "StEvent/StFcsCollection.h" +#include "StEvent/StFcsHit.h" +#include "StEvent/StFcsCluster.h" +#include "StFcsDbMaker/StFcsDb.h" +#include "StSpinPool/StFcsTriggerSimMaker/StFcsTriggerSimMaker.h" + +#include "RTS/src/TRG_FCS/fcs_trg_base.h" #include "TH1F.h" #include "TH2F.h" @@ -122,6 +123,7 @@ Int_t StFcsTrgQaMaker::Init(){ mAdc[3]=new TH2F("HS_Id_Adc","HcalSouth; Id; ADC",mFcsDb->maxId(3),0.0,mFcsDb->maxId(3),500,0.0,maxadc); mAdc[4]=new TH2F("PN_Id_Adc","PresNorth; Id; ADC",mFcsDb->maxId(4),0.0,mFcsDb->maxId(4),500,0.0,maxadc); mAdc[5]=new TH2F("PS_Id_Adc","PresSouth; Id; ADC",mFcsDb->maxId(5),0.0,mFcsDb->maxId(5),500,0.0,maxadc); + return kStOK; }; @@ -133,7 +135,9 @@ Int_t StFcsTrgQaMaker::Make() { } //Getting StEvent and FcsCollection - StEvent* event= (StEvent*)GetInputDS("StEvent"); + StEvent* event=0; + event = static_cast(GetInputDS("StEvent")); + StFcsCollection *fcs = 0; if(!event) { LOG_INFO << "No StEvent found" << endm; diff --git a/StRoot/StSpinPool/StFcsTrgQaMaker/StFcsTrgQaMaker.h b/StRoot/StSpinPool/StFcsTrgQaMaker/StFcsTrgQaMaker.h index 7ead1958a63..9d0905a9d6b 100644 --- a/StRoot/StSpinPool/StFcsTrgQaMaker/StFcsTrgQaMaker.h +++ b/StRoot/StSpinPool/StFcsTrgQaMaker/StFcsTrgQaMaker.h @@ -7,8 +7,6 @@ #ifndef STAR_StFcsTrgQaMaker_HH #define STAR_StFcsTrgQaMaker_HH -#include "StRoot/St_base/Stypes.h" -#include "StRoot/StEvent/StEnumerations.h" #include "StMaker.h" class StFcsDb; @@ -90,7 +88,7 @@ class StFcsTrgQaMaker : public StMaker { TH1F* mTcuDep; TH1F* mSimDep; - TH2F* mAdc[3]; + TH2F* mAdc[6]; ClassDef(StFcsTrgQaMaker,1); }; diff --git a/StRoot/StSpinPool/StFcsTriggerSimMaker/StFcsTriggerSimMaker.cxx b/StRoot/StSpinPool/StFcsTriggerSimMaker/StFcsTriggerSimMaker.cxx index 1056652fc22..f27623d5acf 100644 --- a/StRoot/StSpinPool/StFcsTriggerSimMaker/StFcsTriggerSimMaker.cxx +++ b/StRoot/StSpinPool/StFcsTriggerSimMaker/StFcsTriggerSimMaker.cxx @@ -62,9 +62,9 @@ namespace { enum {kMaxNS=2, kMaxDet=3, kMaxDep=24, kMaxCh=32, kMaxEcalDep=24, kMaxHcalDep=8, kMaxPresDep=4, kMaxLink2=2}; - uint32_t fcs_trg_sim_adc[kMaxNS][kMaxDet][kMaxDep][kMaxCh] ; - float fcs_trg_pt_correction[kMaxNS][kMaxDet][kMaxDep][kMaxCh]; - float fcs_trg_gain_correction[kMaxNS][kMaxDet][kMaxDep][kMaxCh]; + uint32_t fcs_trg_sim_adc[kMaxNS][kMaxDet][kMaxDep][kMaxCh] ; + float fcs_trg_pt_correction[kMaxNS][kMaxDet][kMaxDep][kMaxCh]; + float fcs_trg_gain_correction[kMaxNS][kMaxDet][kMaxDep][kMaxCh]; uint16_t fcs_trg_pedestal[kMaxNS][kMaxDet][kMaxDep][kMaxCh] ; static const int mNTRG=21; @@ -152,6 +152,9 @@ int StFcsTriggerSimMaker::Init(){ //mTrgSim->EM_HERATIO_THR = 32; //mTrgSim->HAD_HERATIO_THR = 32; + //Trigger Id names + readTrgId(); + //EPD mask if(mPresMask){ printf("Reading PresMask from %s\n",mPresMask); @@ -234,11 +237,11 @@ int StFcsTriggerSimMaker::InitRun(int runNumber){ /* printf("AAAGAIN %1d %1d %2d %2d pT=%6.3f corr=%6.3f ped=%4d\n",ns,ehp,dep,ch, - fcs_trg_pt_correction[ns][ehp][dep][ch], - fcs_trg_gain_correction[ns][ehp][dep][ch], - fcs_trg_pedestal[ns][ehp][dep][ch]); - */ - + fcs_trg_pt_correction[ns][ehp][dep][ch], + fcs_trg_gain_correction[ns][ehp][dep][ch], + fcs_trg_pedestal[ns][ehp][dep][ch]); + */ + if(gainfile) fprintf(gainfile,"%2d %2d %2d %2d %8.3f\n",ns,ehp,dep,ch, fcs_trg_pt_correction[ns][ehp][dep][ch]); @@ -349,6 +352,7 @@ int StFcsTriggerSimMaker::Make(){ //Run Trigger Simulation // uint16_t dsm_out = fcs_trg_run(mTrgSelect, mDebug); uint32_t dsm_out = mTrgSim->end_event(); + LOG_INFO << Form("AAA dsmout=%08x",dsm_out)<stage_2(ecal,hcal,pres,geo,output,&s2_to_dsm); +void StFcsTriggerSimMaker::runStage2(link_t ecal[], link_t hcal[], link_t pres[], geom_t& geo, link_t output[], unsigned short& dsm, + int dta[], int dsmout, int sim[], int simdsmout, int iev){ + unsigned short emu[8]; + mTrgSim->stage_2(ecal,hcal,pres,geo,output,&dsm); + for(int i=0; i<8; i++) emu[i] = output[0].d[i] + (output[1].d[i] << 8); + printf("Event#=%3d emuout = ",iev); for(int i=0; i<8; i++) {printf("%04x ",emu[i]);} + printf("TCU=%04x\n",dsm); + printf("Event#=%3d dtaout = ",iev); for(int i=0; i<8; i++) {printf("%04x ",dta[i]);} + printf("TCU=%04x\n",dsmout); + printf("Event#=%3d simout = ",iev); for(int i=0; i<8; i++) {printf("%04x ",sim[i]);} + printf("TCU=%04x\n",simdsmout); + const char* s2bit[3][16]={{"EM0 ","EM1 ","EM2 ","EM3 ","ELE0","ELE1","ELE2","PRS ", + "HAD0","HAD1","HAD2","xxxx","EHT ","HHT ","ETOT","HTOT"}, + {"JPA2","JPB2","JPC2","JPD2","JPE2","xxxx","xxxx","xxxx", + "JPA1","JPB1","JPC1","JPD1","JPE1","xxxx","xxxx","xxxx"}, + {"JPA0","JPB0","JPC0","JPD0","JPE0","xxxx","xxxx","xxxx", + "JPAd","JPBd","JPCd","JPDd","JPEd","xxxx","xxxx","xxxx"}}; + for(int i=0; i<3; i++){ + for(int j=0; j<16; j++){ + if( ((dta[i]>>j)&1) != ((sim[i]>>j)&1) || + ((sim[i]>>j)&1) != ((emu[i]>>j)&1) || + ((emu[i]>>j)&1) != ((dta[i]>>j)&1) ){ + printf("Event#=%3d STG2to3 ns=%1d i=%d j=%2d %s dat=%x sim=%x emu=%x", + iev,geo.ns,i,j,s2bit[i][j],(dta[i]>>j)&1,(sim[i]>>j)&1,(emu[i]>>j)&1); + if(i==0 && j<7){ + int maxr=0, maxc=0, max=0; + for(int r=0; r<15; r++){ + for(int c=0; c<9; c++){ + if(max < mTrgSim->esum[geo.ns][r][c]) {maxr=r; maxc=c; max=mTrgSim->esum[geo.ns][r][c];} + } + } + printf(" EsumMax=%4d ratio=%4.3f", + mTrgSim->esum[geo.ns][maxr][maxc], + mTrgSim->ratiomax[geo.ns][maxr][maxc]); + if(j>=4) printf(" Epd=%1d",mTrgSim->epdcoin[geo.ns][maxr][maxc]); + if(j==0) printf(" EMTHR0=%4d",mTrgSim->EMTHR0); + if(j==1) printf(" EMTHR1=%4d",mTrgSim->EMTHR1); + if(j==2) printf(" EMTHR2=%4d",mTrgSim->EMTHR2); + if(j==3) printf(" ELETHR2=%4d",mTrgSim->ELETHR2); + if(j==4) printf(" ELETHR0=%4d",mTrgSim->ELETHR0); + if(j==5) printf(" ELETHR1=%4d",mTrgSim->ELETHR1); + if(j==6) printf(" ELETHR2=%4d",mTrgSim->ELETHR2); + } + if(i==1 && j== 0){ printf(" JPA=%4d thr2=%4d",mTrgSim->jet[geo.ns][0],mTrgSim->JPATHR2);} + if(i==1 && j== 1){ printf(" JPB=%4d thr2=%4d",mTrgSim->jet[geo.ns][1],mTrgSim->JPBCTHR2);} + if(i==1 && j== 2){ printf(" JPC=%4d thr2=%4d",mTrgSim->jet[geo.ns][2],mTrgSim->JPBCTHR2);} + if(i==1 && j== 3){ printf(" JPD=%4d thr2=%4d",mTrgSim->jet[geo.ns][3],mTrgSim->JPDETHR2);} + if(i==1 && j== 4){ printf(" JPE=%4d thr2=%4d",mTrgSim->jet[geo.ns][4],mTrgSim->JPDETHR2);} + if(i==1 && j== 8){ printf(" JPA=%4d thr1=%4d",mTrgSim->jet[geo.ns][0],mTrgSim->JPATHR1);} + if(i==1 && j== 9){ printf(" JPB=%4d thr1=%4d",mTrgSim->jet[geo.ns][1],mTrgSim->JPBCTHR1);} + if(i==1 && j==10){ printf(" JPC=%4d thr1=%4d",mTrgSim->jet[geo.ns][2],mTrgSim->JPBCTHR1);} + if(i==1 && j==11){ printf(" JPD=%4d thr1=%4d",mTrgSim->jet[geo.ns][3],mTrgSim->JPDETHR1);} + if(i==1 && j==12){ printf(" JPE=%4d thr1=%4d",mTrgSim->jet[geo.ns][4],mTrgSim->JPDETHR1);} + if(i==2 && j== 0){ printf(" JPA=%4d thr0=%4d",mTrgSim->jet[geo.ns][0],mTrgSim->JPATHR0);} + if(i==2 && j== 1){ printf(" JPB=%4d thr0=%4d",mTrgSim->jet[geo.ns][1],mTrgSim->JPBCTHR0);} + if(i==2 && j== 2){ printf(" JPC=%4d thr0=%4d",mTrgSim->jet[geo.ns][2],mTrgSim->JPBCTHR0);} + if(i==2 && j== 3){ printf(" JPD=%4d thr0=%4d",mTrgSim->jet[geo.ns][3],mTrgSim->JPDETHR0);} + if(i==2 && j== 4){ printf(" JPE=%4d thr0=%4d",mTrgSim->jet[geo.ns][4],mTrgSim->JPDETHR0);} + if(i==2 && j== 8){ printf(" JPA=%4d thrD=%4d",mTrgSim->jet[geo.ns][0],-1);} + if(i==2 && j== 9){ printf(" JPB=%4d thrD=%4d",mTrgSim->jet[geo.ns][1],mTrgSim->JPBCTHRD);} + if(i==2 && j==10){ printf(" JPC=%4d thrD=%4d",mTrgSim->jet[geo.ns][2],mTrgSim->JPBCTHRD);} + if(i==2 && j==11){ printf(" JPD=%4d thrD=%4d",mTrgSim->jet[geo.ns][3],mTrgSim->JPDETHRD);} + if(i==2 && j==12){ printf(" JPE=%4d thrD=%4d",mTrgSim->jet[geo.ns][4],mTrgSim->JPDETHRD);} + printf("\n"); + } + } + } } void StFcsTriggerSimMaker::print4B4(){ @@ -716,3 +784,19 @@ template void StFcsTriggerSimMaker::feedADC(T* hit, int ns, int ehp, if(mFile) fprintf(mFile,"%2d %2d %2d %2d %5d\n",ns,ehp,dep,ch,hit->adc(0)); } + +void StFcsTriggerSimMaker::readTrgId(){ + int i; + char trgn[200]; + if(mTrgIdFile){ + LOG_INFO<<"Reading "< Date: Mon, 24 Jun 2024 12:54:13 -0400 Subject: [PATCH 21/45] Updated timebin handling by StFstRawHitMaker (#685) This is an important update that effects the ongoing Fast offline production of Run24 data. This fixes the raw hit maker producing incorrect hits when the default number of time bins is not correct. --- StRoot/StFstRawHitMaker/StFstRawHitMaker.cxx | 24 ++++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/StRoot/StFstRawHitMaker/StFstRawHitMaker.cxx b/StRoot/StFstRawHitMaker/StFstRawHitMaker.cxx index a80e4904f63..481fefbfbff 100644 --- a/StRoot/StFstRawHitMaker/StFstRawHitMaker.cxx +++ b/StRoot/StFstRawHitMaker/StFstRawHitMaker.cxx @@ -107,29 +107,29 @@ Int_t StFstRawHitMaker::InitRun(Int_t runnumber) else { for (int i = 0; i < kFstNumApvs; i++) { for ( int j = 0; j < kFstNumRStripsPerSensor; j++) { - for ( int k = 0; k < kFstNumTimeBins; k++) { - LOG_DEBUG << Form(" Print entry %d-%d-%d : CM noise=%f ", i, j, k, (float)gPN[0].cmNoise[(i*kFstNumRStripsPerSensor+j)*kFstNumTimeBins+k] / 100.) << endm; - mCmnVec[i][j][k] = (float)gPN[0].cmNoise[(i*kFstNumRStripsPerSensor+j)*kFstNumTimeBins+k] / 100.0; + for ( int k = 0; k < mCurrentTimeBinNum; k++) { + LOG_DEBUG << Form(" Print entry %d-%d-%d : CM noise=%f ", i, j, k, (float)gPN[0].cmNoise[(i*kFstNumRStripsPerSensor+j)*mCurrentTimeBinNum+k] / 100.) << endm; + mCmnVec[i][j][k] = (float)gPN[0].cmNoise[(i*kFstNumRStripsPerSensor+j)*mCurrentTimeBinNum+k] / 100.0; } } } for (int i = 0; i < kFstNumElecIds; i++) { - for ( int j = 0; j < kFstNumTimeBins; j++) { - LOG_DEBUG << Form(" Print entry %d-%d : pedestal=%f ", i, j, (float)gPN[0].pedestal[i*kFstNumTimeBins+j]) << endm; - mPedVec[i][j] = (float)gPN[0].pedestal[i*kFstNumTimeBins+j]; + for ( int j = 0; j < mCurrentTimeBinNum; j++) { + LOG_DEBUG << Form(" Print entry %d-%d : pedestal=%f ", i, j, (float)gPN[0].pedestal[i*mCurrentTimeBinNum+j]) << endm; + mPedVec[i][j] = (float)gPN[0].pedestal[i*mCurrentTimeBinNum+j]; } } for (int i = 0; i < kFstNumElecIds; i++) { - for ( int j = 0; j < kFstNumTimeBins; j++) { - LOG_DEBUG << Form(" Print entry %d-%d : RMS noise=%f ", i, j, (float)gPN[0].totNoise[i*kFstNumTimeBins+j] / 100.) << endm; - mTotRmsVec[i][j] = (float)gPN[0].totNoise[i*kFstNumTimeBins+j] / 100.; + for ( int j = 0; j < mCurrentTimeBinNum; j++) { + LOG_DEBUG << Form(" Print entry %d-%d : RMS noise=%f ", i, j, (float)gPN[0].totNoise[i*mCurrentTimeBinNum+j] / 100.) << endm; + mTotRmsVec[i][j] = (float)gPN[0].totNoise[i*mCurrentTimeBinNum+j] / 100.; } } for (int i = 0; i < kFstNumElecIds; i++) { - for ( int j = 0; j < kFstNumTimeBins; j++) { - LOG_DEBUG << Form(" Print entry %d-%d : RMS noise=%f ", i, j, (float)gPN[0].ranNoise[i*kFstNumTimeBins+j] / 100.) << endm; - mRanRmsVec[i][j] = (float)gPN[0].ranNoise[i*kFstNumTimeBins+j] / 100.; + for ( int j = 0; j < mCurrentTimeBinNum; j++) { + LOG_DEBUG << Form(" Print entry %d-%d : RMS noise=%f ", i, j, (float)gPN[0].ranNoise[i*mCurrentTimeBinNum+j] / 100.) << endm; + mRanRmsVec[i][j] = (float)gPN[0].ranNoise[i*mCurrentTimeBinNum+j] / 100.; } } } From 75ca35d702d92437afea79447ae98553d67d002c Mon Sep 17 00:00:00 2001 From: Dmitry Arkhipkin Date: Mon, 24 Jun 2024 12:54:53 -0400 Subject: [PATCH 22/45] patched FTT table for Daniel (#689) The patched version of the FTT table as requested by Daniel. Note that the table name is "fttDataWindowsB" now, please update FTT codes to use it instead of "fttDataWindows" one. Co-authored-by: akioogawa <85249930+akioogawa@users.noreply.github.com> --- StDb/idl/fttDataWindowsB.idl | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 StDb/idl/fttDataWindowsB.idl diff --git a/StDb/idl/fttDataWindowsB.idl b/StDb/idl/fttDataWindowsB.idl new file mode 100644 index 00000000000..628fd9d1449 --- /dev/null +++ b/StDb/idl/fttDataWindowsB.idl @@ -0,0 +1,15 @@ +/* fttDataWindowsB.idl +* +* Table: fttDataWindowsB +* +* description: sTGC (ftt) data time windows +* +*/ + +struct fttDataWindowsB { + short uuid[385]; /* fob(1-96) x vmm(1-4) = index 1 - 384 */ + octet mode[385]; /* 0 = timebin, 1 = bcid */ + short min[385]; /* time window min > -32768 */ + short max[385]; /* time window max < 32768 */ + short anchor[385]; /* calibrated time anchor for BCID */ +}; From 9811528b557897def0e070a5a3ca9279fea46f46 Mon Sep 17 00:00:00 2001 From: Daniel Brandenburg Date: Mon, 24 Jun 2024 13:53:35 -0400 Subject: [PATCH 23/45] =?UTF-8?q?Provide=20manual=20timecut=20control=20fo?= =?UTF-8?q?r=20fast=20offline=20production=20and=20calibr=E2=80=A6=20(#686?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit …ation This allows the StFttClusterMaker to be set to manually override DB timeline cuts for processing fast offline and for running calibrations --------- Co-authored-by: Dmitri Smirnov --- .../StFttClusterMaker/StFttClusterMaker.cxx | 58 +++++++++++++++---- StRoot/StFttClusterMaker/StFttClusterMaker.h | 22 ++++++- 2 files changed, 67 insertions(+), 13 deletions(-) diff --git a/StRoot/StFttClusterMaker/StFttClusterMaker.cxx b/StRoot/StFttClusterMaker/StFttClusterMaker.cxx index 162dbb9d6a0..f9880aa6399 100644 --- a/StRoot/StFttClusterMaker/StFttClusterMaker.cxx +++ b/StRoot/StFttClusterMaker/StFttClusterMaker.cxx @@ -14,7 +14,7 @@ #include #include #include // std::is_sorted - +#include #include "StEvent.h" #include "StEnumerations.h" @@ -209,18 +209,52 @@ void StFttClusterMaker::InjectTestData(){ } // InjectTestData +/** + * @brief Checks if a hit passes the time cut. + * + * This function checks if a given hit passes the time cut based on + * the current time cut mode. + * - mTimeCutMode = kTimeCutModeAcceptAll: accept all hits + * - mTimeCutMode = kTimeCutModeDB: use the time cut from the database + * - mTimeCutMode = kTimeCutModeCalibratedTime: use the calibrated time cut + * set by the user + * - mTimeCutMode = kTimeCutModeTimebin: use the timebin cut set by the user + * + * if unrecognized time cut mode is set, the function will return true accepting all hits + * + * @param hit Pointer to the StFttRawHit object to be checked. + * @return true if the hit passes the time cut, false otherwise. + */ bool StFttClusterMaker::PassTimeCut( StFttRawHit * hit ){ - int time_cut0 = -999; - int time_cut1 = 999; - int time_cutm = 0; - // in principle it could vary VMM to VMM; - mFttDb->getTimeCut(hit, time_cutm, time_cut0, time_cut1); - if ( time_cutm == 0 ) // default, cut on bunch crossing - return (hit->time() <= time_cut1 && hit->time() >= time_cut0); - - // cut on timebin - return (hit->tb() <= time_cut1 && hit->tb() >= time_cut0); -} + if (mTimeCutMode == kTimeCutModeAcceptAll) + return true; + else if (mTimeCutMode == kTimeCutModeDB ) { + int timeCutMin = INT_MIN; + int timeCutMax = INT_MAX; + int hitTimeMode = (int)kHitCalibratedTime; + + mFttDb->getTimeCut(hit, hitTimeMode, timeCutMin, timeCutMax); + LOG_DEBUG << TString::Format( "StFttClusterMaker::PassTimeCut - DB gave hit time mode: %d, time cut min: %d, time cut max: %d", hitTimeMode, timeCutMin, timeCutMax ) << endm; + if (hitTimeMode == kHitCalibratedTime) { + return (hit->time() >= timeCutMin && hit->time() <= timeCutMax); + } else if ( hitTimeMode == kHitTimebin ) { + return (hit->tb() >= timeCutMin && hit->tb() <= timeCutMax); + } else { + LOG_WARN << "StFttClusterMaker::PassTimeCut - Unknown hit time mode from database: " << hitTimeMode << endm; + LOG_WARN << "Accepting all hits" << endm; + return true; + } + } else if (mTimeCutMode == kTimeCutModeCalibratedTime) { + return (hit->time() >= mTimeCutMin && hit->time() <= mTimeCutMax); + } else if (mTimeCutMode == kTimeCutModeTimebin) { + return (hit->tb() >= mTimeCutMin && hit->tb() <= mTimeCutMax); + } else { + LOG_WARN << "StFttClusterMaker::PassTimeCut - Unknown time cut mode: " << mTimeCutMode << endm; + LOG_WARN << "Accepting all hits" << endm; + return true; // Default return value if no conditions are met + } + return true; +} // PassTimeCut StFttRawHit * StFttClusterMaker::FindMaxAdc( std::vector hits, size_t &pos ){ diff --git a/StRoot/StFttClusterMaker/StFttClusterMaker.h b/StRoot/StFttClusterMaker/StFttClusterMaker.h index e297f0b4bf0..548178ce343 100644 --- a/StRoot/StFttClusterMaker/StFttClusterMaker.h +++ b/StRoot/StFttClusterMaker/StFttClusterMaker.h @@ -30,6 +30,12 @@ class StFttClusterMaker: public StMaker { int Finish(); int Make(); + void SetTimeCut( int mode, int min, int max ) { + mTimeCutMode = mode; + mTimeCutMin = min; + mTimeCutMax = max; + } + private: void ApplyHardwareMap(); std::vector FindClusters( std::vector ); @@ -51,8 +57,22 @@ class StFttClusterMaker: public StMaker { bool mDebug; StFttDb* mFttDb; + enum HitTimeModes { + kHitCalibratedTime = 0, + kHitTimebin = 1 + }; + enum TimeCutModes { + kTimeCutModeDB = 0, + kTimeCutModeAcceptAll = 1, + kTimeCutModeCalibratedTime = 2, + kTimeCutModeTimebin = 3 + }; + int mTimeCutMin = -40; // value from Run22 - Run24 online QA approximately 1 bx + int mTimeCutMax = 100; // value from Run22 - Run24 online QA approximately 1 bx + int mTimeCutMode = 0; //default - kTimeCutModeDB, CINT cant use the enum directly + - ClassDef( StFttClusterMaker, 1 ) + ClassDef( StFttClusterMaker, 0 ) }; #endif // STFTTCLUSTERMAKER_H \ No newline at end of file From e23debac321cd1994ba8146631f2fcfd397913b8 Mon Sep 17 00:00:00 2001 From: jml985 <44065529+jml985@users.noreply.github.com> Date: Thu, 27 Jun 2024 21:37:47 -0400 Subject: [PATCH 24/45] updates to reader --- mainly to fix iTPC fee_words=0 problem (#688) --- StRoot/RTS/src/DAQ_TPC23/itpc23.cxx | 51 ++++++++++++++---- StRoot/RTS/src/DAQ_TPC23/tpc23_base.cxx | 14 +++++ StRoot/RTS/src/DAQ_TPC23/tpc23_base.h | 5 ++ StRoot/RTS/src/DAQ_TPC23/tpx23.cxx | 70 ++++++++++++++++++++++++- StRoot/RTS/src/DAQ_TPC23/tpx23.h | 6 ++- StRoot/RTS/src/DAQ_TPX/tpxGain.cxx | 4 +- StRoot/RTS/src/TRG_FCS/fcs_trg_base.cxx | 3 +- 7 files changed, 136 insertions(+), 17 deletions(-) diff --git a/StRoot/RTS/src/DAQ_TPC23/itpc23.cxx b/StRoot/RTS/src/DAQ_TPC23/itpc23.cxx index 11920eac5ee..abad19accb9 100644 --- a/StRoot/RTS/src/DAQ_TPC23/itpc23.cxx +++ b/StRoot/RTS/src/DAQ_TPC23/itpc23.cxx @@ -374,7 +374,8 @@ u_int *itpc23::ch_scan(u_int *start) is_error = 1 ; run_errors++ ; if(mode || (online && run_errors<20)) { - LOG(ERR,"%d: ch_scan %d:%d:%d: pkt %d, sampa %d:%d, words10 %d [0x%08X: 0x%08X 0x%08X], err 0x%X",rdo1,fee_ix,lane_ix, + LOG(ERR,"%d: T %d: ch_scan %d:%d:%d: pkt %d, sampa %d:%d, words10 %d [0x%08X: 0x%08X 0x%08X], err 0x%X", + rdo1,token,fee_ix,lane_ix, ch_ix, pkt,sampa_id,sampa_ch,words10, d[0],d[-1],d[1],err) ; @@ -417,7 +418,7 @@ u_int *itpc23::ch_scan(u_int *start) err |= 0x2000000 ; run_errors++ ; if(mode || (online && run_errors<10)) { - LOG(ERR,"%d: ch_scan %d:%d: bx %d, expect %d",rdo1,fee_ix,ch_ix,bx,bx_count) ; + LOG(ERR,"%d: T %d: ch_scan %d:%d:%d bx %d, expect %d",rdo1,token,fee_ix,lane_ix,ch_ix,bx,bx_count) ; } } } @@ -529,7 +530,7 @@ u_int *itpc23::ch_scan(u_int *start) seq[seq_ix].t_hi = tb_start + tb_cou - 1 ; seq[seq_ix].dta_p = (dd-d_start) ; // where is this sequence... seq[seq_ix].blob_id = 0 ; - seq_ix++ ; + //seq_ix++ ; //dd += tb_cou ; // this doesn't sound correct!!! @@ -538,6 +539,10 @@ u_int *itpc23::ch_scan(u_int *start) if(unlikely(tb_start<=tb_last)) { run_errors++ ; if(mode || (online && run_errors<10))LOG(ERR,"%d: rp %d:%d: tb_start %d, tb_last %d",rdo1,row,pad,tb_start,tb_last) ; + + seq[seq_ix].t_lo = 400 ; + seq[seq_ix].t_hi = 401 ; + } @@ -546,9 +551,12 @@ u_int *itpc23::ch_scan(u_int *start) if(unlikely(tb_last>500)) { run_errors++ ; if(mode || (online && run_errors<10)) LOG(ERR,"%d: rp %d:%d: tb_last %d [0x%08X,%d]",rdo1,row,pad,tb_last,d[i],i) ; - } + seq[seq_ix].t_lo = 400 ; + seq[seq_ix].t_hi = 401 ; + } + seq_ix++ ; ix = 2 ; break ; @@ -670,7 +678,7 @@ u_int *itpc23::lane_scan(u_int *start) // should be at start of lane 0xB.... if((d[0]&0xF0000000)!=0xB0000000) { // start of lane if((online && run_errors<10) || mode) { - LOG(ERR,"%d: lane_scan %d:%d: unknown start 0x%08X [0x%08X 0x%08X]",rdo1,fee_ix,lane_ix,d[0],d[-1],d[1]) ; + LOG(ERR,"%d: T %d: lane_scan %d:%d: unknown start 0x%08X [0x%08X 0x%08X]",rdo1,token,fee_ix,lane_ix,d[0],d[-1],d[1]) ; } if(d[0]==d[-1]) { @@ -703,7 +711,7 @@ u_int *itpc23::lane_scan(u_int *start) if((d[0]&0xF0000000)!=0x70000000) { // end of lane err |= 0x400000 ; run_errors++ ; - if((online && run_errors<20)|| mode) LOG(ERR,"%d: lane_scan %d:%d: unknown end 0x%08X",rdo1,fee_ix,lane_ix,d[0]) ; + if((online && run_errors<20)|| mode) LOG(ERR,"%d: T %d: lane_scan %d:%d: unknown end 0x%08X",rdo1,token,fee_ix,lane_ix,d[0]) ; } d++ ; // skip 0x7... @@ -718,7 +726,7 @@ u_int *itpc23::fee_non_trgd(u_int *start) int fee_words = 0 ; if(fee_evt_type != 0x02) { // no clue - if(online || mode) LOG(ERR,"%d: fee_non_trgd %d: evt_type 0x%02X",rdo1,fee_ix,fee_evt_type) ; + if(online || mode) LOG(ERR,"%d: T %d: fee_non_trgd %d: evt_type 0x%02X",rdo1,token,fee_ix,fee_evt_type) ; while(d=trl) break ; } @@ -1371,6 +1398,8 @@ itpc23::itpc23() fmt = 0 ; + fee_words = 0 ; + } diff --git a/StRoot/RTS/src/DAQ_TPC23/tpc23_base.cxx b/StRoot/RTS/src/DAQ_TPC23/tpc23_base.cxx index cb3f90594d1..e480136d9e3 100644 --- a/StRoot/RTS/src/DAQ_TPC23/tpc23_base.cxx +++ b/StRoot/RTS/src/DAQ_TPC23/tpc23_base.cxx @@ -1355,6 +1355,8 @@ int tpc23_base::run_start() run_errors = 0 ; // fee_errs = 0 ; + memset(&f_stat,0,sizeof(f_stat)) ; + return 0 ; } @@ -1364,6 +1366,16 @@ int tpc23_base::run_start() int tpc23_base::run_stop() { // LOG(TERR,"%d: run_stop: %d/%d events, run_errors %d",id,evt_trgd,evt,run_errors) ; + + if(online || mode) { + for(int i=0;i<10;i++) { + f_stat.tm[i] /= f_stat.evt_cou ; + } + + LOG(NOTE,"id %d: evts %d, means %f %f %f %f %f %f",id,f_stat.evt_cou, + f_stat.tm[0],f_stat.tm[1],f_stat.tm[2],f_stat.tm[3],f_stat.tm[4], + f_stat.tm[5]) ; + } return 0 ; } @@ -1414,6 +1426,8 @@ tpc23_base::tpc23_base() data_c = 0 ; + store_track_id = 0 ; + token = 1 ; // for ease of simulation } diff --git a/StRoot/RTS/src/DAQ_TPC23/tpc23_base.h b/StRoot/RTS/src/DAQ_TPC23/tpc23_base.h index 0959eefa492..078a3923229 100644 --- a/StRoot/RTS/src/DAQ_TPC23/tpc23_base.h +++ b/StRoot/RTS/src/DAQ_TPC23/tpc23_base.h @@ -112,6 +112,11 @@ class tpc23_base { // called from daq_itpc int init(daq_dta *gain) ; + struct f_stat_t { + int evt_cou ; + double tm[10] ; + } f_stat ; + //private: diff --git a/StRoot/RTS/src/DAQ_TPC23/tpx23.cxx b/StRoot/RTS/src/DAQ_TPC23/tpx23.cxx index d46919a79fa..ff1b9b33af0 100644 --- a/StRoot/RTS/src/DAQ_TPC23/tpx23.cxx +++ b/StRoot/RTS/src/DAQ_TPC23/tpx23.cxx @@ -4,6 +4,7 @@ #include #include #include +#include #include @@ -35,6 +36,21 @@ #include "tpx23.h" +static double mark(void) +{ + struct timeval tmval ; + + gettimeofday(&tmval,0) ; + + return ((double)tmval.tv_sec*1000000.0 + (double)tmval.tv_usec) ; +} + +static double delta(double v) +{ + return mark() - v ; +} + + tpxPed *tpx23::peds ; tpc23_base::row_pad_t (*tpx23::rp_gain_tpx)[ROW_MAX+1][PAD_MAX+1] ; @@ -62,6 +78,7 @@ int tpx23::fee_scan() int ch_pre = -1 ; int s_cou ; char retry ; +// double s_tmx = mark() ; get_token((char *)d_start,words) ; @@ -93,10 +110,16 @@ int tpx23::fee_scan() u_int *h_to_continue ; retry = 0 ; + + f_stat.evt_cou++ ; + // NOTE: ALTRO scans from the end!!! while(h>(d_start+2)) { u_int hi, lo ; +// double tmx ; +// tmx=mark() ; + lo = *h-- ; hi = *h-- ; @@ -225,6 +248,9 @@ int tpx23::fee_scan() while(wc%4) wc++ ; + +// f_stat.tm[0] += delta(tmx) ; + // if this is a physics run: skip pads which have flags // hmm... is this right? if(flags && run_type==3) { @@ -261,6 +287,8 @@ int tpx23::fee_scan() //TLOGX(row) ; +// tmx = mark() ; + for(int i=0;i=0;i--) { + int t_len = sseq[i].t_hi - sseq[i].t_lo + 1 ; + + int ii = 0 ; + for(int j=(t_len-1);j>=0;j--) { + int adc = sseq[i].d[j] ; + altro[altro_cou].adc[aix] = adc ; + altro[altro_cou].tb[aix] = sseq[i].t_lo + ii ; + altro[altro_cou].count++ ; + ii++ ; + aix++ ; + } + } + + altro_cou++ ; + } else if(tpx_d) { tpx_d->sector = sector1 ; tpx_d->rdo = rdo1 ; @@ -411,7 +468,7 @@ int tpx23::fee_scan() tpx_d->pad = pad ; tpx_d->altro = id ; - //LOG(TERR,"%d:%d %d:%d %d:%d",sector1,rdo1,row,pad,id,ch) ; + LOG(NOTE,"%d:%d %d:%d %d:%d",sector1,rdo1,row,pad,id,ch) ; tpx_d->ch_start(ch) ; // sets tpx_d->ch within @@ -441,6 +498,7 @@ int tpx23::fee_scan() +// f_stat.tm[2] += delta(tmx) ; //LOG(TERR,"Here 2") ; @@ -450,6 +508,9 @@ int tpx23::fee_scan() // printf("row %d, pad %d: seq_ix %d\n",row,pad,seq_ix) ; + +// tmx = mark() ; + for(int i=(seq_ix-1);i>=0;i--) { seq[s_cou].t_lo = sseq[i].t_lo; seq[s_cou].t_hi = sseq[i].t_hi ; @@ -499,6 +560,9 @@ int tpx23::fee_scan() id_pre = id ; ch_pre = ch ; + +// f_stat.tm[3] += delta(tmx) ; + end_loop:; } @@ -506,6 +570,8 @@ int tpx23::fee_scan() done:; +// f_stat.tm[4] += delta(s_tmx) ; + TLOG() ; return err ; @@ -1113,6 +1179,8 @@ tpx23::tpx23() memset(fpga_usercode,0,sizeof(fpga_usercode)) ; + altro = 0 ; + tpx_d = 0 ; } diff --git a/StRoot/RTS/src/DAQ_TPC23/tpx23.h b/StRoot/RTS/src/DAQ_TPC23/tpx23.h index 5b4a622351b..c1cd99d266e 100644 --- a/StRoot/RTS/src/DAQ_TPC23/tpx23.h +++ b/StRoot/RTS/src/DAQ_TPC23/tpx23.h @@ -8,7 +8,7 @@ class tpxPed ; struct daq_dta ; - +struct tpx_altro_struct ; class tpx23Data { public: @@ -76,6 +76,10 @@ class tpx23 : public tpc23_base { u_char rhic_clock ; class tpx23Data *tpx_d ; + + tpx_altro_struct *altro ; + int altro_cou ; + private: int fee_scan() ; diff --git a/StRoot/RTS/src/DAQ_TPX/tpxGain.cxx b/StRoot/RTS/src/DAQ_TPX/tpxGain.cxx index 7447f90ee1c..e8b722060f0 100644 --- a/StRoot/RTS/src/DAQ_TPX/tpxGain.cxx +++ b/StRoot/RTS/src/DAQ_TPX/tpxGain.cxx @@ -269,7 +269,7 @@ void tpxGain::accum(char *evbuff, int bytes) t = tpx_get_start(evbuff, bytes/4, &rdo, 0) ; - LOG(NOTE,"RDO %d: %d bytes,token %d",rdo.rdo,bytes,t) ; +// LOG(WARN,"RDO %d: %d bytes,token %d %d",rdo.rdo,bytes,t,rdo.token) ; if(t <= 0) return ; // non data event... @@ -1054,7 +1054,7 @@ int tpxGain::to_file(const char *fname) s_start,s_stop, c_run, c_date, c_time) ; - fprintf(f,"# $Id: tpxGain.cxx,v 1.37 2022/09/23 19:55:47 jml Exp $\n") ; // CVS id! + fprintf(f,"# $Id: tpxGain.cxx,v 1.38 2024/04/10 12:01:00 tonko Exp $\n") ; // CVS id! fprintf(f,"# Run %u\n",c_run) ; for(s=s_start;s<=s_stop;s++) { diff --git a/StRoot/RTS/src/TRG_FCS/fcs_trg_base.cxx b/StRoot/RTS/src/TRG_FCS/fcs_trg_base.cxx index a22ada155c5..c777c46d601 100644 --- a/StRoot/RTS/src/TRG_FCS/fcs_trg_base.cxx +++ b/StRoot/RTS/src/TRG_FCS/fcs_trg_base.cxx @@ -540,8 +540,6 @@ int fcs_trg_base::end_event() verify_event_io() ; // verify interconnectivity - //int dsmout = 0; moved to .h file - self_trigger = 0 ; s3_to_dsm = d_in[trg_xing].s3.dsm_out.d[0] ; @@ -1274,6 +1272,7 @@ u_int fcs_trg_base::run_event_sim(int xing, int type) return d_out.s3.dsm_out + ((int)(d_out.s2[0].s2_to_dsm & 0xFF) << 16) + ((int)(d_out.s2[1].s2_to_dsm & 0xFF) << 24); + } From 36846cfdd4f62902ee0d203eecb585196ad0d368 Mon Sep 17 00:00:00 2001 From: Gene Van Buren <85305093+genevb@users.noreply.github.com> Date: Mon, 22 Jul 2024 10:45:19 -0400 Subject: [PATCH 25/45] QAallevents: fill QA hists regardless of prim vtx (#695) There is some interest in examining QA histograms for occasions when there is no primary vertex, including occasions when tracking is excluded from production (e.g. for calorimeter interests). This introduces a chain option `QAallevents` to enable bypassing the cut on primary vertex, and it is independent of the `QAalltrigs` option which is a bypass of the exclusion based on physics triggers. --- StRoot/StBFChain/BigFullChain.h | 1 + StRoot/StBFChain/StBFChain.cxx | 6 ++++-- StRoot/St_QA_Maker/StQAMakerBase.cxx | 5 ++++- StRoot/St_QA_Maker/StQAMakerBase.h | 1 + 4 files changed, 10 insertions(+), 3 deletions(-) diff --git a/StRoot/StBFChain/BigFullChain.h b/StRoot/StBFChain/BigFullChain.h index 57880357085..edcbc8babfa 100644 --- a/StRoot/StBFChain/BigFullChain.h +++ b/StRoot/StBFChain/BigFullChain.h @@ -1936,6 +1936,7 @@ Bfc_st BFC[] = { // standard chains ,"St_QA_Maker","Filling Y2/Y3 Qa histo",kFALSE}, {"QAC" ,"CosmicsQA","globT","" ,"StQACosmicMaker","StQACosmicMaker","",kFALSE}, {"QAalltrigs" ,"", "","", "","","Analyze all triggers in QA",kFALSE}, + {"QAallevents" ,"", "","", "","","Analyze all events in QA",kFALSE}, {"HitFilt" ,"", "","", "StHitFilterMaker","StHitFilterMaker","Hit filter Maker",kFALSE}, {"SvtHitFilt" ,"", "","HitFilt", "","","SVT Hit filter Maker",kFALSE}, {"TpcHitFilt" ,"", "","HitFilt", "","","filter out TPC Hits not on tracks",kFALSE}, diff --git a/StRoot/StBFChain/StBFChain.cxx b/StRoot/StBFChain/StBFChain.cxx index 566db07be1f..b00ec8fe3c9 100644 --- a/StRoot/StBFChain/StBFChain.cxx +++ b/StRoot/StBFChain/StBFChain.cxx @@ -730,8 +730,10 @@ Int_t StBFChain::Instantiate() if ( GetOption("EastOff")) mk->SetAttr("EastOff",kTRUE); if ( GetOption("WestOff")) mk->SetAttr("WestOff",kTRUE); } - if (maker == "StEventQAMaker" && GetOption("QAalltrigs")) - ProcessLine(Form("((StEventQAMaker *) %p)->AllTriggers();",mk)); + if (maker == "StEventQAMaker") { + if ( GetOption("QAalltrigs")) mk->SetAttr("allTrigs",kTRUE); + if ( GetOption("QAallevents")) mk->SetAttr("allEvents",kTRUE); + } //Special options for V0s and Xis using estGlobal tracks if(maker=="StV0FinderMaker" && Key=="v0svt"){ TString cmd(Form("StV0FinderMaker *V0mk=(StV0FinderMaker*) %p;",mk)); diff --git a/StRoot/St_QA_Maker/StQAMakerBase.cxx b/StRoot/St_QA_Maker/StQAMakerBase.cxx index 4f31736be8c..de5811ecdcb 100755 --- a/StRoot/St_QA_Maker/StQAMakerBase.cxx +++ b/StRoot/St_QA_Maker/StQAMakerBase.cxx @@ -202,6 +202,7 @@ StQAMakerBase::StQAMakerBase(const char *name, const char *title, const char* ty ITTF = kFALSE; EST = -1; // -1 = unknown allTrigs = kFALSE; + allEvents = kFALSE; // - Set all the histogram booking constants @@ -309,6 +310,8 @@ StQAMakerBase::~StQAMakerBase() { Int_t StQAMakerBase::Init() { // Histogram booking must wait until first event Make() to determine event type eventCount = 0; + if (IAttr("allTrigs")) allTrigs = kTRUE; + if (IAttr("allEvents")) allEvents = kTRUE; return StMaker::Init(); } //_____________________________________________________________________________ @@ -337,7 +340,7 @@ Int_t StQAMakerBase::Make() { - if (!fillHists) return kStOk; + if (!(fillHists || allEvents)) return kStOk; // Call methods to fill histograms // Those divided by event class: diff --git a/StRoot/St_QA_Maker/StQAMakerBase.h b/StRoot/St_QA_Maker/StQAMakerBase.h index 9b577766a06..8efced122aa 100755 --- a/StRoot/St_QA_Maker/StQAMakerBase.h +++ b/StRoot/St_QA_Maker/StQAMakerBase.h @@ -271,6 +271,7 @@ class StQAMakerBase : public StMaker { Bool_t ITTF; Int_t EST; Bool_t allTrigs; + Bool_t allEvents; virtual void NewQABookHist(); virtual TH2F* MH1F(const Text_t* name, const Text_t* title, From eba182d5b42930289996412f3ffc1cfa63566a46 Mon Sep 17 00:00:00 2001 From: Daniel Brandenburg Date: Mon, 29 Jul 2024 23:03:22 -0400 Subject: [PATCH 26/45] StFwdQAMaker for optional QA of fwd systems and tracking (#694) The StFwdQAMaker provides dedicated maker for Tree generation for use in FWD calibrations and for offline QA histograms using the full FWD tracking + call matching --- StRoot/StFwdTrackMaker/StFwdQAMaker.cxx | 333 ++++++++++++++++++ StRoot/StFwdTrackMaker/StFwdQAMaker.h | 217 ++++++++++++ .../include/Tracker/ObjExporter.h | 5 +- 3 files changed, 553 insertions(+), 2 deletions(-) create mode 100644 StRoot/StFwdTrackMaker/StFwdQAMaker.cxx create mode 100644 StRoot/StFwdTrackMaker/StFwdQAMaker.h diff --git a/StRoot/StFwdTrackMaker/StFwdQAMaker.cxx b/StRoot/StFwdTrackMaker/StFwdQAMaker.cxx new file mode 100644 index 00000000000..b7ce1cd225e --- /dev/null +++ b/StRoot/StFwdTrackMaker/StFwdQAMaker.cxx @@ -0,0 +1,333 @@ +#include "StFwdTrackMaker/StFwdQAMaker.h" +#include "StFwdQAMaker.h" +#include "St_base/StMessMgr.h" +#include "StBFChain/StBFChain.h" +#include "StFwdTrackMaker/StFwdTrackMaker.h" + +#include "StFwdTrackMaker/include/Tracker/FwdTracker.h" +#include "StFwdTrackMaker/include/Tracker/ObjExporter.h" +// StEvent includes +#include "StEvent/StBTofCollection.h" +#include "StEvent/StBTofHeader.h" +#include "StEvent/StEvent.h" +#include "StEvent/StFttCluster.h" +#include "StEvent/StFttCollection.h" +#include "StEvent/StFcsCluster.h" +#include "StEvent/StFcsCollection.h" +#include "StFcsDbMaker/StFcsDb.h" +#include "StRoot/StEpdUtil/StEpdGeom.h" +#include "StEvent/StFwdTrackCollection.h" +#include "StEvent/StFwdTrack.h" + + +#include "StMuDSTMaker/COMMON/StMuDstMaker.h" +#include "StMuDSTMaker/COMMON/StMuDst.h" +#include "StMuDSTMaker/COMMON/StMuEvent.h" +#include "StMuDSTMaker/COMMON/StMuFstCollection.h" +#include "StMuDSTMaker/COMMON/StMuFstHit.h" +#include "StMuDSTMaker/COMMON/StMuPrimaryVertex.h" +#include "StMuDSTMaker/COMMON/StMuFwdTrack.h" +#include "StMuDSTMaker/COMMON/StMuFwdTrackCollection.h" +#include "StMuDSTMaker/COMMON/StMuFcsCollection.h" +#include "StMuDSTMaker/COMMON/StMuFcsCluster.h" +#include "StMuDSTMaker/COMMON/StMuFcsHit.h" +#include "StMuDSTMaker/COMMON/StMuFttCluster.h" +#include "StMuDSTMaker/COMMON/StMuFttPoint.h" +#include "StMuDSTMaker/COMMON/StMuMcTrack.h" +#include "StMuDSTMaker/COMMON/StMuFstHit.h" + +// ClassImp(FcsClusterWithStarXYZ); + +/** Clear the FwdQATreeData from one event to next */ +void FwdQATreeData::clear(){ + header.clear(); + mcTracks.reset(); + fttPoints.reset(); + fttClusters.reset(); + fstPoints.reset(); + reco.reset(); + seeds.reset(); + wcal.reset(); + hcal.reset(); + wcalHits.reset(); + hcalHits.reset(); + epdHits.reset(); +} + +FcsClusterWithStarXYZ::FcsClusterWithStarXYZ( StMuFcsCluster *clu, StFcsDb *fcsDb ) { + if ( nullptr == clu ) return; + StThreeVectorD xyz = fcsDb->getStarXYZfromColumnRow(clu->detectorId(),clu->x(),clu->y()); + float detOffset = 0.0; + if ( clu->detectorId() == kFcsEcalNorthDetId || clu->detectorId() == kFcsEcalSouthDetId ){ + detOffset = 715.0; // cm from IP + } else if ( clu->detectorId() == kFcsHcalNorthDetId || clu->detectorId() == kFcsHcalSouthDetId ){ + detOffset = 807.0; // cm from IP + } + mXYZ.SetXYZ( xyz.x(), xyz.y(), xyz.z() + detOffset ); + mClu = clu; +} + +FcsHitWithStarXYZ::FcsHitWithStarXYZ( StMuFcsHit *hit, StFcsDb *fcsDb ) { + if ( nullptr == hit ) return; + StThreeVectorD xyz = fcsDb->getStarXYZ(hit->detectorId(),hit->id()); + float detOffset = 0.0; + if ( hit->detectorId() == kFcsEcalNorthDetId || hit->detectorId() == kFcsEcalSouthDetId ){ + detOffset = 715.0; // cm from IP + } else if ( hit->detectorId() == kFcsHcalNorthDetId || hit->detectorId() == kFcsHcalSouthDetId ){ + detOffset = 807.0; // cm from IP + } else if ( hit->detectorId() == kFcsPresNorthDetId || hit->detectorId() == kFcsPresSouthDetId ){ + StEpdGeom epdgeo; + double zepd=375.0; + int pp,tt,n; + double x[5],y[5]; + fcsDb->getEPDfromId(hit->detectorId(),hit->id(),pp,tt); + epdgeo.GetCorners(100*pp+tt,&n,x,y); + double x0 = (x[0] + x[1] + x[2] + x[3]) / 4.0; + double y0 = (y[0] + y[1] + y[2] + y[3]) / 4.0; + xyz.setX(x0); + xyz.setY(y0); + xyz.setZ(zepd); + } + mXYZ.SetXYZ( xyz.x(), xyz.y(), xyz.z() + detOffset ); + mHit = hit; +} + +StFwdQAMaker::StFwdQAMaker() : StMaker("fwdQAMaker"), mTreeFile(nullptr), mTree(nullptr) { + +} + +int StFwdQAMaker::Init() { + + mTreeFile = new TFile("fwdtree.root", "RECREATE"); + mTree = new TTree("fwd", "fwd tracking tree"); + + mTree->Branch("header", &mTreeData. header, 3200, 99 ); + mTreeData.mcTracks.createBranch(mTree, "mcTracks"); + mTree->Branch("nSeedTracks", &mTreeData.nSeedTracks, "nSeedTracks/I"); + mTreeData.fstPoints.createBranch(mTree, "fstHits"); + mTreeData.fttPoints.createBranch(mTree, "fttPoints"); + mTreeData.fttClusters.createBranch(mTree, "fttClusters"); + mTreeData.fstPoints.createBranch(mTree, "fstPoints"); + mTreeData.wcal.createBranch(mTree, "wcalClusters"); + mTreeData.hcal.createBranch(mTree, "hcalClusters"); + + mTreeData.wcalHits.createBranch(mTree, "wcalHits"); + mTreeData.hcalHits.createBranch(mTree, "hcalHits"); + mTreeData.epdHits.createBranch(mTree, "epdHits"); + + mTreeData.reco.createBranch(mTree, "reco"); + mTreeData.seeds.createBranch(mTree, "seeds"); + return kStOk; +} +int StFwdQAMaker::Finish() { + + if ( mTreeFile && mTree ){ + mTreeFile->cd(); + mTree->Write(); + mTreeFile->Write(); + LOG_DEBUG << "StFwdQA File written" << endm; + } + return kStOk; +} +int StFwdQAMaker::Make() { + LOG_INFO << "FWD Report:" << endm; + StEvent *mStEvent = static_cast(GetInputDS("StEvent")); + if ( mStEvent ){ + // report number of fwd tracks + auto fwdTracks = mStEvent->fwdTrackCollection(); + LOG_INFO << "Number of FwdTracks (StFwdTrackCollection): " << fwdTracks->tracks().size() << endm; + LOG_INFO << "Number of Ftt Points (StEvent)" << mStEvent->fttCollection()->points().size() << endm; + } + LOG_INFO << "SETUP START" << endm; + // setup the datasets / makers + mMuDstMaker = (StMuDstMaker *)GetMaker("MuDst"); + if(mMuDstMaker) { + mMuDst = mMuDstMaker->muDst(); + mMuForwardTrackCollection = mMuDst->muFwdTrackCollection(); + mMuFcsCollection = mMuDst->muFcsCollection(); + if (mMuForwardTrackCollection){ + LOG_DEBUG << "Number of StMuFwdTracks: " << mMuForwardTrackCollection->numberOfFwdTracks() << endm; + } + } else { + LOG_DEBUG << "No StMuDstMaker found: " << mMuDstMaker << endm; + } + mFcsDb = static_cast(GetDataSet("fcsDb")); + + mFwdTrackMaker = (StFwdTrackMaker*) GetMaker( "fwdTrack" ); + if (!mFwdTrackMaker) { + LOG_WARN << "No StFwdTrackMaker found, skipping StFwdQAMaker" << endm; + // return kStOk; + } + + mTreeData.header.run = mMuDst->event()->runNumber(); + LOG_DEBUG << "SETUP COMPLETE" << endm; + + auto muFstCollection = mMuDst->muFstCollection(); + if ( muFstCollection ){ + LOG_DEBUG << "MuDst has #fst hits: " << muFstCollection->numberOfHits() << endm; + for ( size_t i = 0; i < muFstCollection->numberOfHits(); i++ ){ + StMuFstHit * h = muFstCollection->getHit(i); + mTreeData.fstPoints.add( h ); + } + } + FillMcTracks(); + FillTracks(); + FillFstPoints(); + FillFttClusters(); + FillFcsStMuDst(); + mTree->Fill(); + return kStOk; +} +void StFwdQAMaker::Clear(const Option_t *opts) { + mTreeData.clear(); + return; +} + +void StFwdQAMaker::FillFstPoints(){ + StMuFstCollection * fst = mMuDst->muFstCollection(); + if (!fst) { + LOG_WARN << "No StMuFstCollection ... bye-bye" << endm; + return; + } + + // size_t numFwdHitsPrior = mFwdHitsFst.size(); + LOG_INFO << "Loading " << fst->numberOfHits() << " StMuFstHits" << endm; + // TMatrixDSym hitCov3(3); + for ( unsigned int index = 0; index < fst->numberOfHits(); index++){ + StMuFstHit * muFstHit = fst->getHit( index ); + mTreeData.fstPoints.add( muFstHit ); + + + // float vR = muFstHit->localPosition(0); + // float vPhi = muFstHit->localPosition(1); + // float vZ = muFstHit->localPosition(2); + + // const float dz0 = fabs( vZ - mFstZFromGeom[0] ); + // const float dz1 = fabs( vZ - mFstZFromGeom[1] ); + // const float dz2 = fabs( vZ - mFstZFromGeom[2] ); + // static const float fstThickness = 2.0; // thickness in cm between inner and outer on sigle plane + + // // assign disk according to which z value the hit has, within the z-plane thickness + // int d = 0 * ( dz0 < fstThickness ) + 1 * ( dz1 < fstThickness ) + 2 * ( dz2 < fstThickness ); + + // float x0 = vR * cos( vPhi ); + // float y0 = vR * sin( vPhi ); + // hitCov3 = makeSiCovMat( TVector3( x0, y0, vZ ), mFwdConfig ); + + // LOG_DEBUG << "FST HIT: d = " << d << ", x=" << x0 << ", y=" << y0 << ", z=" << vZ << endm; + // mFstHits.push_back( TVector3( x0, y0, vZ) ); + + // // we use d+4 so that both FTT and FST start at 4 + // mFwdHitsFst.push_back(FwdHit(count++, x0, y0, vZ, d+4, 0, hitCov3, nullptr)); + // count++; + } // index +} + +void StFwdQAMaker::FillTracks() { + mTreeData.nSeedTracks = 0; + if ( mMuForwardTrackCollection ){ + LOG_DEBUG << "Adding " << mMuForwardTrackCollection->numberOfFwdTracks() << " FwdTracks (MuDst)" << endm; + for ( size_t iTrack = 0; iTrack < mMuForwardTrackCollection->numberOfFwdTracks(); iTrack++ ){ + auto muTrack = mMuForwardTrackCollection->getFwdTrack(iTrack); + mTreeData.reco.add( muTrack ); + + for (auto fsth : muTrack->mFSTPoints){ + mTreeData.seeds.add( fsth ); + mTreeData.nSeedTracks++; + } + for (auto ftth : muTrack->mFTTPoints){ + mTreeData.seeds.add( ftth ); + mTreeData.nSeedTracks++; + } + if ( iTrack > 5000 ) { + LOG_WARN << "Truncating to 5000 tracks" << endm; + break; + } + } + } + LOG_DEBUG << "TRACKS COMPLETE" << endm; +} + +void StFwdQAMaker::FillFcsStMuDst( ) { + + if ( !mMuDst ){ + LOG_DEBUG << "No mMuDst found, skipping StFwdQAMaker::FillFcsStEvent" << endm; + return; + } + StMuFcsCollection* fcs = mMuDst->muFcsCollection(); + if ( !fcs ){ + LOG_DEBUG << "No muFcsCollection found, skipping StFwdQAMaker::FillFcsStEvent" << endm; + return; + } + + StFcsDb* fcsDb=static_cast(GetDataSet("fcsDb")); + + // LOAD ECAL / HCAL CLUSTERS + LOG_INFO << "MuDst has #fcs clusters: " << fcs->numberOfClusters() << endm; + for( size_t i = 0; i < fcs->numberOfClusters(); i++){ + StMuFcsCluster * clu = fcs->getCluster(i); + FcsClusterWithStarXYZ *cluSTAR = new FcsClusterWithStarXYZ(clu, fcsDb); + if ( clu->detectorId() == kFcsEcalNorthDetId || clu->detectorId() == kFcsEcalSouthDetId ){ + LOG_INFO << "Adding WCAL Cluster to FwdTree" << endm; + mTreeData.wcal.add( cluSTAR ); + } else if ( clu->detectorId() == kFcsHcalNorthDetId || clu->detectorId() == kFcsHcalSouthDetId ){ + LOG_INFO << "Adding HCAL Cluster to FwdTree" << endm; + mTreeData.hcal.add( cluSTAR ); + } + + delete cluSTAR; + } + + // LOAD ECAL / HCAL CLUSTERS + LOG_INFO << "MuDst has #fcs hits: " << fcs->numberOfHits() << endm; + for( size_t i = 0; i < fcs->numberOfHits(); i++){ + StMuFcsHit * hit = fcs->getHit(i); + FcsHitWithStarXYZ *hitSTAR = new FcsHitWithStarXYZ(hit, fcsDb); + if ( hit->detectorId() == kFcsEcalNorthDetId || hit->detectorId() == kFcsEcalSouthDetId ){ + LOG_DEBUG << "Adding WCAL Cluster to FwdTree" << endm; + mTreeData.wcalHits.add( hitSTAR ); + } else if ( hit->detectorId() == kFcsHcalNorthDetId || hit->detectorId() == kFcsHcalSouthDetId ){ + LOG_DEBUG << "Adding HCAL Cluster to FwdTree" << endm; + mTreeData.hcalHits.add( hitSTAR ); + } else if ( hit->detectorId() == kFcsPresNorthDetId || hit->detectorId() == kFcsPresSouthDetId ){ + LOG_DEBUG << "Adding PRES hit to FwdTree" << endm; + mTreeData.epdHits.add( hitSTAR ); + } + delete hitSTAR; + } + + // TODO, cleanup? +} + +void StFwdQAMaker::FillMcTracks(){ + // Retrieve pointer to MC tracks + TClonesArray *mcTracks = mMuDst->mcArray(1); + LOG_INFO << "MuDst has #mc tracks: " << mcTracks->GetEntriesFast() << endm; + // Loop over MC vertices + for (Int_t iVtx=0; iVtxGetEntriesFast(); iVtx++) { + // Retrieve i-th MC vertex from MuDst + StMuMcTrack *mcTrack = (StMuMcTrack*)mcTracks->UncheckedAt(iVtx); + if ( !mcTrack ) continue; + + // Add MC track to the tree + mTreeData.mcTracks.add( mcTrack ); + } +} + + +void StFwdQAMaker::FillFttClusters(){ + + auto muFttCollection = mMuDst->muFttCollection(); + if ( muFttCollection ){ + LOG_DEBUG << "MuDst has #ftt clusters: " << muFttCollection->numberOfClusters() << endm; + for ( size_t i = 0; i < muFttCollection->numberOfClusters(); i++ ){ + StMuFttCluster * c = muFttCollection->getCluster(i); + mTreeData.fttClusters.add( c ); + } + + for ( size_t i = 0; i < muFttCollection->numberOfPoints(); i++ ){ + StMuFttPoint * c = muFttCollection->getPoint(i); + mTreeData.fttPoints.add( c ); + } + } +} diff --git a/StRoot/StFwdTrackMaker/StFwdQAMaker.h b/StRoot/StFwdTrackMaker/StFwdQAMaker.h new file mode 100644 index 00000000000..bc60f98d5b4 --- /dev/null +++ b/StRoot/StFwdTrackMaker/StFwdQAMaker.h @@ -0,0 +1,217 @@ +#ifndef ST_FWD_TREE_MAKER_H +#define ST_FWD_TREE_MAKER_H + +#include "TClonesArray.h" +#ifndef __CINT__ +#include "GenFit/Track.h" +#include "StFwdTrackMaker/include/Tracker/FwdHit.h" +#include "StMuDSTMaker/COMMON/StMuFwdTrack.h" +#endif + +#include "StChain/StMaker.h" +#include "TTree.h" +#include "TVector3.h" +#include "TLorentzVector.h" +#include "StEvent/StEnumerations.h" +#include "StThreeVectorD.hh" + +class StMuFwdTrack; +class StMuFwdTrackProjection; +class ForwardTracker; +class StFwdTrack; +class StMuMcTrack; + +/** @brief TClonesArray writer + * Helper class for writing TClonesArrays to TTree of custom class type + */ +template +class TClonesArrayWriter { + public: + TClonesArrayWriter() {} + ~TClonesArrayWriter() {} + + void createBranch( TTree *tree, const char* name, int buffSize = 256000, int splitLevel = 99){ + _tca = new TClonesArray( BranchType::Class_Name() ); + tree->Branch( name, &this->_tca, buffSize, splitLevel ); + } + + void add( BranchType &branch ){ + if ( nullptr == this->_tca ) return; + BranchType *new_branch = new ((*this->_tca)[this->_n]) BranchType( ); + *new_branch = branch; + this->_n++; + } + + void add( BranchType *branch ){ + if ( nullptr == this->_tca || nullptr == branch) return; + BranchType *new_branch = new ((*this->_tca)[this->_n]) BranchType( ); + *new_branch = *branch; + this->_n++; + } + + void reset(){ + this->_n = 0; + if( nullptr != this->_tca ) + this->_tca->Clear(); + } + + UInt_t N() const { return _n; } + BranchType *at( UInt_t i ){ + if ( nullptr == _tca ) + return nullptr; + return (BranchType*)_tca->At( i ); + } + + protected: + TClonesArray * _tca = nullptr; + UInt_t _n = 0; +}; + +class FwdTreeHeader : public TObject { + public: + FwdTreeHeader() : TObject() { + run = 0; + event = 0; + tofmult = 0; + vpdVz = -999; + pv.SetXYZ(0, 0, 0); + } + + void set( int r, int e, int t, TVector3 &p ){ + run = r; + event = e; + tofmult = t; + pv = p; + } + + void clear() { + run = 0; + event = 0; + tofmult = 0; + TVector3 pv(-999, -999, -999); + vpdVz = -999; + } + + TVector3 pv; + int run, event, tofmult; + float vpdVz; + + ClassDef(FwdTreeHeader, 1) +}; + +class StFcsDb; +class StFcsCluster; +class StFcsHit; +class StMuFcsCluster; +class StMuFcsHit; +class StMuFttCluster; +class StMuFttPoint; +class StMuFstHit; +class StMuFwdTrackSeedPoint; + + +/** + * @brief Store Cluster with STAR XYZ position + * + */ +class FcsClusterWithStarXYZ: public TObject { + public: + FcsClusterWithStarXYZ() { + mXYZ.SetXYZ(0, 0, 0); + mClu = nullptr; + } + FcsClusterWithStarXYZ( StMuFcsCluster *clu, StFcsDb *fcsDb ); + TVector3 mXYZ; + StMuFcsCluster *mClu; + ClassDef(FcsClusterWithStarXYZ, 1); +}; + +/** + * @brief Store Hit with STAR XYZ position + * + */ +class FcsHitWithStarXYZ: public TObject { + public: + FcsHitWithStarXYZ() { + mXYZ.SetXYZ(0, 0, 0); + mHit = nullptr; + } + FcsHitWithStarXYZ( StMuFcsHit *hit, StFcsDb *fcsDb ); + TVector3 mXYZ; + StMuFcsHit *mHit; + ClassDef(FcsHitWithStarXYZ, 1); +}; + + +/** @brief +* This class is a container for the data that will be written to the output tree. +*/ +struct FwdQATreeData { + + /** @brief Primary event vertex*/ + FwdTreeHeader header; + /** @brief MC tracks */ + TClonesArrayWriter mcTracks; + TClonesArrayWriter fttPoints; + TClonesArrayWriter fttClusters; + TClonesArrayWriter fstPoints; + + TClonesArrayWriter wcal; + TClonesArrayWriter wcalHits; + TClonesArrayWriter hcal; + TClonesArrayWriter hcalHits; + TClonesArrayWriter epdHits; + TClonesArrayWriter reco; + + int nSeedTracks; + TClonesArrayWriter seeds; + + + void clear(); +}; + + +class StMuDstMaker; +class StMuDst; +class StMuFwdTrackCollection; +class StMuFcsCollection; +class StFwdTrackMaker; +class StEvent; + +class StFwdQAMaker : public StMaker { + + ClassDef(StFwdQAMaker, 0); + + public: + StFwdQAMaker(); + ~StFwdQAMaker(){/* nada */}; + + int Init(); + int Finish(); + int Make(); + void Clear(const Option_t *opts = ""); + + void FillFttClusters(); + void FillFstPoints(); + void FillFcsStEvent(); + void FillFcsStMuDst(); + void FillTracks(); + void FillMcTracks(); + + protected: + TFile *mTreeFile = nullptr; + TTree *mTree = nullptr; + FwdQATreeData mTreeData; + + StEvent *mStEvent = nullptr; + StMuDstMaker *mMuDstMaker = nullptr; + StMuDst *mMuDst = nullptr; + StMuFwdTrackCollection * mMuForwardTrackCollection = nullptr; + StMuFcsCollection *mMuFcsCollection = nullptr; + StFwdTrackMaker *mFwdTrackMaker = nullptr; + StFcsDb *mFcsDb = nullptr; + +}; + + +#endif diff --git a/StRoot/StFwdTrackMaker/include/Tracker/ObjExporter.h b/StRoot/StFwdTrackMaker/include/Tracker/ObjExporter.h index 08ffda49a8e..623b0172452 100644 --- a/StRoot/StFwdTrackMaker/include/Tracker/ObjExporter.h +++ b/StRoot/StFwdTrackMaker/include/Tracker/ObjExporter.h @@ -9,8 +9,6 @@ class StEvent; -float DEGS_TO_RAD = 3.14159f/180.0f; -float SCALE = 0.1; class ObjExporter { public: @@ -33,6 +31,7 @@ class ObjExporter { int p, s, i, j; float x, y, z, out; int nPitch = nLongitude + 1; + const float DEGS_TO_RAD = 3.14159f/180.0f; float pitchInc = (180. / (float)nPitch) * DEGS_TO_RAD; float rotInc = (360. / (float)nLatitude) * DEGS_TO_RAD; @@ -209,6 +208,7 @@ class ObjExporter { fout << "usemtl stgc_hits\n" << endl; float pz[] = {280.90499, 303.70498, 326.60501, 349.40499}; TVector3 cp; + const float SCALE = 0.1; for ( size_t i = 0; i < event->fttCollection()->numberOfClusters(); i++ ){ @@ -263,6 +263,7 @@ class ObjExporter { std::vector &fcsClusterEnergy ){ + const float SCALE = 0.1; LOG_INFO << "Writing: " << filename << endm; numVertices = 0; // OPEN output From 44aaab8f8ba59101f7cd02e8b50a9f3641f1a5aa Mon Sep 17 00:00:00 2001 From: klendathu2k <56083924+klendathu2k@users.noreply.github.com> Date: Wed, 7 Aug 2024 12:02:15 -0400 Subject: [PATCH 27/45] Prevent ROOT6/CLING from loading all TROOT exposed classes twice... (#701) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit … (which couldn't possibly cause any side effects, but lets be safe about it shall we?) --- StRoot/StBFChain/BFC.C | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/StRoot/StBFChain/BFC.C b/StRoot/StBFChain/BFC.C index 958219204d4..79b1f846d30 100644 --- a/StRoot/StBFChain/BFC.C +++ b/StRoot/StBFChain/BFC.C @@ -1,4 +1,4 @@ -#if !defined(__CINT__) +#if !defined(__CINT__) && !defined(__CLING__) #include "TROOT.h" #endif #include "Bfc.h" From 3b7a25b09c337cd6f97d814a853b6c278296190f Mon Sep 17 00:00:00 2001 From: Gene Van Buren <85305093+genevb@users.noreply.github.com> Date: Tue, 13 Aug 2024 16:03:54 -0400 Subject: [PATCH 28/45] Add EPDX to RICH scalers (#704) The EPD coincidence rate began filling element `rs14` of the RICH scaler struct in the DAQ stream and online databases at the end of March 2018. This needs to be propagated into the `trigDetSums` table in the offline database ([now done](https://www.star.bnl.gov/cgi-bin/protected/viewvc.cgi/cvsroot/online/DataBase/dbcron/macros/FillTD.C?r1=1.2&r2=1.3)), and when reading the DAQ structures (this PR). As was previously done for the no-killer ZDCs, this makes use of a no-longer needed scaler in the trigDetSums struct (TOFp in this case), while retaining backward compatibility with older data in which that now-defunct scaler was actually used. --- StRoot/StDAQMaker/StSCReader.cxx | 15 ++++++++++++--- StRoot/StDAQMaker/StSCReader.h | 4 +++- StRoot/StDaqLib/SC/SC_Reader.cxx | 4 ++++ StRoot/StDaqLib/SC/SC_Reader.hh | 1 + StRoot/StDetectorDbMaker/St_spaceChargeCorC.cxx | 1 + StRoot/StDetectorDbMaker/St_trigDetSumsC.h | 2 ++ .../StPass0CalibMaker/StSpaceChargeEbyEMaker.cxx | 10 ++++++++-- 7 files changed, 31 insertions(+), 6 deletions(-) diff --git a/StRoot/StDAQMaker/StSCReader.cxx b/StRoot/StDAQMaker/StSCReader.cxx index 18869dd0686..c397744007d 100644 --- a/StRoot/StDAQMaker/StSCReader.cxx +++ b/StRoot/StDAQMaker/StSCReader.cxx @@ -36,8 +36,9 @@ void StSCReader::FillTime( unsigned int utime) //but new DAQ reader only gets used for 2009+ anyhow time_t UTime = utime; //er->getEventInfo().UnixTime; struct tm *time=gmtime(&UTime); - flipBBCBkg = (time->tm_year > 95 && time->tm_year < 109 ? 1 : 0) ; - useNoKillers = (time->tm_year > 110 ? 1 : 0);; + flipBBCBkg = (time->tm_year > 95 && time->tm_year < 109 ? 1 : 0); + useNoKillers = (time->tm_year > 110); + useEPD = (time->tm_year > 118 || (time->tm_year == 118 && time->tm_mon > 2)); } double StSCReader::getCTBWest() { @@ -80,6 +81,10 @@ double StSCReader::getZDCXNoKiller() { return sc.rich_scalers[14]; } +double StSCReader::getEPDX() { + return sc.rich_scalers[13]; +} + double StSCReader::getMult() { return sc.rich_scalers[10]; } @@ -170,7 +175,11 @@ TDataSet* StSCReader::getSCTable(unsigned long runno) { tb->ctbEast = getCTBEast(); tb->ctbTOFp = getCTBOrTOFp(); } - tb->tofp = getTOFp(); + if (useEPD) { // use otherwise empty space + tb->tofp = getEPDX(); + } else { + tb->tofp = getTOFp(); + } tb->zdcWest = getZDCWest(); tb->zdcEast = getZDCEast(); tb->zdcX = getZDCX(); diff --git a/StRoot/StDAQMaker/StSCReader.h b/StRoot/StDAQMaker/StSCReader.h index 4d41a4b8325..b02f43a174b 100644 --- a/StRoot/StDAQMaker/StSCReader.h +++ b/StRoot/StDAQMaker/StSCReader.h @@ -36,6 +36,7 @@ class StSCReader double getZDCWestNoKiller(); double getZDCEastNoKiller(); double getZDCXNoKiller(); + double getEPDX(); double getMult(); double getL0(); double getBBCX(); @@ -56,7 +57,8 @@ class StSCReader sc_t *fSC; short flipBBCBkg; - short useNoKillers; + bool useNoKillers; + bool useEPD; }; #endif diff --git a/StRoot/StDaqLib/SC/SC_Reader.cxx b/StRoot/StDaqLib/SC/SC_Reader.cxx index 055dafbd51b..c6e1abc5354 100644 --- a/StRoot/StDaqLib/SC/SC_Reader.cxx +++ b/StRoot/StDaqLib/SC/SC_Reader.cxx @@ -57,6 +57,10 @@ int SC_Reader::ZDCXNoKiller() { return sc.rich_scalers[14]; } +int SC_Reader::EPDX() { + return sc.rich_scalers[13]; +} + int SC_Reader::PVPDEast() { return sc.rich_scalers[8]; } diff --git a/StRoot/StDaqLib/SC/SC_Reader.hh b/StRoot/StDaqLib/SC/SC_Reader.hh index a2fc99b2d16..780dffb45f3 100644 --- a/StRoot/StDaqLib/SC/SC_Reader.hh +++ b/StRoot/StDaqLib/SC/SC_Reader.hh @@ -16,6 +16,7 @@ public: int ZDCWestNoKiller(); int ZDCEastNoKiller(); int ZDCXNoKiller(); + int EPDX(); int Mult(); int L0(); int BBCX(); diff --git a/StRoot/StDetectorDbMaker/St_spaceChargeCorC.cxx b/StRoot/StDetectorDbMaker/St_spaceChargeCorC.cxx index 398c74f5d23..e561a1fd541 100644 --- a/StRoot/StDetectorDbMaker/St_spaceChargeCorC.cxx +++ b/StRoot/StDetectorDbMaker/St_spaceChargeCorC.cxx @@ -35,6 +35,7 @@ Double_t St_spaceChargeCorC::getSpaceChargeCoulombs(Double_t scaleFactor) case (13) : mult = scalers->getCTBOrTOFp(); break; // zdcx-no-killer as of 2011 case (14) : mult = scalers->getCTBEast(); break; // zdce-no-killer as of 2011 case (15) : mult = scalers->getCTBWest(); break; // zdcw-no-killer as of 2011 + case (16) : mult = scalers->getEPDX(); break; // EPD after March 2018 default : mult = 0.; } diff --git a/StRoot/StDetectorDbMaker/St_trigDetSumsC.h b/StRoot/StDetectorDbMaker/St_trigDetSumsC.h index 967739e5a45..74a223836d1 100644 --- a/StRoot/StDetectorDbMaker/St_trigDetSumsC.h +++ b/StRoot/StDetectorDbMaker/St_trigDetSumsC.h @@ -21,6 +21,7 @@ class St_trigDetSumsC : public TChair { Double_t ctbEast(Int_t i = 0) {return validity(Struct(i)->ctbEast);} Double_t ctbTOFp(Int_t i = 0) {return validity(Struct(i)->ctbTOFp);} Double_t tofp(Int_t i = 0) {return validity(Struct(i)->tofp);} + Double_t epdx(Int_t i = 0) {return validity(Struct(i)->tofp);} // re-use for EPD Double_t zdcWest(Int_t i = 0) {return validity(Struct(i)->zdcWest);} Double_t zdcEast(Int_t i = 0) {return validity(Struct(i)->zdcEast);} Double_t zdcX(Int_t i = 0) {return validity(Struct(i)->zdcX);} @@ -42,6 +43,7 @@ class St_trigDetSumsC : public TChair { Double_t getCTBEast() {return ctbEast();} Double_t getCTBOrTOFp() {return ctbTOFp();} Double_t getTOFp() {return tofp();} + Double_t getEPDX() {return epdx();} Double_t getZDCWest() {return zdcWest();} Double_t getZDCEast() {return zdcEast();} Double_t getZDCX() {return zdcX();} diff --git a/StRoot/StPass0CalibMaker/StSpaceChargeEbyEMaker.cxx b/StRoot/StPass0CalibMaker/StSpaceChargeEbyEMaker.cxx index 4719a2da08f..b877c743cce 100644 --- a/StRoot/StPass0CalibMaker/StSpaceChargeEbyEMaker.cxx +++ b/StRoot/StPass0CalibMaker/StSpaceChargeEbyEMaker.cxx @@ -684,7 +684,7 @@ Int_t StSpaceChargeEbyEMaker::Make() { if (doGaps) DetermineGaps(); if (doNtuple) { - static float X[123]; + static float X[124]; static float ntent = 0.0; static float nttrk = 0.0; @@ -771,6 +771,12 @@ Int_t StSpaceChargeEbyEMaker::Make() { X[44] = s0*X[44] + s1*St_trigDetSumsC::instance()->getCTBWest(); // ZDCWestNoKiller X[45] = s0*X[45] + s1*St_trigDetSumsC::instance()->getCTBEast(); // ZDCEastNoKiller + // EPD: + // Stored in rich scaler rs14 for 2018+ data, and available + // for the DAQ stream via otherwise empty TOFp member of + // trigDetSums starting with SL24b + X[123] = s0*X[123] + s1*St_trigDetSumsC::instance()->getEPDX(); + // StMagUtilities distortion correction parameters X[46] = s0*X[46] + s1*m_ExB->GetConst_0(); X[47] = s0*X[47] + s1*m_ExB->GetConst_1(); @@ -1036,7 +1042,7 @@ void StSpaceChargeEbyEMaker::InitQAHists() { } if (doNtuple) ntup = new TNtuple("SC","Space Charge", - "sc:dca:zdcx:zdcw:zdce:bbcx:bbcw:bbce:bbcbb:bbcyb:intb:inty:fill:mag:run:event:dcan:dcap:dcae:dcaw:gapf:gapi:gapd:gapfn:gapin:gapdn:gapfp:gapip:gapdp:gapfe:gapie:gapde:gapfw:gapiw:gapdw:usc:uscmode:ugl:zdcc:bbcc:vpdx:vpdw:vpde:zdcxnk:zdcwnk:zdcenk:const0:const1:sce:scw:usce:sc1:gapf1:gapi1:sc2:gapf2:gapi2:sc3:gapf3:gapi3:sc4:gapf4:gapi4:sc5:gapf5:gapi5:sc6:gapf6:gapi6:sc7:gapf7:gapi7:sc8:gapf8:gapi8:sc9:gapf9:gapi9:sc10:gapf10:gapi10:sc11:gapf11:gapi11:sc12:gapf12:gapi12:sc13:gapf13:gapi13:sc14:gapf14:gapi14:sc15:gapf15:gapi15:sc16:gapf16:gapi16:sc17:gapf17:gapi17:sc18:gapf18:gapi18:sc19:gapf19:gapi19:sc20:gapf20:gapi20:sc21:gapf21:gapi21:sc22:gapf22:gapi22:sc23:gapf23:gapi23:sc24:gapf24:gapi24"); + "sc:dca:zdcx:zdcw:zdce:bbcx:bbcw:bbce:bbcbb:bbcyb:intb:inty:fill:mag:run:event:dcan:dcap:dcae:dcaw:gapf:gapi:gapd:gapfn:gapin:gapdn:gapfp:gapip:gapdp:gapfe:gapie:gapde:gapfw:gapiw:gapdw:usc:uscmode:ugl:zdcc:bbcc:vpdx:vpdw:vpde:zdcxnk:zdcwnk:zdcenk:const0:const1:sce:scw:usce:sc1:gapf1:gapi1:sc2:gapf2:gapi2:sc3:gapf3:gapi3:sc4:gapf4:gapi4:sc5:gapf5:gapi5:sc6:gapf6:gapi6:sc7:gapf7:gapi7:sc8:gapf8:gapi8:sc9:gapf9:gapi9:sc10:gapf10:gapi10:sc11:gapf11:gapi11:sc12:gapf12:gapi12:sc13:gapf13:gapi13:sc14:gapf14:gapi14:sc15:gapf15:gapi15:sc16:gapf16:gapi16:sc17:gapf17:gapi17:sc18:gapf18:gapi18:sc19:gapf19:gapi19:sc20:gapf20:gapi20:sc21:gapf21:gapi21:sc22:gapf22:gapi22:sc23:gapf23:gapi23:sc24:gapf24:gapi24:epdx"); if (doGaps) { gapZhist = new TH2F("Gaps","Gaps",GZN,GZL,GZH,GN,GL,GH); From 15ad150c06dd0d77009becc7fc51cfa1cdaffdbe Mon Sep 17 00:00:00 2001 From: Daniel Brandenburg Date: Wed, 14 Aug 2024 10:37:32 -0400 Subject: [PATCH 29/45] Initial version from Amarise summer 2024 project (#697) Amarise Edge summer 2024 project creating a multi-2D view event viz for the FWD tracker and detectors. Initial version as presented on July 17th --- StRoot/StFwdTrackMaker/macro/viz.C | 598 +++++++++++++++++++++++++++++ 1 file changed, 598 insertions(+) create mode 100644 StRoot/StFwdTrackMaker/macro/viz.C diff --git a/StRoot/StFwdTrackMaker/macro/viz.C b/StRoot/StFwdTrackMaker/macro/viz.C new file mode 100644 index 00000000000..2768834e087 --- /dev/null +++ b/StRoot/StFwdTrackMaker/macro/viz.C @@ -0,0 +1,598 @@ +#include "TFile.h" +#include "TH1F.h" +#include "TH2F.h" +#include "TTree.h" + + +TFile * fData; +TTree * fwd; +TH2 * hFrame; +TCanvas *gCan; +TPad *padRZ, *padXY, *padStat; + +float LegendX, LegendY; +float lineScale = 1.5; + +enum ProjectionType { kXY, kRZ, kRZSigned, kXZ, kYZ }; + +float xx( float x, float y, float z, ProjectionType proj = kRZ ){ + + if ( proj == kRZ || proj == kRZSigned){ + return z;//(TMath::ATan2( y, x ) + 2*3.1415926 )/ (2*3.14159) * 360; + } else if ( proj == kXY ){ + return x; + } else if ( proj == kXZ ){ + return z; + } else if ( proj == kYZ ){ + return z; + } + + return x; +} + +float yy( float x, float y, float z, ProjectionType proj = kRZ ){ + + if ( proj == kRZ ){ + float r = sqrt( pow(x, 2) + pow(y, 2) ); + return r; + } else if ( proj == kXY ){ + return y; + } else if ( proj == kRZSigned ){ + float r = sqrt( pow(x, 2) + pow(y, 2) ); + if ( y == 0 ) return r; + r *= y / fabs(y); + return r; + } else if ( proj == kXZ ){ + return x; + } else if ( proj == kYZ ){ + return y; + } + + return y; +} + +void viz_points(const char* name, const char* cmd, int color, int eventIndex, ProjectionType projType, bool Legend = false ){ + + fwd->Draw( cmd, "", "goff", 1, eventIndex ); + int N = fwd->GetSelectedRows(); + printf( "%s : has %d results \n", cmd, N ); + printf( "Projection Mode : %d \n", projType ); + + auto cmdX = fwd->GetV1(); + auto cmdY = fwd->GetV2(); + auto cmdZ = fwd->GetV3(); + auto cmdE = fwd->GetV4(); + if ( cmdE != nullptr ){ + printf( "TOWERS\n" ); + } + float vizX; //change from array-AGE + float vizY; + + TText *t = new TText(.5,.5,"Hello World !"); + // t->SetTextAlign(22); + t->SetTextColor(kBlack); + t->SetTextFont(43); + t->SetTextSize(20); + + int zColorStep = 90; + int slc = color; + int zColors[50]; // fst1 fst2 fst3 ftt1 ftt2 ftt3 ftt4 epd ecal hcal + float zSizes[] = {2.5, 2.5, 2.0, 1.5, 1.5, 1.5, 1.5, 1.5, 2.5, 2.0, 1.5}; //first element is for hits that don't match any positions (only goes to ftt3--changing to allow all) + for ( int i = 0; i < 50; i++ ) + zColors[i] = TColor::GetColorPalette(i*zColorStep % 255 ); + + + bool lgZ = false; + float alpha = 0.6; + for ( int i = 0; i < N; i++ ){ + + vizX = xx( cmdX[i], cmdY[i], cmdZ[i], projType ); + vizY = yy( cmdX[i], cmdY[i], cmdZ[i], projType ); + printf( "\tpoint at (%f, %f, %f) -> (%f, %f)\n", cmdX[i], cmdY[i], cmdZ[i], vizX, vizY ); + + int zIndex = 0; + if ( fabs( cmdZ[i] - 151.75) < 2.5 ) zIndex = 1; + if ( fabs( cmdZ[i] - 165.25) < 2.5 ) zIndex = 2; + if ( fabs( cmdZ[i] - 178.75) < 2.5 ) zIndex = 3; + + //add locations of other detectors-AGE + //FTT--approximate locations + if ( fabs( cmdZ[i] - 281) < 2.5 ) zIndex = 4; + if ( fabs( cmdZ[i] - 304) < 2.5 ) zIndex = 5; + if ( fabs( cmdZ[i] - 325) < 2.5 ) zIndex = 6; + if ( fabs( cmdZ[i] - 348) < 2.5 ) zIndex = 7; + //EPD--approx. + if ( fabs( cmdZ[i] - 375) < 2.5 ) zIndex = 8; + //FCS--approx. + //if ( fabs( cmdZ[i] - 721) < 2.5 ) zIndex = 9; //wcal + //if ( fabs( cmdZ[i] - 804) < 2.5 ) zIndex = 10; //hcal + + TMarker *mk = new TMarker( vizX, vizY, 20 ); + + mk->SetMarkerSize( 2.5 ); + if (zIndex >= 1 && zIndex < 50){ //see if should be changed to zIndex < 9-AGE + slc = zColors[zIndex]; + } + mk->SetMarkerSize( zSizes[zIndex] ); + + + + + // mk->SetMarkerSize( (float)(zIndex) * 0.5 + 0.5 ); + + alpha = 0.6; + if ( zIndex != 8 && (cmdE != nullptr && projType == kRZSigned) ){ //FCS for RZ + //mk->SetMarkerStyle( 21 ); //sets marker to a square, change to use TBox instead-AGE + //mk->SetMarkerSize( 0.5 + 0.5 * cmdE[i] ); + mk->SetMarkerSize(0); + alpha = (cmdE[i] / 10.0); + if (alpha>=1) alpha = 1; + TBox *box = new TBox( vizX-0.05*cmdE[i], vizY-0.5, vizX, vizY+0.5 ); + box->SetFillColor(210); + if ( name == "WCal Clusters" || name == "HCal CLusters" ){ + box->SetFillColor(880); + mk->SetMarkerSize(1); + } + box->Draw("same"); + } + if ( name == "FTT Clusters" && projType == kXY ){ + mk->SetMarkerSize(0); + TLine XCluster; + XCluster.SetLineWidth(1); + XCluster.SetLineColor(9); //dark blue + TLine YCluster; + YCluster.SetLineWidth(1); + YCluster.SetLineColor(46); //dark red + float x0; + float x1; + float y0; + float y1; + if (vizX < 0){ + x0 = -50; + x1 = 0; + } else if(vizX >= 0){ + x0 = 0; + x1 = 50; + } + if (vizY < 0){ + y0 = -50; + y1 = 0; + } else if (vizY >= 0){ + y0 = 0; + y1 = 50; + } + + XCluster.DrawLine(vizX, y0, vizX, y1); + YCluster.DrawLine(x0, vizY, x1, vizY); + + } + + if ( cmdE != nullptr && (zIndex == 8 || projType != kRZSigned) ){ //EPD for RZ and EPD and FCS for XY + mk->SetMarkerStyle(21); + mk->SetMarkerSize( 0.005 * cmdE[i]); + } + + printf( "\tzIndex = %d -> color = %d \n", zIndex, slc ); + + mk->SetMarkerColorAlpha( slc, alpha ); + if ( zIndex >= 1 ){ + mk->SetMarkerColorAlpha( slc, alpha ); + lgZ = true; + } + + //change marker style etc. for projected points only-AGE + /*if( name == "Proj" ){ + mk->SetMarkerStyle(23); + mk->SetMarkerColor(2); + mk->SetMarkerSize(1.5); + }*/ + + mk->Draw("same"); + + } + + if ( lgZ ){ + /*for ( int i = 1; i < 4; i++){ + TMarker *mk1 = new TMarker( LegendX, LegendY, 20 ); + mk1->SetMarkerSize( 2.5 ); + mk1->SetMarkerColorAlpha( zColors[i], 0.5 ); + mk1->Draw("same"); + t->DrawText( LegendX + 2, LegendY - 0.5, TString::Format( "%s: %d", name, i ) ); + + LegendY -= 5; + }*/ + if (name == "FST"){ + for ( int i = 1; i < 4; i++ ){ + TMarker *mk1 = new TMarker( LegendX, LegendY, 20 ); + mk1->SetMarkerSize( 2.5 ); + mk1->SetMarkerColorAlpha( zColors[i], 0.5 ); + mk1->Draw("same"); + t->DrawText( LegendX + 2, LegendY - 0.5, TString::Format( "%s: %d", name, i ) ); + + LegendY -= 5; + } + } else if (name == "FTT"){ + for ( int i = 1; i < 5; i++ ){ + TMarker *mk1 = new TMarker( LegendX, LegendY, 20 ); + mk1->SetMarkerSize( 2.5 ); + mk1->SetMarkerColorAlpha( zColors[i+3], 0.5 ); + mk1->Draw("same"); + t->DrawText( LegendX + 2, LegendY - 0.5, TString::Format( "%s: %d", name, i ) ); + + LegendY -= 5; + } + } else if (name == "FCS"){ + for ( int i = 1; i < 3; i++ ){ + TMarker *mk1 = new TMarker( LegendX, LegendY, 20 ); + mk1->SetMarkerSize( 2.5 ); + mk1->SetMarkerColorAlpha( zColors[i], 0.5 ); + mk1->Draw("same"); + t->DrawText( LegendX + 2, LegendY - 0.5, TString::Format( "%s: %d", name, i ) ); + + LegendY -= 5; + } + } + + } else { + TMarker *mk1 = new TMarker( LegendX, LegendY, 20 ); + mk1->SetMarkerSize( 2.5 ); + mk1->SetMarkerColor( color ); + mk1->Draw("same"); + t->DrawText( LegendX + 2, LegendY - 0.5, TString::Format( "%s:", name ) ); + + LegendY -= 5; + } +} + +//add function for seed finding-AGE +void viz_seed( const char* name, const char* cmd, int eventIndex, ProjectionType projType = kRZSigned){ + + fwd->Draw( "reco.id", "", "goff", 1, eventIndex ); + int nTrks = fwd->GetSelectedRows(); + + TLine line; + line.SetLineWidth(2); + line.SetLineColor(1); + TLine proj; + for (int i = 0; i < nTrks; i++){ //loop over number of tracks + + fwd->Draw( TString::Format("reco[%d].projs.mXYZ.fX:reco[%d].projs.mXYZ.fY:reco[%d].projs.mXYZ.fZ", i, i, i), "", "goff", 1, eventIndex ); + auto nHits = fwd->GetSelectedRows(); + auto projX = fwd->GetV1(); + auto projY = fwd->GetV2(); + auto projZ = fwd->GetV3(); + /*std::vector projX; + std::vector projY; + std::vector projZ; + + for (int hit = 0; hit < nHits; ++hit) { + projX.push_back(fwd->GetV1()[hit]); + projY.push_back(fwd->GetV2()[hit]); + projZ.push_back(fwd->GetV3()[hit]); + }*/ + + //select only the seeds that have same track id as track number + fwd->Draw( cmd, TString::Format("seeds.trackId == %d", i), "goff", 1, eventIndex ); + //fwd->Draw( TString::Format("seeds[%d].pos.fX:seeds[%d].pos.fY:seeds[%d].pos.fZ", i, i, i), "", "goff", 1, eventIndex ); + int numSeeds = fwd->GetSelectedRows(); + auto newX = fwd->GetV1(); + auto newY = fwd->GetV2(); + auto newZ = fwd->GetV3(); + + for ( int j = 0; j < numSeeds - 1; j++){ + + float x0 = xx( newX[j], newY[j], newZ[j], projType ); + float y0 = yy( newX[j], newY[j], newZ[j], projType ); + float x1 = xx( newX[j+1], newY[j+1], newZ[j+1], projType ); + float y1 = yy( newX[j+1], newY[j+1], newZ[j+1], projType ); + + /*if ( fabs(x0 - projX[j+1]) <= 1 ){ + line.SetLineColor(1); + }*/ + + line.DrawLine(x0, y0, x1, y1); + } + + } +} + +//add function for track projection +void viz_proj( int eventIndex, ProjectionType projType = kRZSigned, bool markers = false ){ + + //get number of tracks + fwd->Draw( "reco.id", "", "goff", 1, eventIndex); //check if this is correct data to use to get nTrks + int nTrks = fwd->GetSelectedRows(); + + //create line for track + TLine trkproj; + trkproj.SetLineWidth(1.5); + trkproj.SetLineColor(24); //light green + + //loop over each track in the event + for ( int i = 0; i < nTrks; i++ ){ + + //get hits in i'th track + fwd->Draw( TString::Format("reco[%d].projs.mXYZ.fX:reco[%d].projs.mXYZ.fY:reco[%d].projs.mXYZ.fZ", i, i, i), "", "goff", 1, eventIndex ); + auto nHits = fwd->GetSelectedRows(); + auto projX = fwd->GetV1(); + auto projY = fwd->GetV2(); + auto projZ = fwd->GetV3(); + + + //loop over hits in each track + for ( int j = 0; j < nHits - 1; j++ ){ + + //assign the x and y positions of the track projection + float x0 = xx( projX[j], projY[j], projZ[j], projType ); + float y0 = yy( projX[j], projY[j], projZ[j], projType ); + float x1 = xx( projX[j+1], projY[j+1], projZ[j+1], projType ); + float y1 = yy( projX[j+1], projY[j+1], projZ[j+1], projType ); + + /*trkproj.SetLineColor(i+2); + if (i == 0 || i == 10 ){ + trkproj.SetLineColor(1); + }*/ + trkproj.DrawLine(x0, y0, x1, y1); + } + + //add markers + if (markers){ + for ( int j = 0; j < nHits; j++ ){ + + float x = xx( projX[j], projY[j], projZ[j], projType ); + float y = yy( projX[j], projY[j], projZ[j], projType ); + + TMarker *mk = new TMarker( x, y, 20); + mk->SetMarkerStyle(23); + mk->SetMarkerColor(2); + mk->SetMarkerSize(1.5); + + mk->Draw("same"); + } + } + } + if (markers){ + //add marker to the legend + TText *t = new TText(.5,.5,"Hello World !"); + t->SetTextColor(kBlack); + t->SetTextFont(43); + t->SetTextSize(20); + //make this more functional? + if ( projType == kRZSigned ){ + LegendY = 5; + } else if (projType == kXY ){ + LegendY = -15; + } + TMarker *mk1 = new TMarker( LegendX, LegendY, 23 ); + mk1->SetMarkerSize( 2.5 ); + mk1->SetMarkerColor( 2 ); + mk1->Draw("same"); + t->DrawText( LegendX + 2, LegendY - 0.5, TString::Format( "Projected Hits ") ); + } + +} //end of fn + + +//add function to compare lines +//float comp_lines() + + +float statTextY = 0.97; +void n() { statTextY -= 0.05; } +void viz_stats( int eventIndex ){ + statTextY = 0.97; + TText text; + text.SetTextFont(43); + text.SetTextSize(36); + + + /*fwd->Draw( "fstX:fstY:fstZ", "", "goff", 1, eventIndex ); + int numEpd = fwd->GetSelectedRows(); + fwd->Draw( "fttX:fttY:fttZ", "", "goff", 1, eventIndex ); + int numEpd = fwd->GetSelectedRows(); + fwd->Draw( "epdX:epdY:epdZ", "", "goff", 1, eventIndex ); + int numEpd = fwd->GetSelectedRows(); + fwd->Draw( "fcsX:fcsY:fcsZ", "", "goff", 1, eventIndex ); + int numEpd = fwd->GetSelectedRows();*/ + + fwd->Draw( "reco.id", "", "goff", 1, eventIndex ); + int numTracks = fwd->GetSelectedRows(); + fwd->Draw( "fst.pos.fX:fst.pos.fY:fst.pos.fZ", "", "goff", 1, eventIndex ); + int numFst = fwd->GetSelectedRows(); + fwd->Draw( "ftt.pos.fX:ftt.pos.fY:ftt.pos.fZ", "", "goff", 1, eventIndex ); + int numFtt = fwd->GetSelectedRows(); + //fwd->Draw( "EPD hits", "", "goff", 1, eventIndex ); + //int numEpd = fwd->GetSelectedRows(); + fwd->Draw( "wcalHits.starXYZ.fX:wcalHits.starXYZ.fY:wcalHits.starXYZ.fZ", "", "goff", 1, eventIndex ); + int numWcalHits = fwd->GetSelectedRows(); + fwd->Draw( "hcalHits.starXYZ.fX:hcalHits.starXYZ.fY:hcalHits.starXYZ.fZ", "", "goff", 1, eventIndex ); + int numHcalHits = fwd->GetSelectedRows(); + fwd->Draw( "wcalClusters.pos.fX:wcalClusters.pos.fY:wcalClusters.pos.fZ", "", "goff", 1, eventIndex ); + int numWcal = fwd->GetSelectedRows(); + fwd->Draw( "hcalClusters.pos.fX:hcalClusters.pos.fY:hcalClusters.pos.fZ", "", "goff", 1, eventIndex ); + int numHcal = fwd->GetSelectedRows(); + + text.DrawTextNDC( 0.05, statTextY, TString::Format("Event : %d", eventIndex) ); n(); + text.DrawTextNDC( 0.05, statTextY, TString::Format("Tracks : %d", numTracks) ); n(); + text.DrawTextNDC( 0.05, statTextY, TString::Format("FST Hits : %d", numFst) ); n(); + text.DrawTextNDC( 0.05, statTextY, TString::Format("FTT Hits : %d", numFtt) ); n(); + //text.DrawTextNDC( 0.05, statTextY, TString::Format("EPD Hits : %d", numEpd) ); n(); + //text.DrawTextNDC( 0.05, statTextY, TString::Format("WCal Hits : %d", numWcalHits) ); n(); + //text.DrawTextNDC( 0.05, statTextY, TString::Format("HCal Hits : %d", numHcalHits) ); n(); + text.DrawTextNDC( 0.05, statTextY, TString::Format("WCal Clusters : %d", numWcal) ); n(); + text.DrawTextNDC( 0.05, statTextY, TString::Format("HCal Clusters : %d", numHcal) ); n(); + + //print reco statistics + /*fwd->Draw( "reco.reco.projs.mXYZ:fX:reco.reco.projs.mXYZ:fY:reco.reco.projs.mXYZ:fZ", "", "goff", 1, eventIndex ); + int numReco = fwd->GetSelectedRows(); + statTextY = 0.92; + text.DrawTextNDC( 0.35, statTextY, TString::Format("Reco Hits : %d", numReco) ); n();*/ + +} + + +int viz_event( int eventIndex, ProjectionType projType = kRZSigned ){ + + if ( projType == kRZSigned || projType == kXZ || projType == kYZ ){ + hFrame = new TH2F( "hFrame", ";z;R", 520, -30, 900, 260, -130, 130 ); + hFrame->SetTitle( "Event Visualization (RZ Signed)" ); + LegendX = 10; + LegendY = 60; + } else if ( projType == kRZ ){ + hFrame = new TH2F( "hFrame", ";z;R", 500, 0, 900, 60, 0, 60 ); + hFrame->SetTitle( "Event Visualization (RZ Signed)" ); + LegendX = 10; + LegendY = 60; + } else if ( projType == kXY ){ + hFrame = new TH2F( "hFrame", ";x;y", 5, -50, 50, 5, -50, 50 ); + hFrame->SetTitle( "Event Visualization (XY)" ); + LegendX = -40; + LegendY = 40; + } + + printf( "Visualizing Event %d \n", eventIndex ); + + fwd->Draw( "reco.id", "", "", 1, eventIndex ); + int nTrk = fwd->GetSelectedRows(); //number of reco tracks + printf( "Event has %d Tracks \n", nTrk ); //changed from %lld to %d to eliminate an error that occurred-AGE + + + hFrame->Draw("colz"); + + //add detector locations + if (projType == kRZSigned){ + + TLine *fst1 = new TLine(151.75, -28.3, 151.75, 28.3); + fst1->SetLineWidth(2); + fst1->SetLineColor(12); + fst1->Draw("same"); + TLine *fst2 = new TLine(165.25, -28.3, 165.25, 28.3); + fst2->SetLineWidth(2); + fst2->SetLineColor(12); + fst2->Draw("same"); + TLine *fst3 = new TLine(178.75, -28.3, 178.75, 28.3); + fst3->SetLineWidth(2); + fst3->SetLineColor(12); + fst3->Draw("same"); + + TLine *ftt1 = new TLine(281, -60, 281, 60); + ftt1->SetLineWidth(2); + ftt1->SetLineColor(12); + ftt1->Draw("same"); + TLine *ftt2 = new TLine(304, -60, 304, 60); + ftt2->SetLineWidth(2); + ftt2->SetLineColor(12); + ftt2->Draw("same"); + TLine *ftt3 = new TLine(325, -60, 325, 60); + ftt3->SetLineWidth(2); + ftt3->SetLineColor(12); + ftt3->Draw("same"); + TLine *ftt4 = new TLine(348, -60, 348, 60); + ftt4->SetLineWidth(2); + ftt4->SetLineColor(12); + ftt4->Draw("same"); + + TLine *epd = new TLine(375, -130, 375, 130); + epd->SetLineWidth(2); + epd->SetLineColor(12); + epd->Draw("same"); + + //add tboxes for fcs + TBox *wcal = new TBox( 720, -120, 735, 120 ); + wcal->SetFillColorAlpha(4, 0.2); + wcal->Draw("same"); + TBox *hcal = new TBox( 800, -120, 815, 120 ); + hcal->SetFillColorAlpha(2, 0.2); + hcal->Draw("same"); + + } + + //viz_points( "FST", "fstX:fstY:fstZ", kGray, eventIndex, projType/*, true*/ ); + //viz_points( "EPD", "epdX:epdY:epdZ:epdE", kBlue, eventIndex, projType/*, true*/ ); //epd hits (only in fwdtree2)-AGE + //viz_points( "FCS", "fcsX:fcsY:fcsZ:fcsE", kGreen, eventIndex, projType/*, true*/ ); + viz_points( "FST", "fst.pos.fX:fst.pos.fY:fst.pos.fZ", kGray, eventIndex, projType, true ); + viz_points( "FTT", "ftt.pos.fX:ftt.pos.fY:ftt.pos.fZ", kRed, eventIndex, projType ); + viz_points( "FTT Clusters", "fttClusters.pos.fX:fttClusters.pos.fY:fttClusters.pos.fZ", kRed, eventIndex, projType ); + viz_points( "WCal Hits", "wcalHits.starXYZ.fX:wcalHits.starXYZ.fY:wcalHits.starXYZ.fZ+705:100*wcalHits.energy", kBlue, eventIndex, projType ); + viz_points( "HCal Hits", "hcalHits.starXYZ.fX:hcalHits.starXYZ.fY:hcalHits.starXYZ.fZ+785:100*wcalClusters.mEnergy", kTeal, eventIndex, projType/*, true*/ ); + viz_points( "WCal Clusters", "wcalClusters.pos.fX:wcalClusters.pos.fY:wcalClusters.pos.fZ+705:100*wcalClusters.mEnergy", kViolet, eventIndex, projType/*, true*/ ); + viz_points( "HCal Clusters", "hcalClusters.pos.fX:hcalClusters.pos.fY:hcalClusters.pos.fZ+785:100*wcalClusters.mEnergy", kGreen, eventIndex, projType/*, true*/ ); //add fcs hits-AGE + + viz_seed( "Seeds", "seeds.pos.fX:seeds.pos.fY:seeds.pos.fZ", eventIndex, projType ); + //viz_proj( eventIndex, projType, false); + //viz_points( "Proj", "reco.reco.projs.mXYZ.fX:reco.reco.projs.mXYZ.fY:reco.reco.projs.mXYZ.fZ", kRed, eventIndex, projType); + return nTrk; +} + + +//change to name of file being used-AGE +void viz( TString fn = "fwdtree5.root", int view = kXY) { + + ProjectionType pjt = (ProjectionType)view; + fData = new TFile( fn ); + fwd = (TTree*)fData->Get( "fwd" ); + + gStyle->SetOptStat(0); + + float canWidth = 19 * 100; + float canHeight = 16 * 100; + gCan = new TCanvas( "g", "", canWidth, canHeight ); + gCan->SetMargin( 0, 0, 0, 0); + gCan->cd(); + gCan->Draw(); + + padRZ = new TPad( "padRZ", "", 0.0, 0.5, 0.95, 0.99 ); + padRZ->SetMargin( .05,.01,.05,.01 ); + padRZ->Draw("same"); + padRZ->cd(); + + gCan->cd(); + padXY = new TPad( "padXY", "", 0.0, 0.0, 0.5, 0.5 ); + padXY->SetMargin( .1,.02,.05,.01 ); + padXY->Draw("same"); + padXY->cd(); + + gCan->cd(); + padStat = new TPad( "padStat", "", 0.5, 0.0, 1.0, 0.5 ); + padStat->SetMargin( .1,.02,.05,.01 ); + padStat->Draw("same"); + padStat->cd(); + + // gPad->SetMargin(0.1, 0.05, 0.15, 0.05); + + int nEvents = fwd->GetEntries(); + // nEvents = 1; + for ( int iEvent = 0; iEvent < nEvents; iEvent ++ ){ + + printf( "Event: %d\n", iEvent ); + padRZ->cd(); + + //TBox *wcal = new TBox( 720, -60, 735, 60 ); + //wcal->SetFillColor(4); + //wcal->Draw(""); + int nTrk = viz_event( iEvent, kRZSigned ); + + + padXY->cd(); + viz_event( iEvent, kXY ); + if (nTrk > -1){ + padRZ->Update(); + padXY->Update(); + + padStat->cd(); + padStat->Clear(); + viz_stats( iEvent ); //changed to provide number of tracks as well-AGE + padStat->Update(); + gCan->Update(); + gCan->Print( TString::Format( "out_event%d.pdf", iEvent ) ); + } + + + // cin.get(); + // if (viz_event( iEvent ) > 0 ) + // break; + + hFrame->Reset(); + } + +} \ No newline at end of file From f0d3492adfbb8daba95890f4213337837f52485e Mon Sep 17 00:00:00 2001 From: Daniel Brandenburg Date: Wed, 14 Aug 2024 10:38:29 -0400 Subject: [PATCH 30/45] Update StMuMcTrack with num hits to FWD detectors (#696) Update to StMuMcTrack based on members in g2t_track - specifically add the missing access to number of hits from FWD detectors (and etof, etc.) --- StRoot/StMuDSTMaker/COMMON/StMuMcTrack.cxx | 8 ++++++++ StRoot/StMuDSTMaker/COMMON/StMuMcTrack.h | 16 +++++++++++++--- StRoot/StPicoEvent/StPicoMcTrack.h | 19 ++++++++++++++++++- 3 files changed, 39 insertions(+), 4 deletions(-) diff --git a/StRoot/StMuDSTMaker/COMMON/StMuMcTrack.cxx b/StRoot/StMuDSTMaker/COMMON/StMuMcTrack.cxx index 9d2d02e0ca0..d28b138e998 100644 --- a/StRoot/StMuDSTMaker/COMMON/StMuMcTrack.cxx +++ b/StRoot/StMuDSTMaker/COMMON/StMuMcTrack.cxx @@ -30,6 +30,14 @@ StMuMcTrack::StMuMcTrack(const g2t_track_st &t) : TObject(), mGePid(t.ge_pid), m mHits[ktof] = 0xff & t.n_tof_hit; /* Nhits in tof */ mHits[ktpc] = 0xff & t.n_tpc_hit; /* Nhits in tpc */ mHits[kvpd] = 0xff & t.n_vpd_hit; /* Nhits in vpd */ + mHits[ketr] = 0xff & t.n_etr_hit; /* Nhits in etr */ + mHits[khca] = 0xff & t.n_hca_hit; /* Nhits in hca */ + mHits[kfts] = 0xff & t.n_fts_hit; /* Nhits in fts */ + mHits[keto] = 0xff & t.n_eto_hit; /* Nhits in eto */ + mHits[kstg] = 0xff & t.n_stg_hit; /* Nhits in stg */ + mHits[kwca] = 0xff & t.n_wca_hit; /* Nhits in wca */ + mHits[kpre] = 0xff & t.n_pre_hit; /* Nhits in pre */ + mHits[kepd] = 0xff & t.n_epd_hit; /* Nhits in epd */ assert(t.pt<0 || mPxyz.perp()>1e-6); diff --git a/StRoot/StMuDSTMaker/COMMON/StMuMcTrack.h b/StRoot/StMuDSTMaker/COMMON/StMuMcTrack.h index 09d8dbb2760..a7ca8e76604 100644 --- a/StRoot/StMuDSTMaker/COMMON/StMuMcTrack.h +++ b/StRoot/StMuDSTMaker/COMMON/StMuMcTrack.h @@ -7,7 +7,9 @@ class StMuMcTrack : public TObject { public: enum EHIT {ktpc, ksvt, kssd, kctb, keem, kemc, kesm, kftp, kgem, khpd, kist, kigt, kfst, - kfgt, kfpd, kmwc, kpgc, kpmd, ksmd, kpix, ktof, kvpd, ktot}; + kfgt, kfpd, kmwc, kpgc, kpmd, ksmd, kpix, ktof, kvpd, + ketr, khca, kfts, keto, kstg, kwca, kpre, kepd, + ktot}; StMuMcTrack(const g2t_track_st &t); #if 0 StMuMcTrack(const g2t_track_st &t) : TObject(), mGePid(t.ge_pid), mId(t.id), mIsShower(t.is_shower), mItrmdVertex(t.itrmd_vertex_p), @@ -65,7 +67,15 @@ class StMuMcTrack : public TObject { UChar_t No_pix_hit() const {return NoHits(kpix);} /* Nhits in pix */ UChar_t No_tof_hit() const {return NoHits(ktof);} /* Nhits in tof */ UChar_t No_tpc_hit() const {return NoHits(ktpc);} /* Nhits in tpc */ - UChar_t No_vpd_hit() const {return NoHits(kvpd);} /* Nhits in vpd */ + UChar_t No_vpd_hit() const {return NoHits(kvpd);} /* Nhits in vpd */ + UChar_t No_etr_hit() const {return NoHits(ketr);} /* Nhits in etr */ + UChar_t No_hca_hit() const {return NoHits(khca);} /* Nhits in hca */ + UChar_t No_fts_hit() const {return NoHits(kfts);} /* Nhits in fts (fst) */ + UChar_t No_eto_hit() const {return NoHits(keto);} /* Nhits in eto */ + UChar_t No_stg_hit() const {return NoHits(kstg);} /* Nhits in stgc (ftt) */ + UChar_t No_wca_hit() const {return NoHits(kwca);} /* Nhits in wca */ + UChar_t No_pre_hit() const {return NoHits(kpre);} /* Nhits in pre */ + UChar_t No_epd_hit() const {return NoHits(kepd);} /* Nhits in epd */ Int_t ItrmdVertex() const {return mItrmdVertex;} /* First intermediate vertex */ Int_t IdVx () const {return mIdVx; } /* Id of start vertex of track */ Int_t IdVxEnd () const {return mIdVxEnd; } /* Id of stop vertex of this track */ @@ -94,7 +104,7 @@ class StMuMcTrack : public TObject { Float_t mpT; /* Transverse momentum */ Float_t mPtot; /* Total momentum */ Float_t mRapidity; /* Rapidity */ - ClassDef(StMuMcTrack,1) + ClassDef(StMuMcTrack,2) }; ostream& operator<<(ostream& os, StMuMcTrack const & v); #endif diff --git a/StRoot/StPicoEvent/StPicoMcTrack.h b/StRoot/StPicoEvent/StPicoMcTrack.h index f97a04cb60b..c79c9ffd7ad 100644 --- a/StRoot/StPicoEvent/StPicoMcTrack.h +++ b/StRoot/StPicoEvent/StPicoMcTrack.h @@ -46,7 +46,8 @@ class StPicoMcTrack : public TObject { enum EHIT {ktpc, ksvt, kssd, kctb, keem, kemc, kesm, kftp, kgem, khpd, kist, kigt, kfst, kfgt, kfpd, kmwc, kpgc, kpmd, ksmd, kpix, ktof, - kvpd, ktot}; + kvpd, ketr, khca, kfts, keto, kstg, kwca, + kpre, kepd, ktot}; // // Getters @@ -131,6 +132,22 @@ class StPicoMcTrack : public TObject { UChar_t nHitsTpc() const { return mHits[ktpc]; } /// Return number of hits in VPD UChar_t nHitsVpd() const { return mHits[kvpd]; } + /// Return number of hits in ETR + UChar_t nHitsEtr() const { return mHits[ketr]; } + /// Return number of hits in HCA + UChar_t nHitsHca() const { return mHits[khca]; } + /// Return number of hits in FTS + UChar_t nHitsFts() const { return mHits[kfts]; } + /// Return number of hits in ETO + UChar_t nHitsEto() const { return mHits[keto]; } + /// Return number of hits in STG + UChar_t nHitsStg() const { return mHits[kstg]; } + /// Return number of hits in WCA + UChar_t nHitsWca() const { return mHits[kwca]; } + /// Return number of hits in PRE + UChar_t nHitsPre() const { return mHits[kpre]; } + /// Return number of hits in EPD + UChar_t nHitsEpd() const { return mHits[kepd]; } /// Return particle names (GEANT ID according to GPART) const Char_t *geName(); /// Return corrected GePid (to take embedding into account) From d993d8e70481ea28b0307eea3dc8315f0cb40c3f Mon Sep 17 00:00:00 2001 From: Daniel Brandenburg Date: Wed, 14 Aug 2024 10:38:55 -0400 Subject: [PATCH 31/45] Update StEvent structs for StFttPoint StFttCluster and update StFttFastSimMaker (#698) 1. Updates StEvent containers for Ftt data (clusters and points) to include idTruth (mirror FST and FCS) 2. Update StFttFastSimMaker to copy Ftt GEANT hits to StFttCollection as StFttPoints The Fast sim just copies GEANT hits from front modules and writes them into the StFttCollection as StFttPoints (skips the entire reco chain). The "slow" sim (still WIP) will write clusters and therefore idTruth is needed there. Removed old code based on square modules (RnD geometry) and different strip layout. This also simplifies the Fwd tracking because it no longer needs to read directly from GEANT --- StRoot/StEvent/StFttCluster.h | 5 +- StRoot/StEvent/StFttPoint.h | 6 +- StRoot/StFttSimMaker/StFttFastSimMaker.cxx | 432 ++------------------- StRoot/StFttSimMaker/StFttFastSimMaker.h | 96 +---- 4 files changed, 53 insertions(+), 486 deletions(-) diff --git a/StRoot/StEvent/StFttCluster.h b/StRoot/StEvent/StFttCluster.h index 4b1b8ce6515..d478c798f32 100644 --- a/StRoot/StEvent/StFttCluster.h +++ b/StRoot/StEvent/StFttCluster.h @@ -27,6 +27,7 @@ class StFttCluster : public StObject { float sumAdc() const; float x() const; // Mean x ("center of gravity") in local grid coordinate (1st moment). float sigma() const; // Maximum 2nd moment (along major axis). + UShort_t idTruth() const { return mIdTruth; } // Get the truth ID void setId(int cluid); void setPlane(UChar_t plane); @@ -37,6 +38,7 @@ class StFttCluster : public StObject { void setSumAdc(int theSumAdc); void setX(float x0); void setSigma(float sigma); + void setIdTruth(UShort_t id) { mIdTruth = id; } StPtrVecFttRawHit& rawHits(); const StPtrVecFttRawHit& rawHits() const; @@ -62,8 +64,9 @@ class StFttCluster : public StObject { StPtrVecFttRawHit mRawHits; // Tower hits of the current cluster StPtrVecFttCluster mNeighbors; // Neighbor clusters StPtrVecFttPoint mPoints; // Fitted points (photons) in the cluster + UShort_t mIdTruth=0; // Truth ID - ClassDef(StFttCluster, 2) + ClassDef(StFttCluster, 3) }; std::ostream& operator << ( std::ostream&, const StFttCluster& clu ); // Printing operator diff --git a/StRoot/StEvent/StFttPoint.h b/StRoot/StEvent/StFttPoint.h index 71bcbd8cd79..bab29a1971f 100644 --- a/StRoot/StEvent/StFttPoint.h +++ b/StRoot/StEvent/StFttPoint.h @@ -31,6 +31,7 @@ class StFttPoint : public StObject { int nClusters() const; // Number of points in the parent cluster. StFttCluster* cluster( size_t i); // Parent cluster of the photon. const StThreeVectorD& xyz() const; // XYZ position in global STAR coordinate + UShort_t idTruth() const { return mIdTruth; } // Get the truth ID void setPlane(UChar_t plane); void setQuadrant(UChar_t quad); @@ -38,7 +39,7 @@ class StFttPoint : public StObject { void setY(float y); void addCluster(StFttCluster* cluster, UChar_t dir); void setXYZ(const StThreeVectorD& p3); - + void setIdTruth(UShort_t id) { mIdTruth = id; } void print(int option=0); @@ -49,8 +50,9 @@ class StFttPoint : public StObject { Float_t mY=0.0; // y-position in local coordinate StFttCluster *mClusters[4]; StThreeVectorD mXYZ; // Photon position in STAR coordinate + UShort_t mIdTruth=0; // Truth ID - ClassDef(StFttPoint, 1) + ClassDef(StFttPoint, 2) }; inline UChar_t StFttPoint::plane() const { return mPlane; } diff --git a/StRoot/StFttSimMaker/StFttFastSimMaker.cxx b/StRoot/StFttSimMaker/StFttFastSimMaker.cxx index da9b723f741..607a0333cfd 100644 --- a/StRoot/StFttSimMaker/StFttFastSimMaker.cxx +++ b/StRoot/StFttSimMaker/StFttFastSimMaker.cxx @@ -4,46 +4,19 @@ #include "StEvent/StEvent.h" #include "St_base/StMessMgr.h" -#include "StEvent/StRnDHit.h" -#include "StEvent/StRnDHitCollection.h" #include "StThreeVectorF.hh" -#include "TCanvas.h" -#include "TCernLib.h" -#include "TH2F.h" -#include "TLine.h" -#include "TString.h" -#include "TVector3.h" #include "tables/St_g2t_fts_hit_Table.h" -#include "tables/St_g2t_track_Table.h" -#include +#include "StEvent/StFttCollection.h" +#include "StEvent/StFttPoint.h" #include "StarGenerator/UTIL/StarRandom.h" -namespace FttGlobal { - const bool verbose = false; -} StFttFastSimMaker::StFttFastSimMaker(const Char_t *name) - : StMaker{name}, - hGlobalYX(0), - hOctantYX(0), - hOctantWireYX(0), - hOctantStripYX(0), - hWireDeltasX(0), - hWireDeltasY(0), - hStripDeltasX(0), - hStripDeltasY(0), - hWirePullsX(0), - hWirePullsY(0), - hStripPullsX(0), - hStripPullsY(0), - hPointsPullsX(0), - hPointsPullsY(0) {} + : StMaker{name} {} int StFttFastSimMaker::Init() { - iEvent = 0; - return StMaker::Init(); } @@ -58,373 +31,46 @@ Int_t StFttFastSimMaker::Make() { LOG_DEBUG << "Creating StEvent" << endm; } - if (0 == event->rndHitCollection()) { - event->setRnDHitCollection(new StRnDHitCollection()); - LOG_DEBUG << "Creating StRnDHitCollection for FTS" << endm; - } - - FillThinGapChambers(event); - iEvent++; - - return kStOk; -} - -/** - * Maps a global hit to a local coordinate system for a given quadrant - * The quadrants are numbered clockwise as: - * 0 1 - * 3 2 - * Does NOT support rotations. Maybe added later if we need to - * The coordinate system is x positive to the right and y positive up (top coords are greater than bottom coords) - */ -void StFttFastSimMaker::GlobalToLocal(float x, float y, int disk, int &quad, float &localX, float &localY) { - // quad RECT - float qr = -1; - float ql = -1; - float qb = -1; - float qt = -1; - - QuadBottomLeft(disk, 0, qb, ql); - qr = ql + STGC_QUAD_WIDTH; - qt = qb + STGC_QUAD_HEIGHT; - if (x >= ql && x < qr && y >= qb && y < qt) { - quad = 0; - localX = x - ql; - localY = y - qb; - } - - QuadBottomLeft(disk, 1, qb, ql); - qr = ql + STGC_QUAD_WIDTH; - qt = qb + STGC_QUAD_HEIGHT; - if (x >= ql && x < qr && y >= qb && y < qt) { - quad = 1; - localX = x - ql; - localY = y - qb; + if ( event->fttCollection() == nullptr ){ + LOG_INFO << "Creating FttCollection" << endm; + StFttCollection *fttcollection = new StFttCollection(); + event->setFttCollection(fttcollection); } - QuadBottomLeft(disk, 2, qb, ql); - qr = ql + STGC_QUAD_WIDTH; - qt = qb + STGC_QUAD_HEIGHT; - if (x >= ql && x < qr && y >= qb && y < qt) { - quad = 2; - localX = x - ql; - localY = y - qb; - } - QuadBottomLeft(disk, 3, qb, ql); - qr = ql + STGC_QUAD_WIDTH; - qt = qb + STGC_QUAD_HEIGHT; - if (x >= ql && x < qr && y >= qb && y < qt) { - quad = 3; - localX = x - ql; - localY = y - qb; - } - - return; -} - -float StFttFastSimMaker::DiskOffset(int disk) { - assert(disk >= 9 && disk <= 12); - if (disk == 9) - return 10; - if (disk == 10) - return 11; - if (disk == 11) - return 12; - if (disk == 12) - return 13; - return 10; -} - -float StFttFastSimMaker::DiskRotation(int disk) { - assert(disk >= 9 && disk <= 12); - // these are - if (disk == 9) - return this->sTGC_disk9_theta; - if (disk == 10) - return this->sTGC_disk10_theta; - if (disk == 11) - return this->sTGC_disk11_theta; - if (disk == 12) - return this->sTGC_disk12_theta; - return 0; -} - -void StFttFastSimMaker::QuadBottomLeft(int disk, int quad, float &bottom, float &left) { - float hbp = DiskOffset(disk); - if ( FttGlobal::verbose ) {LOG_INFO << "disk: " << disk << ", offset = " << hbp << endm;} - - // quad 0 RECT - float q0l = hbp - STGC_QUAD_WIDTH; - float q0b = hbp; - - float q1l = hbp; - float q1b = -hbp; - float q2l = -hbp; - float q2b = -hbp - STGC_QUAD_HEIGHT; - - float q3l = -hbp - STGC_QUAD_WIDTH; - float q3b = hbp - STGC_QUAD_HEIGHT; - - if (0 == quad) { - bottom = q0b; - left = q0l; - } - if (1 == quad) { - bottom = q1b; - left = q1l; + St_g2t_fts_hit *g2t_stg_hits = (St_g2t_fts_hit *)GetDataSet("geant/g2t_stg_hit"); + // size_t numFwdHitsPrior = mFwdHitsFtt.size(); + if (!g2t_stg_hits){ + LOG_WARN << "geant/g2t_stg_hit is empty" << endm; + return kStOk; } - if (2 == quad) { - bottom = q2b; - left = q2l; - } - if (3 == quad) { - bottom = q3b; - left = q3l; - } - return; -} - -/** - * Map a local coordinate back to global coords - */ -void StFttFastSimMaker::LocalToGlobal(float localX, float localY, int disk, int quad, float &globalX, float &globalY) { - // quad RECT - float qb = -1; - float ql = -1; - QuadBottomLeft(disk, quad, qb, ql); - - globalX = localX + ql; - globalY = localY + qb; - return; -} - -/** - * Checks if a vertical (face=0) and horizontal (face=1) wires are overlapping - * used for determining if ghost hits can be created from the overlapped wires - * - */ -bool StFttFastSimMaker::Overlaps(StRnDHit *hitA, StRnDHit *hitB) { - // require that they are in the same disk! - if (hitA->layer() != hitB->layer()) - return false; - int disk = hitA->layer(); - // require that they are in the same quadrant of the detector - if (hitA->wafer() != hitB->wafer()) - return false; - int quad = hitA->wafer(); - - float x1 = hitA->double2(); - float y1 = hitA->double3(); - float x2 = hitB->double2(); - float y2 = hitB->double3(); - - float b = -1, l = -1; - QuadBottomLeft(disk, quad, b, l); - - float lx1 = x1 - l; - float ly1 = y1 - b; - float lx2 = x2 - l; - float ly2 = y2 - b; - - int chunkx1 = lx1 / STGC_WIRE_LENGTH; - int chunky1 = ly1 / STGC_WIRE_LENGTH; - - int chunkx2 = lx2 / STGC_WIRE_LENGTH; - int chunky2 = ly2 / STGC_WIRE_LENGTH; - - if (chunkx1 != chunkx2) - return false; - if (chunky1 != chunky2) - return false; - return true; -} - -void StFttFastSimMaker::FillThinGapChambers(StEvent *event) { - // Read the g2t table - St_g2t_fts_hit *hitTable = static_cast(GetDataSet("g2t_stg_hit")); - if (!hitTable) { - LOG_INFO << "g2t_stg_hit table is empty" << endm; - return; - } // if !hitTable - - StRnDHitCollection *ftscollection = event->rndHitCollection(); - - std::vector hits; - - // Prepare to loop over all hits - const int nhits = hitTable->GetNRows(); - const g2t_fts_hit_st *hit = hitTable->GetTable(); - - StarRandom &rand = StarRandom::Instance(); - float dx = STGC_SIGMA_X; - float dy = STGC_SIGMA_Y; - float dz = STGC_SIGMA_Z; - - int nSTGCHits = 0; - sTGCNRealPoints = 0; - sTGCNGhostPoints = 0; - - for (int i = 0; i < nhits; i++) { - hit = (g2t_fts_hit_st *)hitTable->At(i); - if (0 == hit) + const double sigXY = 0.01; + int nstg = g2t_stg_hits->GetNRows(); + LOG_DEBUG << "This event has " << nstg << " stg hits in geant/g2t_stg_hit " << endm; + for (int i = 0; i < nstg; i++) { + g2t_fts_hit_st *git = (g2t_fts_hit_st *)g2t_stg_hits->At(i); + if (0 == git) + continue; // geant hit + int track_id = git->track_p; + int volume_id = git->volume_id; + int plane_id = (volume_id - 1) / 100; // from 1 - 16. four chambers per station + + // only use the hits on the front modules + if ( volume_id % 2 ==0 ) continue; - float xhit = hit->x[0]; - float yhit = hit->x[1]; - float zhit = hit->x[2]; - int volume_id = hit->volume_id; - // volume_id = (1 front | 2 back) + 10 * (quadrant 0-3) + 100 * (station 0-4) - int disk = ((volume_id - 1) / 100) + 9 ; - LOG_DEBUG << "sTGC hit: volume_id = " << volume_id << " disk = " << disk << endm; + float x = git->x[0] + gRandom->Gaus(0, sigXY); // 100 micron blur according to approx sTGC reso + float y = git->x[1] + gRandom->Gaus(0, sigXY); // 100 micron blur according to approx sTGC reso + float z = git->x[2]; - // Now that geometry has a front and back, we skip points on the back module for fast sim - if (disk < 9 || volume_id % 2 == 0) - continue; - - float theta = DiskRotation(disk); - - float x_blurred = xhit + rand.gauss( STGC_SIGMA_X); - float y_blurred = yhit + rand.gauss( STGC_SIGMA_Y); - - float x_rot = -999, y_rot = -999; - this->rot(-theta, x_blurred, y_blurred, x_rot, y_rot); - - int quad = -1; - float localX = -999, localY = -999; - GlobalToLocal(x_rot, y_rot, disk, quad, localX, localY); - - // not in the active region - if (quad < 0 || quad > 3) - continue; - nSTGCHits++; - - StRnDHit *ahit = new StRnDHit(); - - ahit->setPosition({x_blurred, y_blurred, zhit}); - ahit->setPositionError({dx, dy, 0.1}); - - ahit->setDouble0(xhit); - ahit->setDouble1(yhit); - ahit->setDouble2(x_rot); - ahit->setDouble3(y_rot); - - ahit->setLayer(disk); // disk mapped to layer - ahit->setLadder(2); // indicates a point - ahit->setWafer(quad); // quadrant number - - ahit->setIdTruth(hit->track_p, 0); - ahit->setDetectorId(kFtsId); // TODO: use dedicated ID for Ftt when StEvent is updated - - float Ematrix[] = { - dx * dx, 0.f, 0.f, - 0.f, dy * dy, 0.f, - 0.f, 0, 0.f, dz * dz}; - - ahit->setErrorMatrix(Ematrix); - hits.push_back(ahit); - - if (!STGC_MAKE_GHOST_HITS) { - // Make this "REAL" hit. - if (FttGlobal::verbose){ - ahit->Print(); - } - ftscollection->addHit(ahit); - sTGCNRealPoints++; - } - } - - if (STGC_MAKE_GHOST_HITS) { - for (auto &hit0 : hits) { // first loop on hits - float hit0_x = hit0->double2(); - float hit0_y = hit0->double3(); - int disk0 = hit0->layer(); - int quad0 = hit0->wafer(); - float theta = DiskRotation(disk0); - - for (auto &hit1 : hits) { // second loop on hits - float hit1_x = hit1->double2(); - float hit1_y = hit1->double3(); - int disk1 = hit1->layer(); - int quad1 = hit1->wafer(); - - if (disk0 != disk1) - continue; - if (quad0 != quad1) - continue; - - // check on overlapping segments - if (false == Overlaps(hit0, hit1)) - continue; - - float x = hit0_x; - float y = hit1_y; - - int qaTruth = 0; - int idTruth = 0; - if (hit1_x == hit0_x && hit1_y == hit0_y) { - sTGCNRealPoints++; - qaTruth = 1; - idTruth = hit0->idTruth(); - } else { - sTGCNGhostPoints++; - qaTruth = 0; - } - - float rx = -999, ry = -999; - this->rot(theta, x, y, rx, ry); - // the trick here is that rotations (in 2D) will commute - // so the earlier -theta rotation and this +theta - // rotation cancel for real hits - // but not so for ghost hits - - StRnDHit *ahit = new StRnDHit(); - - ahit->setPosition({rx, ry, hit0->position().z()}); - ahit->setPositionError({dx, dy, 0.1}); - - ahit->setDouble0(hit0_x); - ahit->setDouble1(hit0_y); - ahit->setDouble2(hit1_x); - ahit->setDouble3(hit1_y); - - ahit->setLayer(disk0); // disk mapped to layer - ahit->setLadder(2); // indicates a point - ahit->setWafer(quad0); // quadrant number - - ahit->setIdTruth(idTruth, qaTruth); - ahit->setDetectorId(kFtsId); // TODO: use dedicated ID for Ftt when StEvent is updated - - float Ematrix[] = { - dx * dx, 0.f, 0.f, - 0.f, dy * dy, 0.f, - 0.f, 0, 0.f, dz * dz}; - ahit->setErrorMatrix(Ematrix); - ftscollection->addHit(ahit); - - } // loop hit1 - } // loop hit0 - - - // in this case the hits used in the original array were not saved, but copied so we need to delete them - - for ( size_t i = 0; i < hits.size(); i++ ){ - delete hits[i]; - hits[i] = nullptr; - } - } // make Ghost Hits - - if (FttGlobal::verbose) { - LOG_INFO << "nHits (all FTS) = " << nhits << endm; - } - if (FttGlobal::verbose) { - LOG_INFO << "nSTGC = " << nSTGCHits << endm; - } - if (FttGlobal::verbose) { - LOG_INFO << "nReal = " << sTGCNRealPoints << endm; - } - if (FttGlobal::verbose) { - LOG_INFO << "nGhost = " << sTGCNGhostPoints << endm; - } - -} // fillThinGap + StFttPoint *point = new StFttPoint(); + point->setPlane(plane_id); + point->setQuadrant(0); // TODO this could be improved, but it is not used in the current implementation + StThreeVectorD xyz; + xyz.set(x, y, z); + point->setXYZ( xyz ); + point->setIdTruth( track_id ); + event->fttCollection()->addPoint(point); + } // loop on hits + return kStOk; +} diff --git a/StRoot/StFttSimMaker/StFttFastSimMaker.h b/StRoot/StFttSimMaker/StFttFastSimMaker.h index 5a5fe10a7d4..7b10bfc9ccd 100644 --- a/StRoot/StFttSimMaker/StFttFastSimMaker.h +++ b/StRoot/StFttSimMaker/StFttFastSimMaker.h @@ -1,10 +1,6 @@ -#ifndef ST_FTT_FAST_SIM_MAKER_H -#define ST_FTT_FAST_SIM_MAKER_H - -class g2t_emc_hit_st; -class StFtsHit; -class StEvent; +#ifndef ST_FTT_FASTER_SIM_MAKER_H +#define ST_FTT_FASTER_SIM_MAKER_H #include "StChain/StMaker.h" #include @@ -14,99 +10,19 @@ class StEvent; #include "TH2F.h" #include "TNtuple.h" -class StRnDHit; class StFttFastSimMaker : public StMaker { public: - explicit StFttFastSimMaker(const Char_t *name = "fttSim"); - virtual ~StFttFastSimMaker() {} + StFttFastSimMaker(const Char_t *name = "fttSim"); + ~StFttFastSimMaker() {} Int_t Make(); int Init(); int Finish() { return kStOk; } - virtual const char *GetCVS() const; - - void SetDiskRotation(int disk, float degrees) { - - const float deg_to_radians = 0.017453292f; // = 3.1415926 / 180.0; - if (9 == disk) - sTGC_disk9_theta = degrees * deg_to_radians; - else if (10 == disk) - sTGC_disk10_theta = degrees * deg_to_radians; - else if (11 == disk) - sTGC_disk11_theta = degrees * deg_to_radians; - else if (12 == disk) - sTGC_disk12_theta = degrees * deg_to_radians; - return; - } - - private: - void FillThinGapChambers(StEvent *event); - - int iEvent; - - TH2F *hGlobalYX; - TH2F *hOctantYX; - - TH2F *hOctantWireYX; - TH2F *hOctantStripYX; - - TH2F *hWireDeltasX; - TH2F *hWireDeltasY; - TH2F *hStripDeltasX; - TH2F *hStripDeltasY; - - TH2F *hWirePullsX; - TH2F *hWirePullsY; - TH2F *hStripPullsX; - TH2F *hStripPullsY; - - TH2F *hPointsPullsX; - TH2F *hPointsPullsY; - - //table to keep pointer to hit for each disc, r & phi strips - - // convert x, y to quandrant and local X, Y - // quadrants are - // 0 1 - // 3 2 - void GlobalToLocal(float x, float y, int disk, int &quad, float &localX, float &localY); - void LocalToGlobal(float localX, float localY, int disk, int quad, float &globalX, float &globalY); - bool Overlaps(StRnDHit *hitA, StRnDHit *hitB); - void QuadBottomLeft(int disk, int quad, float &bottom, float &left); - float DiskOffset(int disk); - float DiskRotation(int disk); - - void rot(float theta, float x, float y, float &xp, float &yp) { - xp = x * cos(theta) - y * sin(theta); - yp = x * sin(theta) + y * cos(theta); - } - - const double STGC_BEAM_CUT_OUT = 6.0; // cm - const double STGC_QUAD_WIDTH = 60.0; // cm - const double STGC_QUAD_HEIGHT = 60.0; // cm - const double STGC_WIRE_WIDTH = 0.32; // cm - const double STGC_SIGMA_X = 0.01; // 100 microns - const double STGC_SIGMA_Y = 0.01; // 100 microns - const double STGC_SIGMA_Z = 0.001; // 10 microns - const double STGC_WIRE_LENGTH = 15.0; // cm - const bool STGC_MAKE_GHOST_HITS = true; //should be moved to run-time opt - - float sTGC_disk9_theta = 0.0f; - float sTGC_disk10_theta = 0.0f; - float sTGC_disk11_theta = 0.0f; - float sTGC_disk12_theta = 0.0f; - - int sTGCNRealPoints = 0; - int sTGCNGhostPoints = 0; - ClassDef(StFttFastSimMaker, 0) + ClassDef(StFttFastSimMaker, 0); }; -inline const char *StFttFastSimMaker::GetCVS() const { - static const char cvs[] = "Tag $Name: $ $Id: StFttFastSimMaker.h,v 1.1 2021/03/26 14:11:40 jdb Exp $ built " __DATE__ " " __TIME__; - return cvs; -} -#endif +#endif \ No newline at end of file From bb541ed45f3b1e4aef3c0a63920f45dfa25810c7 Mon Sep 17 00:00:00 2001 From: Gene Van Buren <85305093+genevb@users.noreply.github.com> Date: Fri, 16 Aug 2024 22:52:56 -0400 Subject: [PATCH 32/45] Look for local StEvent enumerations first (#705) Even though STAR is winding down, there is still some development work ongoing involving FWD detectors. I believe the parsing of StEnumerations.h within StEnumerations.cxx may be making it a little difficult for them because it does not currently allow for a local (developmental) version of enumerations. This PR modified that with a local search first, and hopefully that helps them out. Note that the parsing is done at run-time, so even with this patch, test jobs need to have not just the compiled code where the job runs, they need also have a local StRoot/StEvent/StEnumerations.h present where the job runs. p.s. I meant to include @dkapukchyan as a reviewer, but it seems he doesn't show up as someone I can add. --- StRoot/StEvent/StEnumerations.cxx | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/StRoot/StEvent/StEnumerations.cxx b/StRoot/StEvent/StEnumerations.cxx index 74d04716286..c79c958910c 100644 --- a/StRoot/StEvent/StEnumerations.cxx +++ b/StRoot/StEvent/StEnumerations.cxx @@ -19,11 +19,15 @@ void detectorId(int *ids=0, char** cds=0) memset(ids,0,sizeof(ids[0])*100); memset(cds,0,sizeof(cds[0])*100); - TString myPath("$STAR/StRoot/StEvent/StEnumerations.h"); - gSystem->ExpandPathName(myPath); - + // Look for local enumerations (when developing) before global + TString myPath("./StRoot/StEvent/StEnumerations.h"); int notExi = gSystem->AccessPathName(myPath.Data(),kFileExists); - if (notExi) { ids[0]=-1; return;} + if (notExi) { + myPath = "$STAR/StRoot/StEvent/StEnumerations.h"; + gSystem->ExpandPathName(myPath); + notExi = gSystem->AccessPathName(myPath.Data(),kFileExists); + if (notExi) { ids[0]=-1; return;} + } FILE *fp = fopen(myPath.Data(),"r"); if (!fp) { ids[0]=-1; return;} char buf[400]; From 6ceac9b54a9850a6d33eb32c94e042a95efae3b3 Mon Sep 17 00:00:00 2001 From: Yuri Fisyak Date: Thu, 22 Aug 2024 07:33:53 -0400 Subject: [PATCH 33/45] Eliminte HitFilt from production chains aas obsolete (#709) By Frank request create a separate request for eliminate obsolete option HitFilt from production chains. --- StRoot/StBFChain/BigFullChain.h | 184 ++++++++++++++++---------------- 1 file changed, 93 insertions(+), 91 deletions(-) diff --git a/StRoot/StBFChain/BigFullChain.h b/StRoot/StBFChain/BigFullChain.h index edcbc8babfa..e467550a794 100644 --- a/StRoot/StBFChain/BigFullChain.h +++ b/StRoot/StBFChain/BigFullChain.h @@ -61,10 +61,10 @@ Bfc_st BFC[] = { // standard chains {"Geometry ","-----------","-----------","------------------------------------------","","","",kFALSE}, {"------------","-----------","-----------","------------------------------------------","","","",kFALSE}, #ifdef __AgMLonFly__ - {"ideal", "", "","", "", "", "Ideal Alignment", kFALSE}, - {"misalign", "", "","", "","-AgMLideal", "Misaligned Geometry", kFALSE}, - {"AgMLutil", "", "","", "","StarAgmlUtil", "AgML support", kFALSE}, - {"AgMLlib", "", "","", "","StarAgmlUtil,StarAgmlLib", "AgML support", kFALSE}, + {"ideal", "", "","", "", "", "Ideal Alignment", kFALSE}, + {"misalign", "", "","", "","-AgMLideal", "Misaligned Geometry", kFALSE}, + {"AgMLutil", "", "","", "","StarAgmlUtil", "AgML support", kFALSE}, + {"AgMLlib", "", "","", "","StarAgmlUtil,StarAgmlLib", "AgML support", kFALSE}, {"AgML" ,"" ,"","AgMLlib,-Agi,-VmcGeo","","Geometry,StarGeometry" , "Alias VmcGeometry to AgiLGeometry",kFALSE}, #else /* __AgMLonFly__ */ @@ -100,7 +100,7 @@ Bfc_st BFC[] = { // standard chains {"Test.default.StiVMC","","","TpcRS,Simu,sss,svt,ssd,fss,bbcSim,IdTruth,MakeEvent," "miniMcMk,McAna,Test.reco.StiVMC,CMuDst" ,"","","",kFALSE}, {"Test.StiVMC","","","TpcRS,StiVMC,event,analysis,tags,EvOut,StarMagField,FieldOn,Idst,CMuDst" - , "","","",kFALSE}, + , "","","",kFALSE}, {"Test.VeryFast.StiVMC","","","TpcFastSim,Simu,sfs,ssdfast,McEvOut,GeantOut,IdTruth,miniMcMk,McAna," "SvtCL,tpc_T,globT,tls,db,tpcDB,svtDb,svtIT,ssdIT,StiVMC,Idst,event,analysis,EventQA,tags," "EvOut,StarMagField,FieldOn,IAna,CMuDst" ,"","","",kFALSE}, @@ -213,9 +213,9 @@ Bfc_st BFC[] = { // standard chains , "","","",kFALSE}, {"RC.pp.y2005" ,"","","pp2005a,tofdat,OSpaceZ2,OGridLeak3D" ,"","","",kFALSE}, {"RC.pp.y2006" ,"","","pp2006b,OSpaceZ2,OGridLeak3D" ,"","","",kFALSE}, - {"RC.y2007" ,"","","DbV20080418,B2007g,IAna,KeepSvtHit,hitfilt,VFMinuit3,emcDY2,ftpc,trgd," + {"RC.y2007" ,"","","DbV20080418,B2007g,IAna,VFMinuit3,emcDY2,ftpc,trgd," "ZDCvtx,svtIT,ssdIT,Corr4,OSpaceZ2,OGridLeak3D" ,"","","",kFALSE}, - {"RC.y2007.NoSvt" ,"","","DbV20080418,B2007g,IAna,KeepSvtHit,hitfilt,VFMinuit3,emcDY2,ftpc," + {"RC.y2007.NoSvt" ,"","","DbV20080418,B2007g,IAna,VFMinuit3,emcDY2,ftpc," "trgd,ZDCvtx,Corr4,OSpaceZ2,OGridLeak3D" ,"","","",kFALSE}, {"RC.y2008" ,"","","DbV20080712,P2008,OSpaceZ2,OGridLeak3D,beamLine" ,"","","",kFALSE}, {"RC.y2008.notof" ,"","","DbV20080712,P2008,-ToF,-tofDat,-tofrMatch,-tofpMatch,-tofCalib,OSpaceZ2," @@ -231,37 +231,37 @@ Bfc_st BFC[] = { // standard chains , "","","",kFALSE}, {"RC.y2010" ,"","","P2010a,BEmcChkStat,btof,Corr4,OSpaceZ2,OGridLeak3D,pmdReco", "","","",kFALSE}, {"RC.y2010.notof" ,"","","P2010a,BEmcChkStat,Corr4,OSpaceZ2,OGridLeak3D" ,"","","",kFALSE}, - {"RC.pp.y2011.VFPPV","","","pp2011a,VFPPVnoCTB,beamline,BEmcChkStat,btof,Corr4,OSpaceZ2,OGridLeak3D," - "-hitfilt" ,"","","",kFALSE}, - {"RC.pp.y2011","","","pp2011a,VFMinuit,beamline,BEmcChkStat,btof,Corr4,OSpaceZ2,OGridLeak3D,-hitfilt" + {"RC.pp.y2011.VFPPV","","","pp2011a,VFPPVnoCTB,beamline,BEmcChkStat,btof,Corr4,OSpaceZ2,OGridLeak3D" + , "","","",kFALSE}, + {"RC.pp.y2011","","","pp2011a,VFMinuit,beamline,BEmcChkStat,btof,Corr4,OSpaceZ2,OGridLeak3D" , "","","",kFALSE}, - {"RC.y2011" ,"","","P2011a,BEmcChkStat,btof,Corr4,OSpaceZ2,OGridLeak3D,-hitfilt,pmdReco,mtdDat" + {"RC.y2011" ,"","","P2011a,BEmcChkStat,btof,Corr4,OSpaceZ2,OGridLeak3D,pmdReco,mtdDat" , "","","",kFALSE}, - {"RC.y2011.notof" ,"","","P2011a,BEmcChkStat,Corr4,OSpaceZ2,OGridLeak3D,-hitfilt,pmdReco,mtdDat" + {"RC.y2011.notof" ,"","","P2011a,BEmcChkStat,Corr4,OSpaceZ2,OGridLeak3D,pmdReco,mtdDat" , "","","",kFALSE}, - {"RC.y2012" ,"","","P2012a,BEmcChkStat,btof,Corr4,OSpaceZ2,OGridLeak3D,-hitfilt,mtdDat,fmsDat" + {"RC.y2012" ,"","","P2012a,BEmcChkStat,btof,Corr4,OSpaceZ2,OGridLeak3D,mtdDat,fmsDat" , "","","",kFALSE}, - {"RC.y2012.notof" ,"","","P2012a,BEmcChkStat,Corr4,OSpaceZ2,OGridLeak3D,-hitfilt", "","","",kFALSE}, + {"RC.y2012.notof" ,"","","P2012a,BEmcChkStat,Corr4,OSpaceZ2,OGridLeak3D", "","","",kFALSE}, {"RC.pp.y2012" ,"","","pp2012a,VFPPVnoCTB,beamline,BEmcChkStat,btof,Corr4,OSpaceZ2,OGridLeak3D," - "-hitfilt,mtdDat,fmsDat", "","","",kFALSE}, + "mtdDat,fmsDat", "","","",kFALSE}, {"RC.pp.y2012.notof","","","pp2012a,VFPPVnoCTB,beamline,BEmcChkStat,Corr4,OSpaceZ2,OGridLeak3D," - "-hitfilt", "","","",kFALSE}, + "", "","","",kFALSE}, {"RC.pp.y2012.notofMin","","","pp2012a,VFMinuit,beamline,BEmcChkStat,Corr4,OSpaceZ2,OGridLeak3D" - ",-hitfilt", "","","",kFALSE}, - {"RC.y2012b" ,"","","P2012b,BEmcChkStat,btof,Corr4,OSpaceZ2,OGridLeak3D,-hitfilt,mtdDat,fmsDat" + "", "","","",kFALSE}, + {"RC.y2012b" ,"","","P2012b,BEmcChkStat,btof,Corr4,OSpaceZ2,OGridLeak3D,mtdDat,fmsDat" , "","","",kFALSE}, - {"RC.y2012b.notof" ,"","","P2012b,BEmcChkStat,Corr4,OSpaceZ2,OGridLeak3D,-hitfilt", "","","",kFALSE}, + {"RC.y2012b.notof" ,"","","P2012b,BEmcChkStat,Corr4,OSpaceZ2,OGridLeak3D", "","","",kFALSE}, {"RC.pp.y2012b" ,"","","pp2012b,VFPPVnoCTB,beamline,BEmcChkStat,btof,Corr4,OSpaceZ2,OGridLeak3D," - "-hitfilt,mtdDat,fmsDat", "","","",kFALSE}, + "mtdDat,fmsDat", "","","",kFALSE}, {"RC.pp.y2012b.notof","","","pp2012b,VFPPVnoCTB,beamline,BEmcChkStat,Corr4,OSpaceZ2,OGridLeak3D" - ",-hitfilt", "","","",kFALSE}, + "", "","","",kFALSE}, {"RC.pp.y2012b.notofMin","","","pp2012b,VFMinuit,beamline,BEmcChkStat,Corr4,OSpaceZ2,OGridLeak3D" - ",-hitfilt", "","","",kFALSE}, + "", "","","",kFALSE}, {"RC.pp.y2012b.notofMin","","","pp2012b,VFMinuit,beamline,BEmcChkStat,Corr4,OSpaceZ2,OGridLeak3D" - ",-hitfilt", "","","",kFALSE}, + "", "","","",kFALSE}, {"RC.pp.y2013","","","pp2013a,mtd,btof,fmsDat,fgt,fgtPoint,VFPPVnoCTB,beamline,BEmcChkStat,Corr4," - "OSpaceZ2,OGridLeak3D,-hitfilt", "","","",kFALSE}, - {"RC.y2014","","","P2014a,mtd,btof,BEmcChkStat,Corr4,OSpaceZ2,OGridLeak3D,-hitfilt", "","","",kFALSE}, + "OSpaceZ2,OGridLeak3D", "","","",kFALSE}, + {"RC.y2014","","","P2014a,mtd,btof,BEmcChkStat,Corr4,OSpaceZ2,OGridLeak3D", "","","",kFALSE}, {"MC nightlies and Eval","--","-----------","------------------------------------------","","","",kFALSE}, {"test_MC.stan.y2000","","","MC.y2000,Sti,fzin,MiniMcMk","","" @@ -743,18 +743,18 @@ Bfc_st BFC[] = { // standard chains {"B2007g","","","ry2007g,MakeEvent,in,tpc_daq,tpcI,fcf,svt_daq,SvtD,ssddat,sptd,Idst,tags,Tree,evout" , "","","Base chain for 2007 ITTF geo g (tpc+svt+ssd)",kFALSE}, {"P2007" ,"" ,"", - "B2007,IAna,KeepSvtHit,hitfilt,VFMinuit,emcDY2,ftpc,trgd,ZDCvtx,svtIT,ssdIT,Corr5" + "B2007,IAna,VFMinuit,emcDY2,ftpc,trgd,ZDCvtx,svtIT,ssdIT,Corr5" , "","","Production chain for 2007 data (+ l3, tof, ftpc, e/b-emc, trgd)",kFALSE}, {"P2007g" ,"" ,"", // chain was set in 2008 to account for missing material - "B2007g,IAna,KeepSvtHit,hitfilt,VFMinuit2,emcDY2,ftpc,trgd,ZDCvtx,svtIT,ssdIT,Corr5" + "B2007g,IAna,VFMinuit2,emcDY2,ftpc,trgd,ZDCvtx,svtIT,ssdIT,Corr5" , "","","Production chain for 2007 data, revised 2008 (+ l3, tof, ftpc, e/b-emc, trgd)",kFALSE}, // startup for calib {"P2007a" ,"" ,"", - "B2007,IAna,KeepSvtHit,hitfilt,VFMinuit,emcDY2,ftpc,trgd,ZDCvtx,svtIT,ssdIT,Corr3" + "B2007,IAna,VFMinuit,emcDY2,ftpc,trgd,ZDCvtx,svtIT,ssdIT,Corr3" , "","","Production chain for 2007 data Corr3 (+ l3, tof, ftpc, e/b-emc, trgd)",kFALSE}, {"P2007b" ,"" ,"", - "B2007,IAna,KeepSvtHit,hitfilt,VFMinuit,emcDY2,ftpc,trgd,ZDCvtx,svtIT,ssdIT,Corr4" + "B2007,IAna,VFMinuit,emcDY2,ftpc,trgd,ZDCvtx,svtIT,ssdIT,Corr4" , "","","Production chain for 2007 data Corr4 (+ l3, tof, ftpc, e/b-emc, trgd)",kFALSE}, {"B2008" ,"","","ry2008,in,tpc_daq,tpcI,fcf,Idst,tags,Tree,evout","","" , "Base chain for 2008 ITTF (tpc)",kFALSE}, @@ -762,27 +762,27 @@ Bfc_st BFC[] = { // standard chains , "Base chain for 2008 ITTF (tpc+tof)",kFALSE}, // startup for calib {"P2008a" ,"" ,"", - "B2008,IAna,hitfilt,VFMinuit,emcDY2,ftpc,trgd,ZDCvtx,NosvtIT,NossdIT,Corr3,analysis" + "B2008,IAna,VFMinuit,emcDY2,ftpc,trgd,ZDCvtx,NosvtIT,NossdIT,Corr3,analysis" , "","","Production chain for 2008 data Corr3 (+ l3, tof, ftpc, e/b-emc, trgd)",kFALSE}, {"P2008b" ,"" ,"", - "B2008,IAna,hitfilt,VFMinuit,emcDY2,ftpc,trgd,ZDCvtx,NosvtIT,NossdIT,Corr4,analysis" + "B2008,IAna,VFMinuit,emcDY2,ftpc,trgd,ZDCvtx,NosvtIT,NossdIT,Corr4,analysis" , "","","Production chain for 2008 data Corr4 (+ l3, tof, ftpc, e/b-emc, trgd)",kFALSE}, // or VFPPVnoCTB {"pp2008a" ,"" ,"", - "B2008,IAna,hitfilt,ppOpt,VFMinuit,emcDY2,ftpc,trgd,ZDCvtx,NosvtIT,NossdIT,Corr4,analysis" + "B2008,IAna,ppOpt,VFMinuit,emcDY2,ftpc,trgd,ZDCvtx,NosvtIT,NossdIT,Corr4,analysis" , "","","Production chain for 2008 data Corr3 (+ l3, tof, ftpc, e/b-emc, trgd)",kFALSE}, {"P2008c" ,"" ,"", // ATTENTION: the below chain was used for preliminary results on low energy - "B2008,IAna,hitfilt,VFMinuit,emcDY2,ftpc,trgd,ZDCvtx,NosvtIT,NossdIT,Corr4,analysis" + "B2008,IAna,VFMinuit,emcDY2,ftpc,trgd,ZDCvtx,NosvtIT,NossdIT,Corr4,analysis" , "","","Production chain for 2008 data (+ l3, tof, ftpc, e/b-emc, trgd)",kFALSE}, {"pp2008c" ,"" ,"", // Note: this chain was not used and may be removed - "B2008,IAna,hitfilt,ppOpt,Minuit,emcDY2,ftpc,trgd,ZDCvtx,NosvtIT,NossdIT,Corr4,analysis" + "B2008,IAna,ppOpt,Minuit,emcDY2,ftpc,trgd,ZDCvtx,NosvtIT,NossdIT,Corr4,analysis" , "","","Production chain for 2008 data Corr4 (+ l3, tof, ftpc, e/b-emc, trgd)",kFALSE}, // convergence chains {"pp2008" ,"" ,"", // VFPPV was chosen for p+p as final production chain - "B2008a,IAna,hitfilt,ppOpt,VFPPV,emcDY2,ftpc,trgd,ZDCvtx,NosvtIT,NossdIT,Corr4,analysis" + "B2008a,IAna,ppOpt,VFPPV,emcDY2,ftpc,trgd,ZDCvtx,NosvtIT,NossdIT,Corr4,analysis" , "","","Production chain for 2008 data Corr3 (+ l3, tof, ftpc, e/b-emc, trgd)",kFALSE}, {"P2008" ,"" ,"", // this one is final and official production ready, June 2008 - "B2008a,IAna,hitfilt,VFMinuit,emcDY2,ftpc,trgd,ZDCvtx,NosvtIT,NossdIT,Corr4,analysis" + "B2008a,IAna,VFMinuit,emcDY2,ftpc,trgd,ZDCvtx,NosvtIT,NossdIT,Corr4,analysis" , "","","Production chain for 2008 data (+ l3, tof, ftpc, e/b-emc, trgd)",kFALSE}, // @@ -797,16 +797,16 @@ Bfc_st BFC[] = { // standard chains , "Base chain for 2009 ITTF (tpc)",kFALSE}, {"pp2009a" ,"" ,"", - "B2009.1,IAna,hitfilt,ppOpt,VFMinuit,emcDY2,ftpc,trgd,ZDCvtx,NosvtIT,NossdIT,analysis" + "B2009.1,IAna,ppOpt,VFMinuit,emcDY2,ftpc,trgd,ZDCvtx,NosvtIT,NossdIT,analysis" , "","","Production chain for 2009 data - no Corr (+ l3, ftpc, e/b-emc, trgd)",kFALSE}, {"pp2009b" ,"" ,"", - "B2009.1,IAna,hitfilt,ppOpt,VFMinuit,emcDY2,ftpc,ZDCvtx,NosvtIT,NossdIT,analysis" + "B2009.1,IAna,ppOpt,VFMinuit,emcDY2,ftpc,ZDCvtx,NosvtIT,NossdIT,analysis" , "","","Production chain for 2009 data - no Corr (+ l3, ftpc, e/b-emc, no trigger)",kFALSE}, {"pp2009c" ,"" ,"", - "B2009.2,BAna,hitfilt,ppOpt,emcDY2,ftpc,trgd,ZDCvtx,NosvtIT,NossdIT,analysis","","" + "B2009.2,BAna,ppOpt,emcDY2,ftpc,trgd,ZDCvtx,NosvtIT,NossdIT,analysis","","" , "Production chain for 2009 data - no Corr, no VF (+l3, ftpc, e/b-emc, trig)",kFALSE}, {"pp2009d" ,"" ,"", - "B2009.3,BAna,hitfilt,ppOpt,emcDY2,ftpc,trgd,ZDCvtx,NosvtIT,NossdIT,analysis","","" + "B2009.3,BAna,ppOpt,emcDY2,ftpc,trgd,ZDCvtx,NosvtIT,NossdIT,analysis","","" , "Production chain for 2009 data - no Corr, no VF (+l3, ftpc, e/b-emc, trig)",kFALSE}, @@ -816,17 +816,17 @@ Bfc_st BFC[] = { // standard chains {"B2010c","","","ry2010c,in,tpcX,ITTF,tpcDB,TpcHitMover,Idst,tags,Tree,evout","","" , "Base chain for 2010 ITTF (tpc)",kFALSE}, - {"P2010a","" ,"", // initial chain - Add some to all of BEmcChkStat,QAalltrigs,trgd,btof,Corr3,-hitfilt - "B2010,BAna,hitfilt,VFMinuit,emcDY2,ftpc,trgd,ZDCvtx,NosvtIT,NossdIT,analysis" + {"P2010a","" ,"", // initial chain - Add some to all of BEmcChkStat,QAalltrigs,trgd,btof,Corr3 + "B2010,BAna,VFMinuit,emcDY2,ftpc,trgd,ZDCvtx,NosvtIT,NossdIT,analysis" , "","","Production chain for 2010 data - no Corr (+ l3, ftpc, e/b-emc)",kFALSE}, - {"pp2010a","" ,"", // initial chain - Add some to all of BEmcChkStat,QAalltrigs,trgd,btof,Corr3,-hitfilt,VFPPVnoCTB - "B2010,BAna,hitfilt,ppOpt,emcDY2,trgd,ftpc,ZDCvtx,NosvtIT,NossdIT,analysis" + {"pp2010a","" ,"", // initial chain - Add some to all of BEmcChkStat,QAalltrigs,trgd,btof,Corr3,VFPPVnoCTB + "B2010,BAna,ppOpt,emcDY2,trgd,ftpc,ZDCvtx,NosvtIT,NossdIT,analysis" , "","","Production chain for 2010 data - no Corr (+ l3, ftpc, e/b-emc, no VF)",kFALSE}, {"P2010c","" ,"", // use of y2010c geometry - "B2010c,BAna,hitfilt,VFMinuit,emcDY2,ftpc,trgd,ZDCvtx,NosvtIT,NossdIT,analysis" + "B2010c,BAna,VFMinuit,emcDY2,ftpc,trgd,ZDCvtx,NosvtIT,NossdIT,analysis" , "","","Production chain for 2010 data - no Corr (+ l3, ftpc, e/b-emc)",kFALSE}, {"pp2010c","" ,"", // use of y2010c geometry - "B2010c,BAna,hitfilt,ppOpt,emcDY2,trgd,ftpc,ZDCvtx,NosvtIT,NossdIT,analysis" + "B2010c,BAna,ppOpt,emcDY2,trgd,ftpc,ZDCvtx,NosvtIT,NossdIT,analysis" , "","","Production chain for 2010 data - no Corr (+ l3, ftpc, e/b-emc, no VF)",kFALSE}, @@ -834,31 +834,31 @@ Bfc_st BFC[] = { // standard chains {"B2011","","","ry2011,in,tpcX,ITTF,tpcDB,TpcHitMover,Idst,tags,Tree,evout","","" , "Base chain for 2011 ITTF (tpc)",kFALSE}, - {"P2011a","" ,"", // initial chain - Add some to all of BEmcChkStat,QAalltrigs,trgd,btof,Corr3,-hitfilt - "B2011,BAna,hitfilt,VFMinuit,emcDY2,ftpc,trgd,ZDCvtx,NosvtIT,NossdIT,analysis" + {"P2011a","" ,"", // initial chain - Add some to all of BEmcChkStat,QAalltrigs,trgd,btof,Corr3 + "B2011,BAna,VFMinuit,emcDY2,ftpc,trgd,ZDCvtx,NosvtIT,NossdIT,analysis" , "","","Production chain for 2011 data - no Corr (+ l3, ftpc, e/b-emc)",kFALSE}, - {"pp2011a","" ,"", // initial chain - Add some to all of BEmcChkStat,QAalltrigs,btof,Corr3,-hitfilt,VFPPVnoCTB - "B2011,BAna,hitfilt,ppOpt,emcDY2,trgd,ftpc,ZDCvtx,NosvtIT,NossdIT,analysis" + {"pp2011a","" ,"", // initial chain - Add some to all of BEmcChkStat,QAalltrigs,btof,Corr3,VFPPVnoCTB + "B2011,BAna,ppOpt,emcDY2,trgd,ftpc,ZDCvtx,NosvtIT,NossdIT,analysis" , "","","Production chain for 2011 data - no Corr (+ l3, ftpc, e/b-emc, no VF)",kFALSE}, // chains for year 12 {"B2012","","","ry2012,in,tpcX,ITTF,tpcDB,TpcHitMover,Idst,tags,Tree,evout","","" , "Base chain for 2012 ITTF (tpc)",kFALSE}, - {"pp2012a","" ,"","B2012,BAna,hitfilt,ppOpt,emcDY2,trgd,ZDCvtx,NosvtIT,NossdIT,analysis" + {"pp2012a","" ,"","B2012,BAna,ppOpt,emcDY2,trgd,ZDCvtx,NosvtIT,NossdIT,analysis" , "","", "Production chain for 2012 data - no Corr (+ l3, e/b-emc, no VF)",kFALSE}, {"P2012a","" ,"", - "B2012,BAna,hitfilt,VFMinuit,emcDY2,trgd,ZDCvtx,NosvtIT,NossdIT,analysis" + "B2012,BAna,VFMinuit,emcDY2,trgd,ZDCvtx,NosvtIT,NossdIT,analysis" , "","","Production chain for 2011 data - no Corr (+ l3, e/b-emc)",kFALSE}, {"B2012b","","","ry2012a,in,tpcX,ITTF,tpcDB,TpcHitMover,Idst,tags,Tree,evout","","" , "Base chain for 2012 ITTF (tpc)",kFALSE}, {"pp2012b","" ,"", - "B2012b,BAna,hitfilt,ppOpt,emcDY2,trgd,ZDCvtx,NosvtIT,NossdIT,analysis" + "B2012b,BAna,ppOpt,emcDY2,trgd,ZDCvtx,NosvtIT,NossdIT,analysis" , "","", "Production chain for 2012 data - no Corr (+ l3, e/b-emc, no VF)",kFALSE}, {"P2012b","" ,"", - "B2012b,BAna,hitfilt,VFMinuit,emcDY2,trgd,ZDCvtx,NosvtIT,NossdIT,analysis" + "B2012b,BAna,VFMinuit,emcDY2,trgd,ZDCvtx,NosvtIT,NossdIT,analysis" , "","","Production chain for 2011 data - no Corr (+ l3, e/b-emc)",kFALSE}, // Year 13 chains {"B2013","","","in,tpcX,UseXgeom,ITTF,NosvtIT,NossdIT,tpcDB,TpcHitMover,Idst,tags,Tree,evout," @@ -873,15 +873,15 @@ Bfc_st BFC[] = { // standard chains , "Base chain for 2013 ITTF (tpc)",kFALSE}, {"pp2013a","" ,"", - "B2013_c2,ITTF,UseXgeom,BAna,hitfilt,ppOpt,emcDY2,trgd,ZDCvtx,NosvtIT,NossdIT,analysis", + "B2013_c2,ITTF,UseXgeom,BAna,ppOpt,emcDY2,trgd,ZDCvtx,NosvtIT,NossdIT,analysis", "","", "Production chain for 2013 data - no Corr (+ l3, e/b-emc, no VF)",kFALSE}, {"pp2013b","" ,"", - "B2013_c1,ITTF,UseXgeom,BAna,hitfilt,ppOpt,emcDY2,trgd,ZDCvtx,NosvtIT,NossdIT,analysis" + "B2013_c1,ITTF,UseXgeom,BAna,ppOpt,emcDY2,trgd,ZDCvtx,NosvtIT,NossdIT,analysis" , "","", "Production chain for 2013 data - no Corr (+ l3, e/b-emc, no VF)",kFALSE}, // option is bare, no tracker and no Geom {"pp2013","" ,"", - "BAna,hitfilt,ppOpt,emcDY2,trgd,ZDCvtx,NosvtIT,NossdIT,analysis" + "BAna,ppOpt,emcDY2,trgd,ZDCvtx,NosvtIT,NossdIT,analysis" , "","", "Production chain for 2013 data - no Corr (+ l3, e/b-emc, no VF)",kFALSE}, // Year 14 chains {"B2014" ,"","","ry2014,in,tpcX,AgML,tpcDB,TpcHitMover,Idst,tags,Tree,evout","","" @@ -890,12 +890,12 @@ Bfc_st BFC[] = { // standard chains , "Base chain for 2014a ITTF (tpc)",kFALSE}, {"P2014","" ,"", - "B2014,ITTF,UseXgeom,BAna,hitfilt,VFMinuit,l3onl,emcDY2,fpd,trgd,ZDCvtx,analysis" + "B2014,ITTF,UseXgeom,BAna,VFMinuit,l3onl,emcDY2,fpd,trgd,ZDCvtx,analysis" , "","","Production chain for 2014 data - no Corr (+ l3, bcc/fpd, e/b-emc)",kFALSE}, // Target Chain options for BES -> P2014a,DbV20140410,BEmcChkStat,Corr4,OSpaceZ2,OGridLeak3D {"P2014a","" ,"", - "B2014a,ITTF,UseXgeom,BAna,hitfilt,VFMinuit,l3onl,emcDY2,fpd,trgd,ZDCvtx,StiHftC,analysis," + "B2014a,ITTF,UseXgeom,BAna,VFMinuit,l3onl,emcDY2,fpd,trgd,ZDCvtx,StiHftC,analysis," , "","","Production chain for 2014 data - no Corr (+ l3, bcc/fpd, e/b-emc)",kFALSE}, // Year 15 chains @@ -912,36 +912,36 @@ Bfc_st BFC[] = { // standard chains , "Base chain for run 2015 with y2015c geometry",kFALSE}, {"pp2015","" ,"", - "B2015,ITTF,UseXgeom,BAna,hitfilt,ppOpt,VFPPVnoCTB,beamline,l3onl,emcDY2,fpd,trgd,ZDCvtx,StiHftC,analysis" + "B2015,ITTF,UseXgeom,BAna,ppOpt,VFPPVnoCTB,beamline,l3onl,emcDY2,fpd,trgd,ZDCvtx,StiHftC,analysis" , "","","Production chain for 2015 data - no Corr (+ l3, bcc/fpd, e/b-emc)",kFALSE}, {"pp2015a","" ,"", - "B2015a,ITTF,UseXgeom,BAna,hitfilt,ppOpt,VFPPVnoCTB,beamline,l3onl,emcDY2,fpd,trgd,ZDCvtx,StiHftC,analysis" + "B2015a,ITTF,UseXgeom,BAna,ppOpt,VFPPVnoCTB,beamline,l3onl,emcDY2,fpd,trgd,ZDCvtx,StiHftC,analysis" , "","","Production chain for year 2015a data - no Corr (+ l3, bcc/fpd, e/b-emc)",kFALSE}, {"pp2015b","" ,"", - "B2015b,ITTF,UseXgeom,BAna,hitfilt,ppOpt,VFPPVnoCTB,beamline,l3onl,emcDY2,fpd,trgd,ZDCvtx,StiHftC,analysis" + "B2015b,ITTF,UseXgeom,BAna,ppOpt,VFPPVnoCTB,beamline,l3onl,emcDY2,fpd,trgd,ZDCvtx,StiHftC,analysis" , "","","Production chain for year 2015b data - no Corr (+ l3, bcc/fpd, e/b-emc)",kFALSE}, {"pp2015c","" ,"", - "B2015c,ITTF,UseXgeom,BAna,hitfilt,ppOpt,VFPPVnoCTB,beamline,l3onl,emcDY2,fpd,trgd,ZDCvtx,StiHftC,analysis" + "B2015c,ITTF,UseXgeom,BAna,ppOpt,VFPPVnoCTB,beamline,l3onl,emcDY2,fpd,trgd,ZDCvtx,StiHftC,analysis" , "","","Production chain for year 2015c data - no Corr (+ l3, bcc/fpd, e/b-emc)",kFALSE}, {"P2015","" ,"", - "B2015,ITTF,UseXgeom,BAna,hitfilt,VFMinuit,l3onl,emcDY2,fpd,trgd,ZDCvtx,StiHftC,analysis" + "B2015,ITTF,UseXgeom,BAna,VFMinuit,l3onl,emcDY2,fpd,trgd,ZDCvtx,StiHftC,analysis" , "","","Production chain for 2015 data - no Corr (+ l3, bcc/fpd, e/b-emc)",kFALSE}, {"P2015a","" ,"", - "B2015a,ITTF,UseXgeom,BAna,hitfilt,VFMinuit,l3onl,emcDY2,fpd,trgd,ZDCvtx,StiHftC,analysis" + "B2015a,ITTF,UseXgeom,BAna,VFMinuit,l3onl,emcDY2,fpd,trgd,ZDCvtx,StiHftC,analysis" , "","","Production chain for year 2015a data - no Corr (+ l3, bcc/fpd, e/b-emc)",kFALSE}, {"P2015b","" ,"", - "B2015b,ITTF,UseXgeom,BAna,hitfilt,VFMinuit,l3onl,emcDY2,fpd,trgd,ZDCvtx,StiHftC,analysis" + "B2015b,ITTF,UseXgeom,BAna,VFMinuit,l3onl,emcDY2,fpd,trgd,ZDCvtx,StiHftC,analysis" , "","","Production chain for year 2015b data - no Corr (+ l3, bcc/fpd, e/b-emc)",kFALSE}, {"P2015c","" ,"", - "B2015c,ITTF,UseXgeom,BAna,hitfilt,VFMinuit,l3onl,emcDY2,fpd,trgd,ZDCvtx,StiHftC,analysis" + "B2015c,ITTF,UseXgeom,BAna,VFMinuit,l3onl,emcDY2,fpd,trgd,ZDCvtx,StiHftC,analysis" , "","","Production chain for year 2015c data - no Corr (+ l3, bcc/fpd, e/b-emc)",kFALSE}, @@ -950,13 +950,13 @@ Bfc_st BFC[] = { // standard chains {"B2016" ,"","","ry2016,in,tpcX,AgML,tpcDB,TpcHitMover,Idst,tags,Tree,evout","","" , "Base chain for 2016 ITTF (tpc)",kFALSE}, {"P2016","" ,"", - "B2016,ITTF,UseXgeom,BAna,hitfilt,VFMinuit,l3onl,emcDY2,fpd,trgd,ZDCvtx,StiHftC,analysis" + "B2016,ITTF,UseXgeom,BAna,VFMinuit,l3onl,emcDY2,fpd,trgd,ZDCvtx,StiHftC,analysis" , "","","Production chain for 2016 data - no Corr (+ l3, bcc/fpd, e/b-emc)",kFALSE}, {"B2016a" ,"","","ry2016a,in,tpcX,AgML,tpcDB,TpcHitMover,Idst,tags,Tree,evout","","" , "Production chain for 2016 data (tpc)",kFALSE}, {"P2016a","" ,"", - "B2016a,ITTF,UseXgeom,BAna,hitfilt,VFMinuit,l3onl,emcDY2,fpd,trgd,ZDCvtx,StiHftC,analysis" + "B2016a,ITTF,UseXgeom,BAna,VFMinuit,l3onl,emcDY2,fpd,trgd,ZDCvtx,StiHftC,analysis" , "","","Production chain for 2016 data - no Corr (+ l3, bcc/fpd, e/b-emc)",kFALSE}, // @@ -966,10 +966,10 @@ Bfc_st BFC[] = { // standard chains , "Base chain for run 2017 data (tpc)",kFALSE}, {"pp2017","" ,"", - "B2017,Sti,UseXgeom,BAna,hitfilt,ppOpt,VFPPVnoCTB,beamline,l3onl,emcDY2,fpd,trgd,ZDCvtx,analysis" + "B2017,Sti,UseXgeom,BAna,ppOpt,VFPPVnoCTB,beamline,l3onl,emcDY2,fpd,trgd,ZDCvtx,analysis" , "","","Base chain for year 2017 pp data - no Corr (+ l3, bcc/fpd, e/b-emc)",kFALSE}, {"P2017","" ,"", - "B2017,Sti,UseXgeom,BAna,hitfilt,VFMinuit,l3onl,emcDY2,fpd,trgd,ZDCvtx,analysis" + "B2017,Sti,UseXgeom,BAna,VFMinuit,l3onl,emcDY2,fpd,trgd,ZDCvtx,analysis" , "","","Base chain for year 2017 AA data - no Corr (+ l3, bcc/fpd, e/b-emc)",kFALSE}, @@ -977,11 +977,11 @@ Bfc_st BFC[] = { // standard chains , "Production chain for run 2017 data (tpc)",kFALSE}, {"pp2017a","" ,"", - "B2017a,ITTF,UseXgeom,BAna,hitfilt,ppOpt,VFPPVnoCTB,beamline3D,l3onl,emcDY2,fpd,trgd,ZDCvtx,analysis" + "B2017a,ITTF,UseXgeom,BAna,ppOpt,VFPPVnoCTB,beamline3D,l3onl,emcDY2,fpd,trgd,ZDCvtx,analysis" , "","","Production chain for year 2017 pp data - no Corr (+ l3, bcc/fpd, e/b-emc)",kFALSE}, {"P2017a","" ,"", - "B2017a,ITTF,UseXgeom,BAna,hitfilt,VFMinuit,beamline3D,l3onl,emcDY2,fpd,trgd,ZDCvtx,analysis" + "B2017a,ITTF,UseXgeom,BAna,VFMinuit,beamline3D,l3onl,emcDY2,fpd,trgd,ZDCvtx,analysis" , "","","Production chain for year 2017 AA data - no Corr (+ l3, bcc/fpd, e/b-emc)",kFALSE}, @@ -990,7 +990,7 @@ Bfc_st BFC[] = { // standard chains , "Base chain for run 2018 data (tpc)",kFALSE}, {"P2018a","" ,"", - "B2018a,ITTF,UseXgeom,BAna,hitfilt,VFMinuit,beamline3D,l3onl,emcDY2,epdHit,fpd,trgd,ZDCvtx,analysis" + "B2018a,ITTF,UseXgeom,BAna,VFMinuit,beamline3D,l3onl,emcDY2,epdHit,fpd,trgd,ZDCvtx,analysis" , "","","Base chain for year 2018 AA data - no Corr (+ l3, bcc/fpd, e/b-emc)",kFALSE}, // 2019 chains, BES @@ -998,7 +998,7 @@ Bfc_st BFC[] = { // standard chains "","", "Base chain for run 2019 data (tpc)",kFALSE}, {"P2019a","" ,"", - "B2019a,ITTF,BAna,iTpcIT,hitfilt,VFMinuit,beamline3D,etofa,btof,mtd,l3onl,emcDY2,epdHit,trgd,ZDCvtx,analysis" + "B2019a,ITTF,BAna,iTpcIT,VFMinuit,beamline3D,etofa,btof,mtd,l3onl,emcDY2,epdHit,trgd,ZDCvtx,analysis" , "","", "Base chain for year 2019 AA data - no Corr (+ l3, epd, mtd, b/etof, b-emc)",kFALSE}, @@ -1008,7 +1008,7 @@ Bfc_st BFC[] = { // standard chains "","", "Base chain for run 2020 data (tpc)",kFALSE}, {"P2020a","" ,"", - "B2020a,ITTF,BAna,iTpcIT,hitfilt,VFMinuit,etofa,btof,mtd,l3onl,emcDY2,epdHit,trgd,ZDCvtx,analysis" + "B2020a,ITTF,BAna,iTpcIT,VFMinuit,etofa,btof,mtd,l3onl,emcDY2,epdHit,trgd,ZDCvtx,analysis" , "","", "Base chain for year 2020 AA data - no Corr (+ l3, epd, mtd, b/etof, b-emc)",kFALSE}, // 2021 initial chains @@ -1017,7 +1017,7 @@ Bfc_st BFC[] = { // standard chains "","", "Base chain for run 2020 data (tpc)",kFALSE}, {"P2021a","" ,"", - "B2021a,ITTF,BAna,iTpcIT,hitfilt,VFMinuit,etofa,btof,mtd,l3onl,emcDY2,epdHit,trgd,ZDCvtx,analysis" + "B2021a,ITTF,BAna,iTpcIT,VFMinuit,etofa,btof,mtd,l3onl,emcDY2,epdHit,trgd,ZDCvtx,analysis" , "","", "Base chain for year 2020 AA data - no Corr (+ l3, epd, mtd, b/etof, b-emc)",kFALSE}, // 2022 initial chains @@ -1026,7 +1026,7 @@ Bfc_st BFC[] = { // standard chains "","", "Base chain for run 2022 data (tpc)",kFALSE}, {"pp2022","" ,"", - "B2022,ITTF,BAna,hitfilt,ppOpt,ImpBToFt0Mode,VFPPVnoCTB,beamline3D,l3onl,etofa,btof,mtd,emcDY2,FttDat,fcs,trgd,ZDCvtx,analysis", + "B2022,ITTF,BAna,ppOpt,ImpBToFt0Mode,VFPPVnoCTB,beamline3D,l3onl,etofa,btof,mtd,emcDY2,FttDat,fcs,trgd,ZDCvtx,analysis", "","","Production chain for year 2022 pp data - no Corr (+ l3, epd, mtf, b/etof, fcs, e/b-emc)",kFALSE}, {"B2022a" ,"","", @@ -1034,7 +1034,7 @@ Bfc_st BFC[] = { // standard chains "","", "Base chain for run 2022 data (tpc)",kFALSE}, {"pp2022a","" ,"", - "B2022a,ITTF,BAna,hitfilt,ppOpt,ImpBToFt0Mode,VFPPVnoCTB,beamline3D,l3onl,etofa,btof,mtd,emcDY2,FttDat,fcs,trgd,ZDCvtx,analysis", + "B2022a,ITTF,BAna,ppOpt,ImpBToFt0Mode,VFPPVnoCTB,beamline3D,l3onl,etofa,btof,mtd,emcDY2,FttDat,fcs,trgd,ZDCvtx,analysis", "","","Production chain for year 2022 pp data - CorrY (+ l3, epd, mtf, b/etof, fcs, e/b-emc)",kFALSE}, // 2023 initial chains @@ -1043,7 +1043,7 @@ Bfc_st BFC[] = { // standard chains "","", "Base chain for run 2023 data (tpc)",kFALSE}, {"P2023a","" ,"", - "B2023a,ITTF,BAna,iTpcIT,hitfilt,VFMinuit,etofa,btof,mtd,l3onl,emcDY2,epdHit,trgd,ZDCvtx,analysis", + "B2023a,ITTF,BAna,iTpcIT,VFMinuit,etofa,btof,mtd,l3onl,emcDY2,epdHit,trgd,ZDCvtx,analysis", "","", "Base chain for year 2023 AA data - CorrY (+ l3, epd, mtd, b/etof, b-emc)",kFALSE}, // 2024 initial chains @@ -1052,8 +1052,8 @@ Bfc_st BFC[] = { // standard chains "","", "Base chain for run 2024 data (tpc)",kFALSE}, {"pp2024a","" ,"", - "B2024a,ITTF,BAna,hitfilt,ppOpt,ImpBToFt0Mode,VFPPVnoCTB,beamline3D,l3onl,epdhit,btof,mtd,emcDY2,ftt,fcs,trgd,ZDCvtx,analysis", - "","","Production chain for year 2024 pp data - CorrY (+ l3, epd, mtd, btof, fcs, ftt, e/b-emc)",kFALSE}, + "B2024a,ITTF,BAna,ppOpt,ImpBToFt0Mode,VFPPVnoCTB,beamline3D,l3onl,epdhit,btof,mtd,emcDY2,ftt,fcs,trgd,ZDCvtx,analysis", + "","","Production chain for year 2024 pp data - CorrY (+ l3, epd, mtd, btof, fcs, ftt, e/b-emc)",kFALSE}, // Other chains/Calibration @@ -1223,7 +1223,7 @@ Bfc_st BFC[] = { // standard chains {"libPhysics" ,"" ,"","","" ,"libPhysics","TVector",kFALSE}, {"geant3vmc" ,"" ,"","-usexgeom,-xgeometry","", "libGeom,libVMC,libgeant3", "VMC geant3",kFALSE}, {"geant3" ,"" ,"","geant3vmc","" ,"EG,Pythia6,EGPythia6","VMC geant3 plus ROOT EG,pythia6",kFALSE}, - {"geometry" ,"" ,"","","" ,"geometry","geometry+Mag.Field",kFALSE}, + {"geometry" ,"" ,"","","" ,"geometry","geometry+Mag.Field",kFALSE}, {"StarMagField","", "","magF" ,"","VMC,StarMagField","Load StarMagField",kFALSE}, {"geomNoField" ,"" ,"","-geometry,StarMagField" ,"","geometryNoField","geometry-Mag.Field",kFALSE}, {"xgeometry" ,"" ,"","-geometry,-geomNoField" ,"","xgeometry","AgML geometry-Mag.Field",kFALSE}, @@ -1514,7 +1514,7 @@ Bfc_st BFC[] = { // standard chains {"ssddat" ,"","","ssd_daq" ,"","","SSD full chain for Real Data",kFALSE}, {"sstdat" ,"","","sst_daq" ,"","","SST full chain for Real Data",kFALSE}, {"ssd_daq","","","ssdCalDb,svt_T,-sls,-spa,ssdUtil","StSsdDaqMaker","StSsdDaqMaker","... SSD Daq",kFALSE}, - {"sst_daq","","","sstCalDb,svt_T,-sls,-spa,sstUtil","StSstDaqMaker","StSstDaqMaker","... SSDT Daq",kFALSE}, + {"sst_daq","","","sstCalDb,svt_T,-sls,-spa,sstUtil","StSstDaqMaker","StSstDaqMaker","... SST Daq",kFALSE}, {"ssdfast" ,"","","ssdDb,StMcEvent,StEvent","StSsdFastSimMaker","StSsdFastSimMaker", "... SSD fast simulator" ,kFALSE}, @@ -1589,8 +1589,10 @@ Bfc_st BFC[] = { // standard chains // Time Of Flight related options - {"ToF" ,"TofChain","","tofDat,tofrMatch,tofpMatch,tofCalib,geant","StMaker","StChain","ToF Chain",kFALSE}, - {"ToFx" ,"TofChain","","tofXDat,tofrMatch,tofCalib,geant" ,"StMaker","StChain","ToFx Chain",kFALSE}, + {"ToF" ,"TofChain","","tofDat,tofrMatch,tofpMatch,tofCalib,geant","StMaker","StChain" + , "ToF Chain",kFALSE}, + {"ToFx" ,"TofChain","","tofXDat,tofrMatch,tofCalib,geant" ,"StMaker","StChain" + , "ToFx Chain",kFALSE}, {"tofDat" ,"tof_raw","TofChain","db,Tofutil","StTofMaker","StEvent,StTofMaker", "TOF Data base chain", kFALSE}, {"tofXDat" ,"tof_raw","TofChain","db,Tofutil","StTofHitMaker","StEvent,StTofMaker,StTofHitMaker", @@ -1743,12 +1745,12 @@ Bfc_st BFC[] = { // standard chains {"HpdIT" ,"" ,"","ITTF","" ,"Sti,StiRnD","Sti tracking: Hpd geom",kFALSE}, {"PixelIT","" ,"","PxlIT","" ,"","Alias for PxlIT",kFALSE}, - {"PxlIT" ,"" ,"","ITTF","" ,"","Sti tracking: Pixel geom",kFALSE}, - {"IstIT" ,"" ,"","ITTF","" ,"","Sti tracking: Ist geom",kFALSE}, - {"SstIT" ,"" ,"","ITTF","" ,"","Sti tracking: Sst geom",kFALSE}, - {"iTpcIT" ,"" ,"","ITTF","" ,"","Sti tracking: iTpc geom + hits",kFALSE}, + {"PxlIT" ,"" ,"","ITTF","" ,"","Sti tracking: Pixel geom",kFALSE}, + {"IstIT" ,"" ,"","ITTF","" ,"","Sti tracking: Ist geom",kFALSE}, + {"SstIT" ,"" ,"","ITTF","" ,"","Sti tracking: Sst geom",kFALSE}, + {"iTpcIT" ,"" ,"","ITTF","" ,"","Sti tracking: iTpc geom + hits",kFALSE}, - {"BTofIT" ,"" ,"","ITTF","" ,"","Sti tracking: BTof geom",kFALSE}, + {"BTofIT" ,"" ,"","ITTF","" ,"","Sti tracking: BTof geom",kFALSE}, {"NoSvtIT" ,"" ,"","-SvtIT","" ,"","ITTF: track with switch off SVT geom",kFALSE}, {"NoSsdIT" ,"" ,"","-SsdIT","" ,"","ITTF: track with switch off SSD geom",kFALSE}, {"NoSstIT" ,"" ,"","-SstIT","" ,"","ITTF: track with switch off SST geom",kFALSE}, From 7551fb9c4d1fe597cd274cd6546ff50009495633 Mon Sep 17 00:00:00 2001 From: Daniel Brandenburg Date: Thu, 22 Aug 2024 11:52:20 -0400 Subject: [PATCH 34/45] Update Stgm geometry z-plane locations according to survey data (#707) Move sTGC planes to match the z-locations measured as part of the precision position survey. Use the z coord for quadrant A on each plane as the z-location for the entire plane --- StarVMC/Geometry/StgmGeo/StgmGeo1.xml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/StarVMC/Geometry/StgmGeo/StgmGeo1.xml b/StarVMC/Geometry/StgmGeo/StgmGeo1.xml index decc23be73b..f773b423ec1 100644 --- a/StarVMC/Geometry/StgmGeo/StgmGeo1.xml +++ b/StarVMC/Geometry/StgmGeo/StgmGeo1.xml @@ -215,20 +215,20 @@ - + - + - zplane = -26.75; + zplane = -26.4965; @@ -255,7 +255,7 @@ station - zplane = -3.95; + zplane = -8.8855; @@ -281,7 +281,7 @@ station = 2; station - zplane = +18.95; + zplane = +8.7985; @@ -307,7 +307,7 @@ station = 3; station - zplane = +41.75; + zplane = +26.5835; From b06b780de6384f87c15282d7b1a139c8cbf7a0ff Mon Sep 17 00:00:00 2001 From: Daniel Brandenburg Date: Thu, 22 Aug 2024 17:33:49 -0400 Subject: [PATCH 35/45] Add idTruth and qaTruth to StEvent and MuDst FttPoint, FttCluster, and FttRawHit (#699) Adds idTruth member to StMuFttPoint (used by StFttFastSimMaker) and StMuFttCluster (to be used by "slow" simulator) mirrors updates to StEvent in #698 --- StRoot/StEvent/StFttCluster.cxx | 7 ++++++- StRoot/StEvent/StFttCluster.h | 5 ++++- StRoot/StEvent/StFttPoint.cxx | 4 ++-- StRoot/StEvent/StFttPoint.h | 7 +++++-- StRoot/StEvent/StFttRawHit.cxx | 9 +++++++-- StRoot/StEvent/StFttRawHit.h | 12 ++++++++---- StRoot/StMuDSTMaker/COMMON/StMuFttCluster.cxx | 7 ++++++- StRoot/StMuDSTMaker/COMMON/StMuFttCluster.h | 8 +++++++- StRoot/StMuDSTMaker/COMMON/StMuFttPoint.cxx | 2 ++ StRoot/StMuDSTMaker/COMMON/StMuFttPoint.h | 8 +++++++- StRoot/StMuDSTMaker/COMMON/StMuFttRawHit.cxx | 11 +++++++++-- StRoot/StMuDSTMaker/COMMON/StMuFttRawHit.h | 11 +++++++---- 12 files changed, 70 insertions(+), 21 deletions(-) diff --git a/StRoot/StEvent/StFttCluster.cxx b/StRoot/StEvent/StFttCluster.cxx index 932a78f6380..8fb507c13b5 100644 --- a/StRoot/StEvent/StFttCluster.cxx +++ b/StRoot/StEvent/StFttCluster.cxx @@ -19,7 +19,10 @@ mSumAdc(0.0), mX(0.0), mSigma(0.0), mRawHits(0), -mNeighbors(0) +mNeighbors(0), +mPoints(0), +mIdTruth(0), +mQaTruth(0) { } @@ -58,6 +61,8 @@ operator<<( std::ostream &os, const StFttCluster& rh ) os << "\tsumAdc = " << rh.sumAdc() << endl; os << "\tx = " << rh.x() << endl; os << "\tsigma = " << rh.sigma() << endl; + os << "\tidTruth = " << rh.idTruth() << endl; + os << "\tqaTruth = " << rh.qaTruth() << endl; os << ")" << endl; return os; } diff --git a/StRoot/StEvent/StFttCluster.h b/StRoot/StEvent/StFttCluster.h index d478c798f32..8fcc4341901 100644 --- a/StRoot/StEvent/StFttCluster.h +++ b/StRoot/StEvent/StFttCluster.h @@ -28,6 +28,7 @@ class StFttCluster : public StObject { float x() const; // Mean x ("center of gravity") in local grid coordinate (1st moment). float sigma() const; // Maximum 2nd moment (along major axis). UShort_t idTruth() const { return mIdTruth; } // Get the truth ID + UShort_t qaTruth() const { return mQaTruth; } // Get the truth quality void setId(int cluid); void setPlane(UChar_t plane); @@ -39,6 +40,7 @@ class StFttCluster : public StObject { void setX(float x0); void setSigma(float sigma); void setIdTruth(UShort_t id) { mIdTruth = id; } + void setQaTruth(UShort_t qa) { mQaTruth = qa; } StPtrVecFttRawHit& rawHits(); const StPtrVecFttRawHit& rawHits() const; @@ -65,8 +67,9 @@ class StFttCluster : public StObject { StPtrVecFttCluster mNeighbors; // Neighbor clusters StPtrVecFttPoint mPoints; // Fitted points (photons) in the cluster UShort_t mIdTruth=0; // Truth ID + UShort_t mQaTruth=0; // Truth Quality - ClassDef(StFttCluster, 3) + ClassDef(StFttCluster, 4) }; std::ostream& operator << ( std::ostream&, const StFttCluster& clu ); // Printing operator diff --git a/StRoot/StEvent/StFttPoint.cxx b/StRoot/StEvent/StFttPoint.cxx index c9441860543..a06d4f8e72a 100644 --- a/StRoot/StEvent/StFttPoint.cxx +++ b/StRoot/StEvent/StFttPoint.cxx @@ -20,8 +20,8 @@ void StFttPoint::print(int opt) { } -int StFttPoint::nClusters() const { - int n = 0; +size_t StFttPoint::nClusters() const { + size_t n = 0; for ( size_t i = 0; i < 4; i++ ){ if ( mClusters[i] != nullptr ) n++; diff --git a/StRoot/StEvent/StFttPoint.h b/StRoot/StEvent/StFttPoint.h index bab29a1971f..4add9090ef0 100644 --- a/StRoot/StEvent/StFttPoint.h +++ b/StRoot/StEvent/StFttPoint.h @@ -28,10 +28,11 @@ class StFttPoint : public StObject { UChar_t quadrant() const; // detector quadrant. float x() const; // x position in cell unit at which point intersects the sub-detector in local coordinate float y() const; // y position in cell unit at which point intersects the sub-detector in local coordinate - int nClusters() const; // Number of points in the parent cluster. + size_t nClusters() const; // Number of points in the parent cluster. StFttCluster* cluster( size_t i); // Parent cluster of the photon. const StThreeVectorD& xyz() const; // XYZ position in global STAR coordinate UShort_t idTruth() const { return mIdTruth; } // Get the truth ID + UShort_t qaTruth() const { return mQaTruth; } // Get the truth quality void setPlane(UChar_t plane); void setQuadrant(UChar_t quad); @@ -40,6 +41,7 @@ class StFttPoint : public StObject { void addCluster(StFttCluster* cluster, UChar_t dir); void setXYZ(const StThreeVectorD& p3); void setIdTruth(UShort_t id) { mIdTruth = id; } + void setQaTruth(UShort_t qa) { mQaTruth = qa; } void print(int option=0); @@ -51,8 +53,9 @@ class StFttPoint : public StObject { StFttCluster *mClusters[4]; StThreeVectorD mXYZ; // Photon position in STAR coordinate UShort_t mIdTruth=0; // Truth ID + UShort_t mQaTruth=0; // Truth quality - ClassDef(StFttPoint, 2) + ClassDef(StFttPoint, 3) }; inline UChar_t StFttPoint::plane() const { return mPlane; } diff --git a/StRoot/StEvent/StFttRawHit.cxx b/StRoot/StEvent/StFttRawHit.cxx index b92f3a08f1c..d32f4018c8e 100644 --- a/StRoot/StEvent/StFttRawHit.cxx +++ b/StRoot/StEvent/StFttRawHit.cxx @@ -27,7 +27,9 @@ mPlane(255), mQuadrant(kFttUnknownQuadrant), mRow(255), mStrip(255), -mOrientation(kFttUnknownOrientation) +mOrientation(kFttUnknownOrientation), +mIdTruth(0), +mQaTruth(0) { /*noop*/ } StFttRawHit::StFttRawHit( UChar_t mSector, UChar_t mRDO, UChar_t mFEB, @@ -79,7 +81,10 @@ operator<<( ostream &os, const StFttRawHit& rh ) os << "\tmQuadrant = " << (int)rh.quadrant() << endl; os << "\tmRow = " << (int)rh.row() << endl; os << "\tmStrip = " << (int)rh.strip() << endl; - os << "\tmOrientation = " << (int)rh.orientation() << " ) " << endl; + os << "\tmOrientation = " << (int)rh.orientation() << endl; + os << "\tidTruth = " << (int)rh.idTruth() << endl; + os << "\tqaTruth = " << (int)rh.qaTruth() << endl; + os << " ) " << endl; return os; diff --git a/StRoot/StEvent/StFttRawHit.h b/StRoot/StEvent/StFttRawHit.h index 8d7e2820254..12928994fd0 100644 --- a/StRoot/StEvent/StFttRawHit.h +++ b/StRoot/StEvent/StFttRawHit.h @@ -36,8 +36,10 @@ class StFttRawHit : public StObject { void setMapping( UChar_t mPlane, UChar_t mQuadrant, UChar_t mRow, UChar_t mStrip, UChar_t mOrientation ); void setTime( Short_t mTime ) { this->mTime = mTime; } - // consant getters + void setIdTruth( UShort_t id ) { mIdTruth = id; } + void setQaTruth( UShort_t qa ) { mQaTruth = qa; } + // consant getters UChar_t sector() const; UChar_t rdo() const; UChar_t feb() const; @@ -54,6 +56,8 @@ class StFttRawHit : public StObject { UChar_t row() const; UChar_t strip() const; UChar_t orientation() const; + UShort_t idTruth() const { return mIdTruth; } + UShort_t qaTruth() const { return mQaTruth; } protected: UChar_t mSector; @@ -74,10 +78,10 @@ class StFttRawHit : public StObject { UChar_t mStrip; UChar_t mOrientation; - // StFttCluster *mCluster; - // StFttPoint *mPoint; + UShort_t mIdTruth=0; // Truth ID + UShort_t mQaTruth=0; // Truth Quality - ClassDef( StFttRawHit, 3 ); + ClassDef( StFttRawHit, 4 ); }; ostream& operator << ( ostream&, const StFttRawHit& digi ); // Printing operator diff --git a/StRoot/StMuDSTMaker/COMMON/StMuFttCluster.cxx b/StRoot/StMuDSTMaker/COMMON/StMuFttCluster.cxx index 05bdc6992fb..720d045095f 100644 --- a/StRoot/StMuDSTMaker/COMMON/StMuFttCluster.cxx +++ b/StRoot/StMuDSTMaker/COMMON/StMuFttCluster.cxx @@ -22,7 +22,10 @@ mSumAdc(0.0), mX(0.0), mSigma(0.0), mRawHits(0), -mNeighbors(0) +mNeighbors(0), +mPoints(0), +mIdTruth(0), +mQaTruth(0) { } @@ -53,4 +56,6 @@ void StMuFttCluster::set( StFttCluster * clu ){ mSumAdc = clu->sumAdc(); mX = clu->x(); mSigma = clu->sigma(); + mIdTruth = clu->idTruth(); + mQaTruth = clu->qaTruth(); } \ No newline at end of file diff --git a/StRoot/StMuDSTMaker/COMMON/StMuFttCluster.h b/StRoot/StMuDSTMaker/COMMON/StMuFttCluster.h index 7780afc9c8f..5288024131b 100644 --- a/StRoot/StMuDSTMaker/COMMON/StMuFttCluster.h +++ b/StRoot/StMuDSTMaker/COMMON/StMuFttCluster.h @@ -25,6 +25,8 @@ class StMuFttCluster : public TObject { float sumAdc() const; float x() const; // Mean x ("center of gravity") in local grid coordinate (1st moment). float sigma() const; // Maximum 2nd moment (along major axis). + UShort_t idTruth() const { return mIdTruth; } // Get the truth ID + UShort_t qaTruth() const { return 0; } // Get the truth quality void setId(int cluid); void setPlane(UChar_t plane); @@ -34,6 +36,8 @@ class StMuFttCluster : public TObject { void setSumAdc(int theSumAdc); void setX(float x0); void setSigma(float sigma); + void setIdTruth(UShort_t id) { mIdTruth = id; } + void setQaTruth(UShort_t qa) { mQaTruth = qa; } TRefArray* rawHits(); const TRefArray* rawHits() const; @@ -60,8 +64,10 @@ class StMuFttCluster : public TObject { TRefArray mRawHits; // Tower hits of the current cluster TRefArray mNeighbors; // Neighbor clusters TRefArray mPoints; // Fitted points (photons) in the cluster + UShort_t mIdTruth=0; // Truth ID + UShort_t mQaTruth=0; // Truth quality - ClassDef(StMuFttCluster, 1) + ClassDef(StMuFttCluster, 3) }; diff --git a/StRoot/StMuDSTMaker/COMMON/StMuFttPoint.cxx b/StRoot/StMuDSTMaker/COMMON/StMuFttPoint.cxx index 99657086170..8e6685b62fd 100644 --- a/StRoot/StMuDSTMaker/COMMON/StMuFttPoint.cxx +++ b/StRoot/StMuDSTMaker/COMMON/StMuFttPoint.cxx @@ -27,4 +27,6 @@ void StMuFttPoint::set( StFttPoint *point ){ mX = point->x(); mY = point->y(); mXYZ = TVector3( point->xyz().x(), point->xyz().y(), point->xyz().z() ); + mIdTruth = point->idTruth(); + mQaTruth = point->qaTruth(); } // set from StEvent \ No newline at end of file diff --git a/StRoot/StMuDSTMaker/COMMON/StMuFttPoint.h b/StRoot/StMuDSTMaker/COMMON/StMuFttPoint.h index d5c10651ad8..88703f29ae6 100644 --- a/StRoot/StMuDSTMaker/COMMON/StMuFttPoint.h +++ b/StRoot/StMuDSTMaker/COMMON/StMuFttPoint.h @@ -32,6 +32,8 @@ class StMuFttPoint : public TObject { int nParentClusters() const; // Number of points in the parent cluster. // StMuFttCluster* cluster( size_t i); // Parent cluster of the photon. const TVector3& xyz() const; // XYZ position in global STAR coordinate + UShort_t idTruth() const { return mIdTruth; } // Get the truth ID + UShort_t qaTruth() const { return mQaTruth; } // Get the truth quality void setPlane(UChar_t plane); void setQuadrant(UChar_t quad); @@ -39,6 +41,8 @@ class StMuFttPoint : public TObject { void setY(float y); // void addCluster(StMuFttCluster* cluster); void setXYZ(const TVector3& p3); + void setIdTruth(UShort_t id) { mIdTruth = id; } + void setQaTruth(UShort_t qa) { mQaTruth = qa; } void print(int option=0); @@ -52,8 +56,10 @@ class StMuFttPoint : public TObject { Float_t mY=0.0; // y-position in local coordinate TRefArray mClusters=0; // parent clusters (could be up to 3?) TVector3 mXYZ; // Photon position in STAR coordinate + UShort_t mIdTruth=0; // Truth ID + UShort_t mQaTruth=0; // Truth quality - ClassDef(StMuFttPoint, 1) + ClassDef(StMuFttPoint, 3) }; inline UChar_t StMuFttPoint::plane() const { return mPlane; } diff --git a/StRoot/StMuDSTMaker/COMMON/StMuFttRawHit.cxx b/StRoot/StMuDSTMaker/COMMON/StMuFttRawHit.cxx index 980b2a335f7..89be88c5aef 100644 --- a/StRoot/StMuDSTMaker/COMMON/StMuFttRawHit.cxx +++ b/StRoot/StMuDSTMaker/COMMON/StMuFttRawHit.cxx @@ -27,7 +27,9 @@ mPlane(255), mQuadrant(kFttUnknownQuadrant), mRow(255), mStrip(255), -mOrientation(kFttUnknownOrientation) +mOrientation(kFttUnknownOrientation), +mIdTruth(0), +mQaTruth(0) { /*noop*/ } StMuFttRawHit::StMuFttRawHit( StFttRawHit * stHit ){ @@ -66,6 +68,8 @@ void StMuFttRawHit::setMapping( UChar_t mPlane, UChar_t mQuadrant, void StMuFttRawHit::set( StFttRawHit * stHit ){ setRaw( stHit->sector(), stHit->rdo(), stHit->feb(), stHit->vmm(), stHit->channel(), stHit->adc(), stHit->bcid(), stHit->tb(), stHit->dbcid()); setMapping( stHit->plane(), stHit->quadrant(), stHit->row(), stHit->strip(), stHit->orientation() ); + setIdTruth( stHit->idTruth() ); + setQaTruth( stHit->qaTruth() ); } // set from StEvent object @@ -88,6 +92,9 @@ operator<<( ostream &os, const StMuFttRawHit& rh ) os << "\tmQuadrant = " << (int)rh.quadrant() << endl; os << "\tmRow = " << (int)rh.row() << endl; os << "\tmStrip = " << (int)rh.strip() << endl; - os << "\tmOrientation = " << (int)rh.orientation() << " ) " << endl; + os << "\tmOrientation = " << (int)rh.orientation() << endl; + os << "\tidTruth = " << (int)rh.idTruth() << endl; + os << "\tqaTruth = " << (int)rh.qaTruth() << endl; + os << " ) " << endl; return os; } // operator<< ostream \ No newline at end of file diff --git a/StRoot/StMuDSTMaker/COMMON/StMuFttRawHit.h b/StRoot/StMuDSTMaker/COMMON/StMuFttRawHit.h index 7d049fb66ee..c15e562aa49 100644 --- a/StRoot/StMuDSTMaker/COMMON/StMuFttRawHit.h +++ b/StRoot/StMuDSTMaker/COMMON/StMuFttRawHit.h @@ -37,9 +37,10 @@ class StMuFttRawHit : public TObject { void setMapping( UChar_t mPlane, UChar_t mQuadrant, UChar_t mRow, UChar_t mStrip, UChar_t mOrientation ); void set( StFttRawHit * stHit ); + void setIdTruth( UShort_t id ) { mIdTruth = id; } + void setQaTruth( UShort_t qa ) { mQaTruth = qa; } // consant getters - UChar_t sector() const; UChar_t rdo() const; UChar_t feb() const; @@ -55,6 +56,8 @@ class StMuFttRawHit : public TObject { UChar_t row() const; UChar_t strip() const; UChar_t orientation() const; + UShort_t idTruth() const { return mIdTruth; } + UShort_t qaTruth() const { return mQaTruth; } protected: UChar_t mSector; @@ -74,10 +77,10 @@ class StMuFttRawHit : public TObject { UChar_t mStrip; UChar_t mOrientation; - // StFttCluster *mCluster; - // StFttPoint *mPoint; + UShort_t mIdTruth; + UShort_t mQaTruth; - ClassDef( StMuFttRawHit, 2 ); + ClassDef( StMuFttRawHit, 3 ); }; std::ostream& operator << ( std::ostream&, const StMuFttRawHit& hit ); // Printing operator From 2fa4c619b4e041c2020c56fc712dc29e426809ea Mon Sep 17 00:00:00 2001 From: Daniel Brandenburg Date: Tue, 27 Aug 2024 14:12:01 -0400 Subject: [PATCH 36/45] Update StFstFastSimMaker to write hits into the StFstHitCollection (#700) as is done for the real data reco chain. I continue to write hits into the StRnDCollection, but this is no longer used by downstream code. Also add a function to StFstHit to allow setting the disk, wedge, and sensor for sim hits. Does not change the StFstHit data structure. --- StRoot/StEvent/StFstHit.h | 3 + StRoot/StFstSimMaker/StFstFastSimMaker.cxx | 86 +++++++++++----------- StRoot/StFstSimMaker/StFstFastSimMaker.h | 13 +--- 3 files changed, 50 insertions(+), 52 deletions(-) diff --git a/StRoot/StEvent/StFstHit.h b/StRoot/StEvent/StFstHit.h index c4120a9e5eb..d991c86cd0b 100644 --- a/StRoot/StEvent/StFstHit.h +++ b/StRoot/StEvent/StFstHit.h @@ -42,6 +42,7 @@ class StFstHit : public StHit unsigned char getNRawHitsPhi() const; float localPosition(unsigned int ) const; + void setDiskWedgeSensor(unsigned char disk, unsigned char wedge, unsigned char sensor); void setDisk(unsigned char disk); void setWedge(unsigned char wedge); void setSensor(unsigned char sensor); @@ -90,6 +91,8 @@ inline unsigned char StFstHit::getNRawHits() const { return mNRawHits; inline unsigned char StFstHit::getNRawHitsR() const { return mNRawHitsR; }; inline unsigned char StFstHit::getNRawHitsPhi() const { return mNRawHitsPhi; }; +inline void StFstHit::setDiskWedgeSensor(unsigned char disk, unsigned char wedge, unsigned char sensor) { setHardwarePosition( + (1+disk)*kFstNumWedgePerDisk * kFstNumSensorsPerWedge*0 + (1 + (wedge - 1)*kFstNumSensorsPerWedge + sensor) ); } inline void StFstHit::setApv(unsigned char apv) { mApv = apv; }; inline void StFstHit::setMaxTimeBin(unsigned char tb) { mMaxTimeBin = tb; }; inline void StFstHit::setMeanPhiStrip(float meanPhiStrip) { mMeanPhiStrip = meanPhiStrip; }; diff --git a/StRoot/StFstSimMaker/StFstFastSimMaker.cxx b/StRoot/StFstSimMaker/StFstFastSimMaker.cxx index bf9034ccfd3..27814923bc6 100644 --- a/StRoot/StFstSimMaker/StFstFastSimMaker.cxx +++ b/StRoot/StFstSimMaker/StFstFastSimMaker.cxx @@ -4,6 +4,8 @@ #include "StEvent/StEvent.h" #include "StEvent/StRnDHit.h" +#include "StEvent/StFstHit.h" +#include "StEvent/StFstHitCollection.h" #include "StEvent/StRnDHitCollection.h" #include "tables/St_g2t_fts_hit_Table.h" @@ -57,9 +59,9 @@ StFstFastSimMaker::StFstFastSimMaker(const Char_t *name) mNumR{8}, mNumPHI{128}, mNumSEC{12}, - mRaster{0}, mInEff{0}, mHist{false}, + mGEANTPassthrough{false}, mQAFileName(0), hTrutHitYXDisk(0), hTrutHitRDisk(0), @@ -125,6 +127,15 @@ Int_t StFstFastSimMaker::Make() { LOG_DEBUG << "Creating StRnDHitCollection for FTS" << endm; } + // Get pointer to an existing StFstHitCollection if any + StFstHitCollection *fstHitCollection = event->fstHitCollection(); + // If no fst hit collection, create one + if (!fstHitCollection) { + fstHitCollection = new StFstHitCollection(); + event->setFstHitCollection(fstHitCollection); + LOG_DEBUG << "Make() - Added new StFstHitCollection to this StEvent" << endm; + } + // Digitize GEANT FTS hits FillSilicon(event); @@ -142,15 +153,9 @@ void StFstFastSimMaker::FillSilicon(StEvent *event) { const int MAXR = mNumR; const int MAXPHI = mNumPHI * mNumSEC; - float X0[] = {0, 0, 0, 0, 0, 0}; - float Y0[] = {0, 0, 0, 0, 0, 0}; - - if (mRaster > 0) - for (int i = 0; i < 6; i++) { - X0[i] = mRaster * TMath::Cos(i * 60 * TMath::DegToRad()); - Y0[i] = mRaster * TMath::Sin(i * 60 * TMath::DegToRad()); - } - + if ( mGEANTPassthrough ){ + LOG_INFO << "FST Hits using GEANT xyz directly (no raster etc.)" << endm; + } // maps for hit and energy for each disk's r-phi strip std::map< FstGlobal::FstKeyTriple, StRnDHit* > hitMap; @@ -217,30 +222,20 @@ void StFstFastSimMaker::FillSilicon(StEvent *event) { if (trk) isShower = trk->is_shower; - // raster coordinate offsets - double xc = X0[disk_index]; - double yc = Y0[disk_index]; - + // This z-offset is used to shift the hits + // to the center of the FST where the tracking planes are defined + const double z_delta = 1.755; // hit coordinates double x = hit->x[0]; double y = hit->x[1]; - double z = hit->x[2]; + double z = hit->x[2] + z_delta; if (z > 200) continue; // skip large disks - // rastered - double rastered_x = x - xc; - double rastered_y = y - yc; - double r = sqrt(x * x + y * y); double p = atan2(y, x); - // rastered - double rr = sqrt(rastered_x * rastered_x + rastered_y * rastered_y); - double pp = atan2(rastered_y, rastered_x); - - // wrap an angle between 0 and 2pi auto wrapAngle = [&]( double angle ) { angle = fmod( angle, 2.0 * M_PI ); @@ -250,27 +245,22 @@ void StFstFastSimMaker::FillSilicon(StEvent *event) { }; p = wrapAngle( p ); - pp = wrapAngle( pp ); - LOG_DEBUG << "rr = " << rr << " pp=" << pp << endm; + LOG_DEBUG << "r = " << r << " p=" << p << endm; LOG_DEBUG << "RMIN = " << FstGlobal::RMIN[disk_index] << " RMAX= " << FstGlobal::RMAX[disk_index] << endm; - // Cuts made on rastered value to require the r value is within limits - if (rr < FstGlobal::RMIN[disk_index] || rr > FstGlobal::RMAX[disk_index]) + // Cuts made on the r value to ensure it is within limits + if (r < FstGlobal::RMIN[disk_index] || r > FstGlobal::RMAX[disk_index]) continue; - LOG_DEBUG << "rr = " << rr << endm; - // Strip numbers on rastered value - int r_index = floor(MAXR * (rr - FstGlobal::RMIN[disk_index]) / (FstGlobal::RMAX[disk_index] - FstGlobal::RMIN[disk_index])); - - // this gives a different conflicting answer for r_index and does not handle r outside of range + int r_index = floor(MAXR * (r - FstGlobal::RMIN[disk_index]) / (FstGlobal::RMAX[disk_index] - FstGlobal::RMIN[disk_index])); for (int ii = 0; ii < MAXR; ii++) - if (rr > FstGlobal::RSegment[ii] && rr <= FstGlobal::RSegment[ii + 1]) + if (r > FstGlobal::RSegment[ii] && r <= FstGlobal::RSegment[ii + 1]) r_index = ii; // Phi number - int phi_index = int(MAXPHI * pp / 2.0 / M_PI); + int phi_index = int(MAXPHI * p / 2.0 / M_PI); if (r_index >= 8) continue; @@ -297,7 +287,8 @@ void StFstFastSimMaker::FillSilicon(StEvent *event) { fsihit = new StRnDHit(); fsihit->setDetectorId(kFtsId); fsihit->setLayer(disk); - + fsihit->setLadder(wedge); + fsihit->setWafer(sensor); // // Set position and position error based on radius-constant bins // @@ -308,12 +299,16 @@ void StFstFastSimMaker::FillSilicon(StEvent *event) { double r0 = (FstGlobal::RSegment[r_index] + FstGlobal::RSegment[r_index + 1]) * 0.5; double dr = FstGlobal::RSegment[r_index + 1] - FstGlobal::RSegment[r_index]; - double x0 = r0 * cos(p0) + xc; - double y0 = r0 * sin(p0) + yc; + double x0 = r0 * cos(p0); + double y0 = r0 * sin(p0); assert(TMath::Abs(x0) + TMath::Abs(y0) > 0); double dz = 0.03 / FstGlobal::SQRT12; double er = dr / FstGlobal::SQRT12; fsihit->setPosition(StThreeVectorF(x0, y0, z)); + // pass the GEANT hits through without modification + if ( mGEANTPassthrough ){ + fsihit->setPosition(StThreeVectorF(x, y, z)); + } fsihit->setPositionError(StThreeVectorF(er, dp, dz)); // set covariance matrix @@ -384,16 +379,25 @@ void StFstFastSimMaker::FillSilicon(StEvent *event) { int nfsihit = hits.size(); StarRandom &rand = StarRandom::Instance(); - + LOG_INFO << "FST Fast simulator is using mInEff = " << mInEff << endm; // NOW run back through the hits and add them if they pass an efficiency roll for (int i = 0; i < nfsihit; i++) { double rnd_save = rand.flat(); - if (rnd_save > mInEff){ + if (rnd_save > mInEff || mGEANTPassthrough){ fsicollection->addHit(hits[i]); + + StFstHit *fHit = new StFstHit(hits[i]->position(), hits[i]->positionError(), 0, hits[i]->charge(), 0); + fHit->setIdTruth(hits[i]->idTruth()); + float r = sqrt(hits[i]->position().x() * hits[i]->position().x() + hits[i]->position().y() * hits[i]->position().y()); + float phi = atan2(hits[i]->position().y(), hits[i]->position().x()); + fHit->setLocalPosition( r, phi, hits[i]->position().z() ); + fHit->setDiskWedgeSensor(hits[i]->layer(), hits[i]->ladder(), hits[i]->wafer()); + event->fstHitCollection()->addHit(fHit); + } else { } } if (FstGlobal::verbose) { - LOG_DEBUG << Form("Found %d/%d g2t hits in %d cells, created %d hits with ADC>0", count, nHits, nfsihit, fsicollection->numberOfHits()) << endm; + LOG_DEBUG << Form("Found %d/%d g2t hits in %d cells, created %d hits with ADC>0 and put %d into StFstHitCollection", count, nHits, nfsihit, fsicollection->numberOfHits(), event->fstHitCollection()->numberOfHits()) << endm; } } diff --git a/StRoot/StFstSimMaker/StFstFastSimMaker.h b/StRoot/StFstSimMaker/StFstFastSimMaker.h index 03e8633e075..6e374d7cfbc 100644 --- a/StRoot/StFstSimMaker/StFstFastSimMaker.h +++ b/StRoot/StFstSimMaker/StFstFastSimMaker.h @@ -21,17 +21,13 @@ class StFstFastSimMaker : public StMaker { int Make(); int Init(); int Finish(); - virtual const char *GetCVS() const; - - /// Set offset for each disk ( x=R*cos(idisk*60 degrees), y=R*sin(...) ) - void SetRaster(float R = 1.0) { mRaster = R; } /// Set min/max active radii for each disk void SetDisk(const int i, const float rmn, const float rmx); void SetInEfficiency(float ineff = 0.1) { mInEff = ineff; } void SetQAFileName(TString filename = 0.1) { mQAFileName = filename; } void SetFillHist(const bool hist = false) { mHist = hist; } - + void setGEANTPassthrough(bool passthrough = false) { mGEANTPassthrough = passthrough; } private: void FillSilicon(StEvent *event); @@ -40,9 +36,9 @@ class StFstFastSimMaker : public StMaker { int mNumR; int mNumPHI; int mNumSEC; - float mRaster; float mInEff; bool mHist; + bool mGEANTPassthrough; TString mQAFileName; TH3F *hTrutHitYXDisk; @@ -67,9 +63,4 @@ class StFstFastSimMaker : public StMaker { ClassDef(StFstFastSimMaker, 0) }; -inline const char *StFstFastSimMaker::GetCVS() const { - static const char cvs[] = "Tag $Name: $ $Id: StFstFastSimMaker.h,v 1.1 2021/03/26 13:58:21 jdb Exp $ built " __DATE__ " " __TIME__; - return cvs; -} - #endif From 50de45374bc11586edd3f771e2c962895b544688 Mon Sep 17 00:00:00 2001 From: Gene Van Buren <85305093+genevb@users.noreply.github.com> Date: Thu, 29 Aug 2024 14:28:09 -0400 Subject: [PATCH 37/45] Setup new BSMD histograms for QA (Saskia M.) (#708) This PR provides additional QA histograms with more detailed QA of the BSMD. Code updates provided by Saskia Mioduszewski. I have also compiled and tested that it all works. Additional tweaks may come later as accumulated statistics from FastOffline provide feedback on the efficacy of these plots. --- StRoot/StAnalysisUtilities/StHistUtil.cxx | 11 +++++++ StRoot/St_QA_Maker/QAhlist_logy.h | 2 ++ StRoot/St_QA_Maker/QAhlist_subsystems.h | 30 +++++++++-------- StRoot/St_QA_Maker/StEventQAMaker.cxx | 21 +++++++++++- StRoot/St_QA_Maker/StQABookHist.cxx | 40 ++++++++++++++++++++++- StRoot/St_QA_Maker/StQABookHist.h | 4 +++ 6 files changed, 92 insertions(+), 16 deletions(-) diff --git a/StRoot/StAnalysisUtilities/StHistUtil.cxx b/StRoot/StAnalysisUtilities/StHistUtil.cxx index 3d12eda3d6c..586a9a6ac15 100644 --- a/StRoot/StAnalysisUtilities/StHistUtil.cxx +++ b/StRoot/StAnalysisUtilities/StHistUtil.cxx @@ -960,11 +960,17 @@ Int_t StHistUtil::DrawHists(const Char_t *dirName) { } else graphPad->cd(m_QAShiftMode ? 0 : curPad); // set x & y grid off by default + TRegexp bsmdPerModule("bsmd.*PerModule"); gPad->SetGridy(0); if (oName.Contains("H_matchCand")) { gPad->SetGridx(1); gStyle->SetGridStyle(6); gStyle->SetGridColor(kOrange); + } else if (oName.Contains(bsmdPerModule)) { + hobj->GetXaxis()->SetNdivisions(15); + hobj->GetXaxis()->SetLabelSize(0.03); + hobj->GetXaxis()->SetTitle("Module Number"); + gPad->SetGridx(); } else { gPad->SetGridx(0); gStyle->SetGridStyle(3); @@ -972,6 +978,7 @@ Int_t StHistUtil::DrawHists(const Char_t *dirName) { } // set stats to draw + TRegexp bsmd2DPerModule("bsmd.*Strip.*PerModule"); if (oName.Contains("TpcSector") || oName.Contains("PointRPTpc") || oName.Contains("PointXYTpc") || @@ -979,6 +986,10 @@ Int_t StHistUtil::DrawHists(const Char_t *dirName) { gStyle->SetOptStat(11); } else if (oName.Contains("NullPrim")) { gStyle->SetOptStat(1111); + } else if (oName.Contains(bsmd2DPerModule)) { + gStyle->SetOptStat(0); + hobj->GetYaxis()->SetTitle("Strip Within Module"); + hobj->GetYaxis()->SetTitleOffset(1.4); } else { gStyle->SetOptStat(111111); } diff --git a/StRoot/St_QA_Maker/QAhlist_logy.h b/StRoot/St_QA_Maker/QAhlist_logy.h index e97516d24f6..eceb4f200cc 100644 --- a/StRoot/St_QA_Maker/QAhlist_logy.h +++ b/StRoot/St_QA_Maker/QAhlist_logy.h @@ -299,6 +299,8 @@ "bemcAdc", "bsmdeAdc", "bsmdpAdc", + "bsmdeEnergy", + "bsmdpEnergy", "bemcClNum", "bemcClEnergy", "EmcCat4_Point_Energy", diff --git a/StRoot/St_QA_Maker/QAhlist_subsystems.h b/StRoot/St_QA_Maker/QAhlist_subsystems.h index 293969651bb..fec9da22bf7 100644 --- a/StRoot/St_QA_Maker/QAhlist_subsystems.h +++ b/StRoot/St_QA_Maker/QAhlist_subsystems.h @@ -75,12 +75,26 @@ ":emc:bprsEnergy2D", ":emc:bprsAdc", ":emc:bprsEnergy", + ":bsmd:bsmdeWest1HitsPerModule", + ":bsmd:bsmdeWest1StripHitsPerModule", + ":bsmd:bsmdeWest2HitsPerModule", + ":bsmd:bsmdeWest2StripHitsPerModule", + ":bsmd:bsmdeEast1HitsPerModule", + ":bsmd:bsmdeEast1StripHitsPerModule", + ":bsmd:bsmdeEast2HitsPerModule", + ":bsmd:bsmdeEast2StripHitsPerModule", + ":bsmd:bsmdpWest1HitsPerModule", + ":bsmd:bsmdpWest1StripHitsPerModule", + ":bsmd:bsmdpWest2HitsPerModule", + ":bsmd:bsmdpWest2StripHitsPerModule", + ":bsmd:bsmdpEast1HitsPerModule", + ":bsmd:bsmdpEast1StripHitsPerModule", + ":bsmd:bsmdpEast2HitsPerModule", + ":bsmd:bsmdpEast2StripHitsPerModule", ":bsmd:bsmdeHits", - ":bsmd:bsmdeEnergy2D", ":bsmd:bsmdeAdc", ":bsmd:bsmdeEnergy", ":bsmd:bsmdpHits", - ":bsmd:bsmdpEnergy2D", ":bsmd:bsmdpAdc", ":bsmd:bsmdpEnergy", ":emc:EmcNcluster", @@ -99,18 +113,6 @@ ":emc:bprsClEnergy", ":emc:bprsEta", ":emc:bprsPhi", - ":bsmd:bsmde_cluster", - ":bsmd:bsmde_cluster_energy", - ":bsmd:bsmdeClNum", - ":bsmd:bsmdeClEnergy", - ":bsmd:bsmdeEta", - ":bsmd:bsmdePhi", - ":bsmd:bsmdp_cluster", - ":bsmd:bsmdp_cluster_energy", - ":bsmd:bsmdpClNum", - ":bsmd:bsmdpClEnergy", - ":bsmd:bsmdpEta", - ":bsmd:bsmdpPhi", ":emc:EmcCat1_Point_Energy", ":emc:EmcCat1_Point_Eta", ":emc:EmcCat1_Point_Phi", diff --git a/StRoot/St_QA_Maker/StEventQAMaker.cxx b/StRoot/St_QA_Maker/StEventQAMaker.cxx index b25f8942723..b053f2346ea 100644 --- a/StRoot/St_QA_Maker/StEventQAMaker.cxx +++ b/StRoot/St_QA_Maker/StEventQAMaker.cxx @@ -2059,13 +2059,17 @@ void StEventQAMaker::MakeHistEMC() { if(module) { StSPtrVecEmcRawHit& rawHit=module->hits(); - Int_t m,e,s,adc; + Int_t m,e,s,adc,sId,stripInMod; Float_t eta(0),phi(0),E(0); nh += rawHit.size(); for(UInt_t k=0;kmodule(); e = rawHit[k]->eta(); s = rawHit[k]->sub(); + emcGeom[i]->getId(m, e, s, sId); + stripInMod = sId % 150; // only used for BSMD + if (stripInMod==0) stripInMod=150; + // cout << "strip Id = " << sId << ", strip in Module = " << stripInMod << endl; if (s == -1) s = 1; // case of smde adc = rawHit[k]->adc(); E = rawHit[k]->energy(); @@ -2075,6 +2079,21 @@ void StEventQAMaker::MakeHistEMC() { hists->m_emc_energy2D[i]->Fill(eta,phi,E); hists->m_emc_adc[i]->Fill(float(adc)); hists->m_emc_energy[i]->Fill(E); + + if (i>1) { // BSMD module hists + + Int_t modIndex = (m-1)/30; + Int_t histIndex = modIndex; + if (i>2) histIndex = modIndex + 4; + + hists->m_emc_hits_per_module[histIndex]->Fill(m); + hists->m_emc_energy_per_module[histIndex]->Fill(m,E); + hists->m_emc_strip_hits_per_module[histIndex]->Fill(m,stripInMod); + hists->m_emc_strip_energy_per_module[histIndex]->Fill(m,stripInMod,E); + + } + + energy += E; } } diff --git a/StRoot/St_QA_Maker/StQABookHist.cxx b/StRoot/St_QA_Maker/StQABookHist.cxx index 042f1ae8cdf..0581c446b85 100644 --- a/StRoot/St_QA_Maker/StQABookHist.cxx +++ b/StRoot/St_QA_Maker/StQABookHist.cxx @@ -771,6 +771,14 @@ StQABookHist::StQABookHist(const char* type) : QAHistType(type) { m_emc_energy[i]=0; //! } +// for EMC-BSMD hits + for (i=0; i<8; i++) { + m_emc_hits_per_module[i]=0; //! + m_emc_energy_per_module[i]=0; //! + m_emc_strip_hits_per_module[i]=0; //! + m_emc_strip_energy_per_module[i]=0; //! + } + // for EMC cluster finder m_emc_ncl=0; //! m_emc_etotCl=0; //! @@ -2014,6 +2022,12 @@ void StQABookHist::BookHistEMC(){ const Char_t* tit={"Barrel"}; const Int_t nx[4] = {40,40,300,20}; const Int_t ny[4] = {120, 120, 60, 900}; + + // for BSMD per-module histos + Axis_t ModNumLo[4] = {1.,31.,61.,91.}; + Axis_t ModNumHi[4] = {31.,61.,91.,121.}; + const TString PerModuleHistName[4] = {"West1","West2","East1","East2"}; + Float_t rpi = M_PI + 0.00001; TString name, title; TArrayD *xb = StEmcMath::binForSmde(); @@ -2025,7 +2039,7 @@ void StQABookHist::BookHistEMC(){ else m_emc_hits[i] = QAH::H2F(name,title, nx[i],-1.,+1., ny[i],-rpi, rpi); name = detname[i] + "Energy2D"; - title = tit + detname[i] + " energy dist. in eta&phi"; + title = tit + detname[i] + " energy dist. in eta-phi"; if(i==2) m_emc_energy2D[i] = QAH::H2F(name,title, xb->GetSize()-1,xb->GetArray(), ny[i],-rpi,rpi); else m_emc_energy2D[i] = QAH::H2F(name,title, nx[i],-1.,+1., ny[i],-rpi, rpi); @@ -2039,6 +2053,30 @@ void StQABookHist::BookHistEMC(){ } delete xb; + for(Int_t i=2; i<4; i++){ // Detector ID for BSMDE and BSMDP (BSMD eta and phi) + for (Int_t j=0; j<4; j++){ // split 120 modules into 4 histos + + Int_t k = j; + if (i>2) k = j + 4; + + name = detname[i] + PerModuleHistName[j] + "HitsPerModule"; + title = tit + detname[i] + " " + PerModuleHistName[j] + " - hits per module"; + m_emc_hits_per_module[k] = QAH::H1F(name,title, 30, ModNumLo[j], ModNumHi[j]); + + name = detname[i] + PerModuleHistName[j] + "EnergyPerModule"; + title = tit + detname[i] + " " + PerModuleHistName[j] + " - energy-weighted hits per module"; + m_emc_energy_per_module[k] = QAH::H1F(name,title, 30, ModNumLo[j], ModNumHi[j]); + + name = detname[i] + PerModuleHistName[j] + "StripHitsPerModule"; + title = tit + detname[i] + " " + PerModuleHistName[j] + " - hits in strip (within mod) vs. mod"; + m_emc_strip_hits_per_module[k] = QAH::H2F(name,title, 30, ModNumLo[j], ModNumHi[j], 150, 1., 151.); + + name = detname[i] + PerModuleHistName[j] + "StripEnergyPerModule"; + title = tit + detname[i] + " " + PerModuleHistName[j] + " - energy in strip (within mod) vs. mod"; + m_emc_strip_energy_per_module[k] = QAH::H2F(name,title, 30, ModNumLo[j], ModNumHi[j], 150, 1., 151.); + } + } + // Book the hists for cluster finder Int_t greta[4]={40,40,300,20}; // eta bins Int_t grphi[4]={120,120,60,900}; // phi bins => 16-apr by PAI diff --git a/StRoot/St_QA_Maker/StQABookHist.h b/StRoot/St_QA_Maker/StQABookHist.h index 552d33b0794..f151c6055dc 100644 --- a/StRoot/St_QA_Maker/StQABookHist.h +++ b/StRoot/St_QA_Maker/StQABookHist.h @@ -658,6 +658,10 @@ class StQABookHist : public TObject { TH2F *m_emc_energy2D[4]; //! TH1F *m_emc_adc[4]; //! TH1F *m_emc_energy[4]; //! + TH1F *m_emc_hits_per_module[8]; // SM added for BSMD eta and phi, West and East Barrels, split into 30 modules each + TH1F *m_emc_energy_per_module[8]; // SM added for BSMD eta and phi, West and East Barrels, split into 30 modules each + TH2F *m_emc_strip_hits_per_module[8]; // SM added for BSMD eta and phi, West and East Barrels, split into 30 modules each + TH2F *m_emc_strip_energy_per_module[8]; // SM added for BSMD eta and phi, West and East Barrels, split into 30 modules each // Hists for EMC cluster finder TH2F *m_emc_ncl; //! From 4a77f5c6d96e9ba2898c7e7b97f7c26c1de81f29 Mon Sep 17 00:00:00 2001 From: YannickSoehngen <60179883+YannickSoehngen@users.noreply.github.com> Date: Thu, 12 Sep 2024 17:19:58 +0200 Subject: [PATCH 38/45] Fix match flag and efficiency (#703) New match flag scheme for picoDsts and fix of overlap matching Comments regarding functionality were addressed, changes addressing style will be taken care of in full scale in follow up PR. --------- Co-authored-by: Yannick Soehngen Co-authored-by: Yannick Soehngen Co-authored-by: Dmitri Smirnov Co-authored-by: Yannick Soehngen Co-authored-by: Yannick Soehngen Co-authored-by: Yannick Soehngen Co-authored-by: Yannick Soehngen Co-authored-by: Yannick Soehngen Co-authored-by: Yannick Soehngen Co-authored-by: Gene Van Buren <85305093+genevb@users.noreply.github.com> --- StRoot/StETofMatchMaker/StETofMatchMaker.cxx | 238 ++++++++++++++----- StRoot/StETofMatchMaker/StETofMatchMaker.h | 1 + 2 files changed, 175 insertions(+), 64 deletions(-) diff --git a/StRoot/StETofMatchMaker/StETofMatchMaker.cxx b/StRoot/StETofMatchMaker/StETofMatchMaker.cxx index ac1472fcfa4..f497589bf49 100644 --- a/StRoot/StETofMatchMaker/StETofMatchMaker.cxx +++ b/StRoot/StETofMatchMaker/StETofMatchMaker.cxx @@ -3234,8 +3234,7 @@ void StETofMatchMaker::checkClockJumps() //--------------------------------------------------------------------------- void StETofMatchMaker::sortMatchCases( eTofHitVec inputVec , std::map< Int_t, eTofHitVec >& outputMap ) -{ - +{ // sort & flag Match candidates @@ -3248,77 +3247,59 @@ StETofMatchMaker::sortMatchCases( eTofHitVec inputVec , std::map< Int_t, eTofHi MMMap.clear(); eTofHitVec ssVec; - - // get multi Hit sets - // int deltaSize = 0; + // get multi Hit sets eTofHitVecIter tempIter = tempVec.begin(); - eTofHitVecIter erasedIter = erasedVec.begin(); - if(tempVec.size() < 1 ) return; + + eTofHitVec storeVecTmp; + + while(tempVec.size() > 0){ + + std::vector< int > trackIdVec; + std::vector< int > hitIdVec; + trackIdVec.clear(); + hitIdVec.clear(); + tempIter = tempVec.begin(); + storeVecTmp.push_back(tempVec.at(0)); + trackIdVec.push_back(tempVec.at(0).trackId); + hitIdVec.push_back(tempVec.at(0).index2ETofHit); + tempVec.erase(tempVec.begin()); + bool done = false; + + while(!done){ + + unsigned int sizeOld = storeVecTmp.size(); + unsigned int size = tempVec.size(); + tempIter= tempVec.begin(); + + for(unsigned int i=0; i < size; i++){ + + if( (std::find(trackIdVec.begin(), trackIdVec.end(), tempVec.at(i).trackId) != trackIdVec.end()) || (std::find(hitIdVec.begin(), hitIdVec.end(), tempVec.at(i).index2ETofHit) != hitIdVec.end()) ){ + + storeVecTmp.push_back(tempVec.at(i)); + trackIdVec.push_back(tempVec.at(i).trackId); + hitIdVec.push_back(tempVec.at(i).index2ETofHit); + tempVec.erase(tempIter); + + i = 0; + size = tempVec.size(); + tempIter = tempVec.begin(); + }else{ + tempIter++; + } + } + done = ( sizeOld == storeVecTmp.size() ); - while( tempVec.size() != 0 ) { - - tempIter = tempVec.begin(); - erasedIter = erasedVec.begin(); - - - tempMMVec.push_back(*tempIter); - erasedVec.erase( erasedIter ); - - // int sizeOld = tempMMVec.size(); - int count =0; - int countwhile = 0; - - for(unsigned int s =0; s < tempMMVec.size(); s++){ - - count++; - - erasedIter = erasedVec.begin(); - - if(erasedVec.size() <= 0 ) continue; - - countwhile = 0; - - while( erasedIter != erasedVec.end() ) { - - countwhile++; - - if(tempMMVec.at(s).trackId == erasedIter->trackId && tempMMVec.at(s).index2ETofHit == erasedIter->index2ETofHit){ - - erasedVec.erase( erasedIter ); - erasedIter++; - continue;} - if(tempMMVec.at(s).trackId == erasedIter->trackId || tempMMVec.at(s).index2ETofHit == erasedIter->index2ETofHit){ - if(!mIsSim){ - // erasedIter->matchFlag = 0; - } - tempMMVec.push_back(*erasedIter); - - erasedVec.erase( erasedIter ); - - } - if( erasedVec.size() <= 0 ) break; - if( erasedIter == erasedVec.end()) break; - erasedIter++; - - } //while inner - - }// for - - // deltaSize = sizeOld - tempMMVec.size(); + }// while done - MMMap[tempMMVec.begin()->trackId] = tempMMVec; - tempMMVec.clear(); + MMMap[storeVecTmp.begin()->trackId] = storeVecTmp; + storeVecTmp.clear(); - tempVec = erasedVec; - } - + }// while all hits on counter outputMap = MMMap; - - } //--------------------------------------------------------------------------- void @@ -3926,4 +3907,133 @@ StETofMatchMaker::sortandcluster(eTofHitVec& matchCandVec , eTofHitVec& detector } }// loop over MMMap }//loop over counters + + sortOutOlDoubles(finalMatchVec); +} + +void +StETofMatchMaker::sortOutOlDoubles(eTofHitVec& finalMatchVec){ + + eTofHitVec overlapHitVec; + + eTofHitVec tempVecOL = finalMatchVec; + + std::vector trackIdVec; + + for(unsigned int i =0; i< finalMatchVec.size(); i++){ + + if( !(std::find(trackIdVec.begin(), trackIdVec.end(), finalMatchVec.at(i).trackId) != trackIdVec.end())){ + + trackIdVec.push_back(finalMatchVec.at(i).trackId); + + int counterId1 = (finalMatchVec.at(i).sector*100) + (finalMatchVec.at(i).plane*10) + (finalMatchVec.at(i).counter); + + for(unsigned int j =0; j< finalMatchVec.size(); j++){ + + int counterId2 = (finalMatchVec.at(j).sector*100) + (finalMatchVec.at(j).plane*10) + (finalMatchVec.at(j).counter); + + if(counterId1 != counterId2 && finalMatchVec.at(i).trackId == finalMatchVec.at(j).trackId){ + + if(!(finalMatchVec.at(j).matchFlag % 2)) finalMatchVec.at(j).matchFlag++; + if(!(finalMatchVec.at(i).matchFlag % 2)) finalMatchVec.at(i).matchFlag++; + + } + } + } + } + + eTofHitVec tmpVec; + eTofHitVec OlVec; + std::map< int , eTofHitVec > overlapHitMap; + + tmpVec = finalMatchVec; + finalMatchVec.clear(); + finalMatchVec.resize(0); + + for(unsigned int i=0; i< tmpVec.size(); i++){ + + if(tmpVec.at(i).matchFlag%2 == 0){ + finalMatchVec.push_back(tmpVec.at(i)); + }else{ + OlVec.push_back(tmpVec.at(i)); + } + } + + // sort out OlVec + for(unsigned int i =0; i < OlVec.size(); i++){ + overlapHitMap[OlVec.at(i).trackId].push_back(OlVec.at(i)); + } + + map::iterator it; + + for (it = overlapHitMap.begin(); it != overlapHitMap.end(); it++){ + + eTofHitVec trackVec = it->second; + int ind_best = 0; + int dr_best = 9999; + + for(unsigned int n=0; n< trackVec.size();n++){ + + float dr = sqrt((trackVec.at(n).deltaX * trackVec.at(n).deltaX ) + (trackVec.at(n).deltaY * trackVec.at(n).deltaY )); + + if(dr < dr_best){ + dr_best=dr; + ind_best=n; + } + } + finalMatchVec.push_back(trackVec.at(ind_best)); + } + + //fix matchFlags + // New match-flag scheme provides information on hit-type, match case, and overlap + // 0: no valid match, otherwise 3 digits encode at first position hit type , at second position overlap info and at third position match type + // hit types : 0 = single sided hits only (time resolution about 25 ps lower than for normal hits) + // hit types : 1 = single sided and normal hits got merged into "mixed hit" for matching + // hit types : 2 = normal hits only (best quality , most common case) + // overlap info : 0 = hit has no contribution from overlap + // overlap info : 1 = hit has only contributions from overlap + // overlap info : 2 = hit has contributions from inside and outside of overlap region + // match case : 0 = no match + // match case : 1 = match from cluster of multiple hits and multiple tracks close in space ( ambiguities leave room for missmatches -> frequent case for most central events!!) + // match case : 2 = single hit could have been matched to multiple tracks + // match case : 3 = single track could have been matched to multiple hits + // match case : 4 = single track matched to single hit ( no ambiguity -> best quality) + // example :: matchFlag = 204 -> 2 = only normal hits, 0 = not in overlap, 4 = single track single hit match + + for(unsigned int i =0; i< finalMatchVec.size(); i++){ + + char singlemixdouble = 9; + char matchcase = 9; + char isOl = 9; + + switch (finalMatchVec.at(i).matchFlag / 100) { + case 1 : matchcase = 4; break; + case 2 : matchcase = 3; break; + case 3 : matchcase = 2; break; + case 4 : matchcase = 1; break; + default : { LOG_WARN << "Errant ETOF match flag for matchcase!" << endm; } + } + + isOl = 1 - ( finalMatchVec.at(i).matchFlag % 2 ); + + switch (finalMatchVec.at(i).matchFlag % 100) { + case 10 : + case 11 : + case 30 : + case 31 : singlemixdouble = 2; break; + case 20 : + case 21 : + case 40 : + case 41 : singlemixdouble = 0; break; + case 50 : + case 51 : singlemixdouble = 1; break; + default : { LOG_WARN << "Errant ETOF match flag for singlemixdouble!" << endm; } + } + + char newFlag = (singlemixdouble*100) + (isOl*10) + (matchcase); + + if(singlemixdouble == 9 || isOl == 9 || matchcase == 9) newFlag = 0; + + finalMatchVec.at(i).matchFlag = newFlag; + } } diff --git a/StRoot/StETofMatchMaker/StETofMatchMaker.h b/StRoot/StETofMatchMaker/StETofMatchMaker.h index ecd274085eb..df198ab880a 100644 --- a/StRoot/StETofMatchMaker/StETofMatchMaker.h +++ b/StRoot/StETofMatchMaker/StETofMatchMaker.h @@ -166,6 +166,7 @@ class StETofMatchMaker : public StMaker { void sortandcluster(eTofHitVec& matchCandVec , eTofHitVec& detectorHitVec , eTofHitVec& intersectionVec , eTofHitVec& finalMatchVec); void sortMatchCases( eTofHitVec inputVec , std::map< Int_t, eTofHitVec >& outputMap ); + void sortOutOlDoubles( eTofHitVec& finalMatchVec); double startTimeBTof(); double startTimeETof( const eTofHitVec& finalMatchVec, unsigned int& nCand_etofT0 ); From ef11af1532270f70464acb32bf95081fead2eafd Mon Sep 17 00:00:00 2001 From: dkapukchyan Date: Wed, 2 Oct 2024 09:40:50 -0700 Subject: [PATCH 39/45] Modify StEpdHitMaker to read EpdHits from MuDst trigger data (#710) Modified and added ability to StEpdHitMaker to make EPD hit collection by reading trigger data from MuDst trees. --- StRoot/StEpdHitMaker/StEpdHitMaker.cxx | 39 ++++++++++++++++++-------- StRoot/StEpdHitMaker/StEpdHitMaker.h | 11 ++++++-- 2 files changed, 36 insertions(+), 14 deletions(-) diff --git a/StRoot/StEpdHitMaker/StEpdHitMaker.cxx b/StRoot/StEpdHitMaker/StEpdHitMaker.cxx index c17a34d4d86..2c0b37a07bd 100644 --- a/StRoot/StEpdHitMaker/StEpdHitMaker.cxx +++ b/StRoot/StEpdHitMaker/StEpdHitMaker.cxx @@ -23,6 +23,7 @@ #include "StEvent/StEpdCollection.h" #include "StEpdDbMaker/StEpdDbMaker.h" +#include "StMuDSTMaker/COMMON/StMuTypes.hh" #include #include @@ -47,6 +48,13 @@ int StEpdHitMaker::Init(){ int StEpdHitMaker::Make(){ mEventCounter++ ; mTriggerEventCounter++; + if( mReadMuDst ){ + StMuDst* mudst = (StMuDst*)GetInputDS("MuDst"); + if(!mudst){LOG_ERROR<<"StEpdHitMaker::GetEpdCollection found no StMuDst"<epdHits(); + if( epdhits!=0 && epdhits->GetEntriesFast()!=0 ){ return kStOk; } //If processing MuDsts and non-zero hits exist in MuDst then stop and just use those hits otherwise fill StEvent + } + mTriggerData = this->GetTriggerData(); if (!mTriggerData){ LOG_ERROR << "StEpdHitMaker::Make - no TriggerData object" << endm; @@ -81,13 +89,22 @@ int StEpdHitMaker::Finish(){ } //---------------------------------------------- -StTriggerData* StEpdHitMaker::GetTriggerData(){ - StTriggerData* trg=0; - mStEvent = dynamic_cast (GetInputDS("StEvent")); // this is how the StBtofHitMaker does it. - if (mStEvent){ - trg = mStEvent->triggerData(); +const StTriggerData* StEpdHitMaker::GetTriggerData(){ + const StTriggerData* trg=0; + if( mReadMuDst ){ + StMuDst* mudst = (StMuDst*)GetInputDS("MuDst"); + if( mudst==0 ){ LOG_ERROR << "StEpdHitMaker::GetTriggerData - !StMuDst" << endm; return 0; } + StMuEvent* muevent = mudst->event(); + if( muevent==0 ){ LOG_ERROR <<"StEpdHitMaker::GetTriggerData - !StMuEvent" <triggerData(); } + } + else{ + mStEvent = dynamic_cast (GetInputDS("StEvent")); // this is how the StBtofHitMaker does it. + if (mStEvent){ + trg = mStEvent->triggerData(); + } + else {LOG_WARN << "No StEvent found by StEpdHitMaker::GetTriggerData" << endm;} } - else {LOG_WARN << "No StEvent found by StEpdHitMaker::GetTriggerData" << endm;} return trg; } @@ -95,6 +112,7 @@ StTriggerData* StEpdHitMaker::GetTriggerData(){ // this is patterned after the StBTofHitMaker StEpdCollection* StEpdHitMaker::GetEpdCollection(){ StEpdCollection* epdCollection = 0; + //This will get executed if no epdhits from mudsts. This way it will still generate the epd collection mStEvent = dynamic_cast (GetInputDS("StEvent")); // this is how the StBtofHitMaker does it. if (mStEvent){ epdCollection = mStEvent->epdCollection(); @@ -104,20 +122,17 @@ StEpdCollection* StEpdHitMaker::GetEpdCollection(){ epdCollection = new StEpdCollection(); mStEvent->setEpdCollection(epdCollection); } - else { + else { LOG_INFO << "StEpdHitMaker::GetEpdCollection - StEvent already has a StEpdCollection - not making a new one" << endm; } } - else { - LOG_WARN << "No StEvent found by StEpdHitMaker::GetEpdCollection" << endm; - } - + else{ LOG_WARN << "No StEvent found by StEpdHitMaker::GetEpdCollection" << endm; } return epdCollection; } void StEpdHitMaker::FillStEpdData(){ - StTriggerData* trg=mTriggerData; + const StTriggerData* trg=mTriggerData; // This is for BBC. We can do this if we ever have a StBbc class. // for (Int_t ew=0; ew<2; ew++){ diff --git a/StRoot/StEpdHitMaker/StEpdHitMaker.h b/StRoot/StEpdHitMaker/StEpdHitMaker.h index 5a0c6ceefc9..bad26f3aa48 100644 --- a/StRoot/StEpdHitMaker/StEpdHitMaker.h +++ b/StRoot/StEpdHitMaker/StEpdHitMaker.h @@ -13,6 +13,10 @@ If it is not there, it creates one and fills it from the StTriggerData object and info from the StEpdDbMaker (database) + \author David Kapukchyan + \date 10 July 2024 + It can also process trigger data from Mudst data by calling #setReadMuDst(). Need to call StEventMaker to make it work right though since this maker will still fill into StEvent. This was done so StEvent will clean the collection from event to event. + */ @@ -39,11 +43,13 @@ class StEpdHitMaker : public StMaker { /// Finish does nothing right now virtual int Finish(); + void setReadMuDst(bool value=true){ mReadMuDst=value; } + /// Returns the collection of StEpdHits in the event StEpdCollection* GetEpdCollection(); // collection of StEpdHit objects /// Returns a pointer to the StTriggerData object - StTriggerData* GetTriggerData(); + const StTriggerData* GetTriggerData(); /// Returns a pointer to the StEpdDbMaker StEpdDbMaker* GetEpdDbMaker(); @@ -62,10 +68,11 @@ class StEpdHitMaker : public StMaker { int mEventCounter; /// simple event counter int mTriggerEventCounter; /// another event counter. At the moment, it is redundant with mEventCounter StEpdCollection* mEpdCollection; - StTriggerData* mTriggerData; + const StTriggerData* mTriggerData; StEpdDbMaker* mEpdDbMaker; StEvent* mStEvent; + bool mReadMuDst = false; // static const int mNPREPOST=2; From 5e764be71087349708972e08bf0c35d8b45c413a Mon Sep 17 00:00:00 2001 From: Dmitry Arkhipkin Date: Wed, 2 Oct 2024 15:09:29 -0400 Subject: [PATCH 40/45] new ETOF table for Yannick (#712) Subj. A new Offline DB table was created for Yannick. Let's see if 4MB records are manageable... https://drupal.star.bnl.gov/STAR/subsys/etof/etof-database-tables/etof-get4state --- StDb/idl/etofGet4State.idl | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 StDb/idl/etofGet4State.idl diff --git a/StDb/idl/etofGet4State.idl b/StDb/idl/etofGet4State.idl new file mode 100644 index 00000000000..4df5fd33fd3 --- /dev/null +++ b/StDb/idl/etofGet4State.idl @@ -0,0 +1,16 @@ +/* etofGet4State.idl +* +* table: etofGet4State +* +* description:Get4States and state changes dealing with "Clock-Jumps" +* 0 - good, 1 - too early by 6.25ns ,2 too late by 6.25 ns,3 - bad +* +* author: Yannick Söhngen ( PI Heidelberg ) +* +*/ + +struct etofGet4State { + + unsigned long etofGet4State[1000000]; /* state of get4s, changes & event id */ + +}; \ No newline at end of file From f9b81a7b672da271be2d04430719e7969e59266a Mon Sep 17 00:00:00 2001 From: Gene Van Buren <85305093+genevb@users.noreply.github.com> Date: Mon, 7 Oct 2024 19:04:04 -0400 Subject: [PATCH 41/45] Setup AA chain for Run 24 (#713) Introduce `P2024a`, a copy of `P2023a` modified for the 2024 geometry, for the AuAu data taken at the end of Run 24. This is needed promptly for FastOffline. --- StRoot/StBFChain/BigFullChain.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/StRoot/StBFChain/BigFullChain.h b/StRoot/StBFChain/BigFullChain.h index e467550a794..a11ea2a7361 100644 --- a/StRoot/StBFChain/BigFullChain.h +++ b/StRoot/StBFChain/BigFullChain.h @@ -1055,6 +1055,10 @@ Bfc_st BFC[] = { // standard chains "B2024a,ITTF,BAna,ppOpt,ImpBToFt0Mode,VFPPVnoCTB,beamline3D,l3onl,epdhit,btof,mtd,emcDY2,ftt,fcs,trgd,ZDCvtx,analysis", "","","Production chain for year 2024 pp data - CorrY (+ l3, epd, mtd, btof, fcs, ftt, e/b-emc)",kFALSE}, + {"P2024a","" ,"", + "B2024a,ITTF,BAna,iTpcIT,VFMinuit,etofa,btof,mtd,l3onl,emcDY2,epdHit,trgd,ZDCvtx,analysis", + "","", "Base chain for year 2024 AA data - CorrY (+ l3, epd, mtd, b/etof, b-emc)",kFALSE}, + // Other chains/Calibration {"LaserCal0","" ,"","db,detDb,tpc_daq,tpcDb,tcl,globT,laser,LaserTest","","" From 3271996398d2017671e5edea596f9b660fc37a1c Mon Sep 17 00:00:00 2001 From: YannickSoehngen <60179883+YannickSoehngen@users.noreply.github.com> Date: Thu, 17 Oct 2024 16:42:45 +0200 Subject: [PATCH 42/45] Clock jump calibration (#711) Methods for retrieving get4 state from db and flagging calibrated hits --------- Co-authored-by: Yannick Soehngen Co-authored-by: Yannick Soehngen Co-authored-by: Dmitri Smirnov Co-authored-by: Yannick Soehngen Co-authored-by: Yannick Soehngen Co-authored-by: Yannick Soehngen Co-authored-by: Yannick Soehngen Co-authored-by: Yannick Soehngen Co-authored-by: Yannick Soehngen Co-authored-by: Gene Van Buren <85305093+genevb@users.noreply.github.com> --- StRoot/StETofCalibMaker/StETofCalibMaker.cxx | 388 +++++++++++++++++-- StRoot/StETofCalibMaker/StETofCalibMaker.h | 23 +- StRoot/StETofMatchMaker/StETofMatchMaker.cxx | 37 +- 3 files changed, 416 insertions(+), 32 deletions(-) diff --git a/StRoot/StETofCalibMaker/StETofCalibMaker.cxx b/StRoot/StETofCalibMaker/StETofCalibMaker.cxx index b706e396426..528d9a47d3e 100644 --- a/StRoot/StETofCalibMaker/StETofCalibMaker.cxx +++ b/StRoot/StETofCalibMaker/StETofCalibMaker.cxx @@ -80,6 +80,7 @@ #include "tables/St_etofResetTimeCorr_Table.h" #include "tables/St_etofPulserTotPeak_Table.h" #include "tables/St_etofPulserTimeDiffGbtx_Table.h" +#include "tables/St_etofGet4State_Table.h" namespace etofSlewing { const unsigned int nTotBins = 30; @@ -117,7 +118,17 @@ StETofCalibMaker::StETofCalibMaker( const char* name ) mUsePulserGbtxDiff( true ), mDoQA( false ), mDebug( false ), - mHistFileName( "" ) + mHistFileName( "" ), + mFileNameGet4State(""), + mStateVec(), + mStartVec(), + mGet4StateMap(), + mStateMapStart(0), + mStateMapStop(0), + mDbEntryStart(0), + mDbEntryStop(0), + mGlobalCounter(1) + { /// default constructor LOG_DEBUG << "StETofCalibMaker::ctor" << endm; @@ -132,9 +143,9 @@ StETofCalibMaker::StETofCalibMaker( const char* name ) mPulserPeakTot.clear(); mPulserTimeDiff.clear(); mPulserTimeDiffGbtx.clear(); - mNPulsersCounter.clear(); - mNStatusBitsCounter.clear(); - mPulserPresent.clear(); + mNPulsersCounter.clear(); + mNStatusBitsCounter.clear(); + mPulserPresent.clear(); mJumpingPulsers.clear(); @@ -177,6 +188,7 @@ StETofCalibMaker::InitRun( Int_t runnumber ) // -------------------------------------------------------------------------------------------- // initialize calibration parameters from parameter file (if filename is provided) or database: + // -- Get4 status map (Clock-Jump-Correction) // -- electronics-to-hardware map // -- status map // -- timing window @@ -188,6 +200,10 @@ StETofCalibMaker::InitRun( Int_t runnumber ) // -- reset time correction // -------------------------------------------------------------------------------------------- + //Get4 status map + + readGet4State(mGlobalCounter , 0); + // electronics-to-hardware map if( mFileNameElectronicsMap.empty() ) { LOG_INFO << "etofElectronicsMap: no filename provided --> load database table" << endm; @@ -1080,6 +1096,11 @@ StETofCalibMaker::FinishRun( Int_t runnumber ) mJumpingPulsers.clear(); + mGet4StateMap.clear(); + mGet4ZeroStateMap.clear(); + mMasterStartVec.clear(); + + return kStOk; } @@ -1106,6 +1127,35 @@ StETofCalibMaker::Make() mEvent = ( StEvent* ) GetInputDS( "StEvent" ); //mEvent = NULL; //don't check for StEvent for genDst.C testing. PW + //check if get4 state map is still valid for this event + + unsigned long int evtNr = GetEventNumber(); + if(mFileNameGet4State.empty()){ + //read from db + + if( evtNr > mDbEntryStop || evtNr < mDbEntryStart) readGet4State(mGlobalCounter , 99); + + }else{ + //read from file + short cnt = 0; + while( evtNr > mDbEntryStop || evtNr < mDbEntryStart){ + + cnt++; + if(cnt > 99){ + LOG_ERROR << " Get4 State File for event Nr:" << GetEventNumber() << "not found" << endm; + return kStFatal; + } + + short forward = 1; + if(evtNr < mDbEntryStart) forward = -1; + readGet4State(mGlobalCounter , forward); + } + + + } + checkGet4State( evtNr ); + + if ( mEvent ) { LOG_DEBUG << "Make(): running on StEvent" << endm; @@ -1238,12 +1288,8 @@ StETofCalibMaker::processStEvent() std::vector hasPulsersVec; //drag along pulser information - for( unsigned int iCounter = 0; iCounter < 108; iCounter++){ - if ( !(mNPulsersCounter.count(iCounter) ) ){ - hasPulsersVec.push_back(false); - }else{ - hasPulsersVec.push_back(mNPulsersCounter[iCounter] == 2); - } + for( unsigned int iCounter = 0; iCounter < 108; iCounter++){ + hasPulsersVec.push_back((mNPulsersCounter.count(iCounter) > 0) && (mNPulsersCounter[iCounter] == 2)); } if (hasPulsersVec.size() == 108){ //etofHeader->setHasPulsersVec(hasPulsersVec); // not working but not of relevance at the moment @@ -1406,12 +1452,8 @@ StETofCalibMaker::processMuDst() std::vector hasPulsersVec;// //drag along pulser information - for( unsigned int iCounter = 0; iCounter < 108; iCounter++){ - if ( !(mNPulsersCounter.count(iCounter) ) ){ - hasPulsersVec.push_back(false); - }else{ - hasPulsersVec.push_back(mNPulsersCounter[iCounter] == 2); - } + for( unsigned int iCounter = 0; iCounter < 108; iCounter++){ + hasPulsersVec.push_back((mNPulsersCounter.count(iCounter) > 0) && (mNPulsersCounter[iCounter] == 2)); } if (hasPulsersVec.size() == 108){ @@ -1421,6 +1463,11 @@ StETofCalibMaker::processMuDst() //fill good event flag into header for( unsigned int iGet4 = 0; iGet4 < 1728; iGet4++){ goodEventFlagVec.push_back(!etofHeader->missMatchFlagVec().at(iGet4)); + + //flag jumpwise inconsistent events/get4s + if(mGet4StateMap[iGet4] == 3){ + goodEventFlagVec.at(iGet4) = false; + } } if (goodEventFlagVec.size() == 1728){ @@ -1573,15 +1620,12 @@ StETofCalibMaker::flagPulserDigis( StETofDigi* aDigi, unsigned int index, std::m float totToPeak = aDigi->rawTot() - mPulserPeakTot.at( key ); float totToHalfPeak = aDigi->rawTot() - mPulserPeakTot.at( key ) * 0.5; - - if( timeToTrigger > mPulserWindow.at( aDigi->rocId() ).first && timeToTrigger < mPulserWindow.at( aDigi->rocId() ).second ) { - if( fabs( totToPeak ) < 25 || fabs( totToHalfPeak ) < 10 ) { - isPulserCand = true; - } - } + isPulserCand = ( timeToTrigger > mPulserWindow.at( aDigi->rocId() ).first && + timeToTrigger < mPulserWindow.at( aDigi->rocId() ).second && + ( fabs( totToPeak ) < 25 || fabs( totToHalfPeak ) < 10 ) ); + } - if( isPulserCand ) { pulserDigiMap[ key ].push_back( index ); } @@ -2119,14 +2163,28 @@ StETofCalibMaker::applyCalibration( StETofDigi* aDigi, StETofHeader* etofHeader aDigi->setCalibTot( calibTot ); + int get4Id = 144 * ( aDigi->sector() - 13 ) + 48 * ( aDigi->zPlane() -1 ) + 16 * ( aDigi->counter() - 1 ) + 8 * ( aDigi->side() - 1 ) + ( ( aDigi->strip() - 1 ) / 4 ); + + double stateCorr =0; + if(mGet4StateMap[get4Id] == 1) stateCorr = 6.25; + else if(mGet4StateMap[get4Id] == 2) stateCorr = -6.25; + // else if(mGet4StateMap[get4Id] == 3) stateCorr = 0.0; + double calibTime = aDigi->rawTime() - mResetTime - resetTimeCorr() - calibTimeOffset( aDigi ) - slewingTimeOffset( aDigi ) - - applyPulserOffset( aDigi ); - - aDigi->setCalibTime( calibTime ); - + - applyPulserOffset( aDigi ) + + stateCorr; + + + if(mGet4StateMap[get4Id] == 3){ + calibTime = 0; // mask digis with undefined state (e.g. one hit with jump and one without in same event) + + } + + aDigi->setCalibTime( calibTime ); + if( mDebug ) { // print out the new information LOG_DEBUG << "raw Time, ToT: " << aDigi->rawTime() << ", " << aDigi->rawTot() << endm; @@ -2609,3 +2667,279 @@ StETofCalibMaker::writeHistograms() LOG_INFO << "histogram file name is empty string --> cannot write histograms" << endm; } } + +//-------------------------------------------------------------------------------------------------------------------- + +void StETofCalibMaker::readGet4State(int fileNr, short forward){ + + bool fileZero = false; + + //Clean up last entry first + for(int i =0; i< eTofConst::nGet4sInSystem; i++){ + mStateVec[i].clear(); + mStartVec[i].clear(); + mGet4StateMap[i] = 0; + } + mStateMapStart=0; + mStateMapStop=0; + mDbEntryStop=0; + mMasterStartVec.clear(); + mMasterStartVec.resize(0); + + std::vector< unsigned long int > intVec; + + //first read + if(forward == 0) mGlobalCounter = 1; + //jump forward + else if(forward > 0) mGlobalCounter++; + //jump backward + else mGlobalCounter--; // forward < 0 + + if(mGlobalCounter == 0){ + mGlobalCounter++; + fileZero = true; + } + + if(mFileNameGet4State.empty()){ + + TDataSet* dbDataSet = GetDataBase( "Calibrations/etof/etofGet4State" ); + if( ! dbDataSet ) { + LOG_ERROR << "unable to get the get4 state map database" << endm; + return; + } + const int intsPerEntry = 1000000; + + St_etofGet4State* etofStateMap = static_cast< St_etofGet4State* > ( dbDataSet->Find( "etofGet4State" ) ); + if( !etofStateMap ) { + LOG_ERROR << "unable to get the get4 state map from the database" << endm; + return; + } + + etofGet4State_st* stateMapTable = etofStateMap->GetTable(); + + for( size_t i=0; i< intsPerEntry; i++ ) { + if(stateMapTable->etofGet4State[ i ] <= 0) break; + intVec.push_back( stateMapTable->etofGet4State[ i ]); + } + + }else{ + + std::ifstream paramFile; + + paramFile.open( mFileNameGet4State.c_str() ); + + if( !paramFile.is_open() ) { + LOG_ERROR << "unable to get the 'Get4State' parameters from file --> file does not exist" << endm; + return; + } + + unsigned long int temp; + while( paramFile >> temp ) { + intVec.push_back( temp ); + } + } + + std::vector startVec; + std::map> stateVec; + std::map> get4IdVec; + + decodeInt(intVec , mGet4StateMap , mGet4ZeroStateMap , startVec , mMasterStartVec , stateVec , get4IdVec); + + // fill stateMap & steering vecs with EvtZero entries: read in first 1728 states & times + for(int i = 0; i< eTofConst::nGet4sInSystem;i++){ + + for(unsigned int j=0; j< startVec.size(); j++){ + + unsigned long int key = startVec.at(j); + + for(unsigned int n =0; n < get4IdVec.at(key).size(); n++){ + + //steering vecs + if(i == get4IdVec.at(key).at(n)){ + mStateVec[i].push_back(stateVec.at(key).at(n)); + mStartVec[i].push_back(startVec.at(j)); + } + } + } + } + + //set map validity check evtids ... EvtZero states only valid to first change of state on any get4 + mStateMapStart = 0 ; + mStateMapStop = startVec.at(0); + mDbEntryStart = startVec.at(0); + mDbEntryStop = startVec.at((startVec.size()-1)); + + + if(fileZero){ + mDbEntryStart = 0; + } + + sort( mMasterStartVec.begin(), mMasterStartVec.end() ); + mMasterStartVec.erase( unique( mMasterStartVec.begin(), mMasterStartVec.end() ), mMasterStartVec.end() ); + + } + +// ------------------------------------------------------------------------------- + +void StETofCalibMaker::checkGet4State(unsigned long int eventNr){ + + if(eventNr >= mStateMapStart && eventNr < mStateMapStop) { + return; // stateMap still valid + } + + unsigned long int closestStop = 99999999; + unsigned long int closestStart = 0; + + //loop over stateMap + + for(unsigned int i =0; i< eTofConst::nGet4sInSystem; i++){ + + std::vector tmpStart = mStartVec[i]; + std::vector tmpState = mStateVec[i]; + + //find closest evtNr & state for each Get4 + unsigned int indexStart = 0; + short newState = 0; + + if (tmpStart.empty()) continue; + + auto lower = std::lower_bound(tmpStart.begin(), tmpStart.end(), eventNr); + indexStart = std::distance(tmpStart.begin(), lower); + if(indexStart > 0) indexStart--; + + //event past last change on get4 in entry -> keep last state in line + if(eventNr > tmpStart.at((tmpStart.size() -1))){ + indexStart = (tmpStart.size() -1); + } + + //if state change happens in this very event increase index by one to hit proper state + if((indexStart < (tmpStart.size() -1 )) && eventNr == tmpStart.at(indexStart + 1)){ + indexStart++; + } + + //get new state and push to map + newState = tmpState.at(indexStart); + + if(tmpStart.at(indexStart) > eventNr ) newState = mGet4ZeroStateMap[i]; + + mGet4StateMap[i] = newState; + + } //Get4 Loop + + // bool Found=false; + for(unsigned int z=0; z< mMasterStartVec.size();z++){ + + if(z == 0){ // first interval + closestStart = 0; + closestStop = mMasterStartVec.at(z); + + } else if(z == (mMasterStartVec.size()-1)){ // last interval + closestStart = mMasterStartVec.at(z); + closestStop = 99999999; + // Found = true; + + } else if(eventNr == mMasterStartVec.at(z) || + (eventNr < mMasterStartVec.at(z+1) && eventNr > mMasterStartVec.at(z))){ + closestStart = mMasterStartVec.at(z); + closestStop = mMasterStartVec.at(z+1); + // Found = true; + break; + } + + } + + mStateMapStart = closestStart; + mStateMapStop = closestStop; + + if(mStateMapStart == mDbEntryStop) { + + mStateMapStop = 99999999; + } + +} +//----------------------------------------------------- +void StETofCalibMaker::decodeInt( std::vector intVec ,std::map& mGet4StateMap ,std::map& mGet4ZeroStateMap ,std::vector& startVec ,std::vector& mMasterStartVec ,std::map>& stateVec ,std::map>& get4IdVec){ + + unsigned long int lastEvtId =0; + + for(unsigned int i = 0; i < intVec.size(); i++){ + + int tmp; + int stateInt1; + int stateInt2; + unsigned long int EvtId; + int Get4Id1; + int get4state1; + int Get4Id2; + int get4state2; + + // decode nonZero/stateChange ints ( int = 42.xxx.xxx.xxx = 2 states only) + switch (intVec.at(i) / 100000000) { + + case 42 : + tmp = intVec.at(i) % 4200000000; + stateInt1 = tmp / 10000; + stateInt2 = tmp % 10000; + + Get4Id1 = -1; + get4state1 = -1; + Get4Id2 = -1; + get4state2 = -1; + + if(stateInt1 < 6912){ + Get4Id1 = stateInt1 % eTofConst::nGet4sInSystem; + get4state1 = stateInt1 / eTofConst::nGet4sInSystem; + } + if(stateInt2 < 6912){ + Get4Id2 = stateInt2 % eTofConst::nGet4sInSystem; + get4state2 = stateInt2 / eTofConst::nGet4sInSystem; + } + + if(i < 864){ + mGet4StateMap[Get4Id1] = get4state1; + mGet4StateMap[Get4Id2] = get4state2; + mGet4ZeroStateMap[Get4Id1] = get4state1; + mGet4ZeroStateMap[Get4Id2] = get4state2; + } + stateVec[lastEvtId].push_back(get4state1); + get4IdVec[lastEvtId].push_back(Get4Id1); + stateVec[lastEvtId].push_back(get4state2); + get4IdVec[lastEvtId].push_back(Get4Id2); + + break; + + //decode eventnumber ( int = 40.xxx.xxx.xxx = event number ) + case 40: + + EvtId = intVec.at(i) % 4000000000; + + startVec.push_back(EvtId); + mMasterStartVec.push_back(EvtId); + + lastEvtId = EvtId; + + break; + + // decode nonZero/stateChange ints ( int = 41.xxx.x00.000 = 1 states only) + case 41: + + tmp = intVec.at(i) % 4100000000; + stateInt1 = tmp / 10000; + Get4Id1 = -1; + get4state1 = -1; + + if(stateInt1 < 6912) { + Get4Id1 = stateInt1 % eTofConst::nGet4sInSystem; + get4state1 = stateInt1 / eTofConst::nGet4sInSystem; + } + + stateVec[lastEvtId].push_back(get4state1); + get4IdVec[lastEvtId].push_back(Get4Id1); + + break; + + default: + LOG_ERROR << "Get4 state not well defined -> Check db / state file !" << endm; + } + } +} diff --git a/StRoot/StETofCalibMaker/StETofCalibMaker.h b/StRoot/StETofCalibMaker/StETofCalibMaker.h index 1b7b0d0eaca..bfab902152e 100644 --- a/StRoot/StETofCalibMaker/StETofCalibMaker.h +++ b/StRoot/StETofCalibMaker/StETofCalibMaker.h @@ -1,4 +1,4 @@ - /*************************************************************************** +/*************************************************************************** * * $Id: StETofCalibMaker.h,v 1.6 2019/12/19 02:19:13 fseck Exp $ * @@ -90,6 +90,8 @@ class StETofCalibMaker: public StMaker { void setStrictPulserHandling( const bool debug ); void setReferencePulserIndex( const int index ); + short GetState(int); + //moved to public to avoid problem with root6 struct StructStuckFwDigi{ Int_t geomId; @@ -138,6 +140,8 @@ class StETofCalibMaker: public StMaker { void setHistFileName(); void writeHistograms(); + void readGet4State(int fileNr, short forward); + void checkGet4State( unsigned long int eventNr); StEvent* mEvent; StMuDst* mMuDst; @@ -188,7 +192,7 @@ class StETofCalibMaker: public StMaker { std::vector< StructStuckFwDigi > mStuckFwDigi; // list of digis to ignore for the rest of the run due to stuck firmware - Bool_t mStrictPulserHandling; + Bool_t mStrictPulserHandling; Bool_t mUsePulserGbtxDiff; Bool_t mDoQA; Bool_t mDebug; @@ -196,14 +200,25 @@ class StETofCalibMaker: public StMaker { std::map< std::string, TH1* > mHistograms; + std::string mFileNameGet4State; + std::vector mStateVec[1728]; + std::vector mStartVec[1728]; + std::vector mMasterStartVec; + std::map mGet4StateMap; + std::map mGet4ZeroStateMap; + unsigned long int mStateMapStart; + unsigned long int mStateMapStop; + unsigned long int mDbEntryStart; + unsigned long int mDbEntryStop; + int mGlobalCounter; - + void decodeInt( std::vector intVec ,std::map& mGet4StateMap ,std::map& mGet4ZeroStateMap ,std::vector& startVec ,std::vector& mMasterStartVec ,std::map>& stateVec ,std::map>& get4IdVec); virtual const Char_t *GetCVS() const { static const char cvs[]="Tag $Name: $Id: built " __DATE__ " " __TIME__ ; return cvs; } ClassDef( StETofCalibMaker, 0 ) }; - +inline short StETofCalibMaker::GetState( int get4 ) { return mGet4StateMap.at(get4); } inline void StETofCalibMaker::setFileNameCalibParam( const char* fileName ) { mFileNameCalibParam = fileName; } inline void StETofCalibMaker::setFileNameElectronicsMap( const char* fileName ) { mFileNameElectronicsMap = fileName; } inline void StETofCalibMaker::setFileNameStatusMap( const char* fileName ) { mFileNameStatusMap = fileName; } diff --git a/StRoot/StETofMatchMaker/StETofMatchMaker.cxx b/StRoot/StETofMatchMaker/StETofMatchMaker.cxx index f497589bf49..70bb202e807 100644 --- a/StRoot/StETofMatchMaker/StETofMatchMaker.cxx +++ b/StRoot/StETofMatchMaker/StETofMatchMaker.cxx @@ -90,6 +90,7 @@ #include "StETofMatchMaker.h" #include "StETofHitMaker/StETofHitMaker.h" +#include "StETofCalibMaker/StETofCalibMaker.h" #include "StETofUtil/StETofGeometry.h" #include "StETofUtil/StETofConstants.h" @@ -3305,13 +3306,24 @@ StETofMatchMaker::sortMatchCases( eTofHitVec inputVec , std::map< Int_t, eTofHi void StETofMatchMaker::sortandcluster(eTofHitVec& matchCandVec , eTofHitVec& detectorHitVec , eTofHitVec& intersectionVec , eTofHitVec& finalMatchVec){ + + //flag Overlap-Hits & jumped Hits ------------------------------------------------------------------- - //flag Overlap-Hits ------------------------------------------------------------------- std::map< Int_t, eTofHitVec > overlapHitMap; eTofHitVec overlapHitVec; eTofHitVec tempVecOL = matchCandVec; eTofHitVecIter detHitIter; eTofHitVecIter detHitIter2; + + std::map< int, bool > jumpHitMap; + + for(unsigned int i=0; i 100){ + jumpHitMap[matchCandVec.at(i).index2ETofHit] = true; + }else{ + jumpHitMap[matchCandVec.at(i).index2ETofHit] = false; + } + } for( auto detHitIter = tempVecOL.begin(); detHitIter != tempVecOL.end(); ) { @@ -3908,6 +3920,28 @@ StETofMatchMaker::sortandcluster(eTofHitVec& matchCandVec , eTofHitVec& detector }// loop over MMMap }//loop over counters + //set clustersize for jumped hits: +100 if early , +200 if late, + 300 if still jumped + + for(unsigned int i=0;iGetState(keyGet4up) == 1 || mETofCalibMaker->GetState(keyGet4down) == 1){ + finalMatchVec.at(i).clusterSize += 100; + } + if(mETofCalibMaker->GetState(keyGet4up) == 2 || mETofCalibMaker->GetState(keyGet4down) == 2 ){ + finalMatchVec.at(i).clusterSize += 200; + } + } + sortOutOlDoubles(finalMatchVec); } @@ -4035,5 +4069,6 @@ StETofMatchMaker::sortOutOlDoubles(eTofHitVec& finalMatchVec){ if(singlemixdouble == 9 || isOl == 9 || matchcase == 9) newFlag = 0; finalMatchVec.at(i).matchFlag = newFlag; + } } From a34894eced1af8b404a25be5a5ea30dabd078ece Mon Sep 17 00:00:00 2001 From: Gene Van Buren <85305093+genevb@users.noreply.github.com> Date: Tue, 12 Nov 2024 22:00:51 -0500 Subject: [PATCH 43/45] No StMaker functions if no StMaker loaded (#693) In ROOT6, it isn't enough to just hide a class's functions inside an `if` clause checking the corresponding TClass's existence when the class isn't loaded. This can be demonstrated currently in SL24x by simply executing: ``` root4star -b -l -q ``` ...which produces an error when executing `rootlogoff.C` at quit. Maybe there are other solutions, but this simple proposal breaks `rootlogoff.C` into two parts, not even loading the second part unless the first part is true - test the existence of the StMaker class - execution of StMaker functions I welcome other proposals. --- StRoot/macros/rootlogoff.C | 5 +---- StRoot/macros/rootlogoff2.C | 6 ++++++ 2 files changed, 7 insertions(+), 4 deletions(-) create mode 100644 StRoot/macros/rootlogoff2.C diff --git a/StRoot/macros/rootlogoff.C b/StRoot/macros/rootlogoff.C index 661712dcac2..6fa2c7632d9 100644 --- a/StRoot/macros/rootlogoff.C +++ b/StRoot/macros/rootlogoff.C @@ -1,10 +1,7 @@ { if (TClassTable::GetDict("StMaker")) { - StMaker* mk = StMaker::GetChain(); - if (mk) { - mk->Finish(); - } + gROOT->Macro("rootlogoff2.C"); } std::cout << "\nThis is the end of STAR ROOT -- Goodbye\n" << std::endl; diff --git a/StRoot/macros/rootlogoff2.C b/StRoot/macros/rootlogoff2.C new file mode 100644 index 00000000000..1440421a1ea --- /dev/null +++ b/StRoot/macros/rootlogoff2.C @@ -0,0 +1,6 @@ +{ + StMaker* mk = StMaker::GetChain(); + if (mk) { + mk->Finish(); + } +} From 5f2e5acfb09473ca85976adca0e9cf87d3211a32 Mon Sep 17 00:00:00 2001 From: klendathu2k <56083924+klendathu2k@users.noreply.github.com> Date: Mon, 25 Nov 2024 16:56:39 -0500 Subject: [PATCH 44/45] Geometry y2021b (#714) --- StRoot/StChain/GeometryDbAliases.h | 1 + StarVMC/Geometry/StarGeo.xml | 27 +++++++++++++++++++++++++++ StarVMC/xgeometry/xgeometry.age | 3 +++ 3 files changed, 31 insertions(+) diff --git a/StRoot/StChain/GeometryDbAliases.h b/StRoot/StChain/GeometryDbAliases.h index c72964d3ddf..84e03344d98 100644 --- a/StRoot/StChain/GeometryDbAliases.h +++ b/StRoot/StChain/GeometryDbAliases.h @@ -155,6 +155,7 @@ static const DbAlias_t fDbAlias[] = {// geometry Comment old {"y2021", 20201215, 0, "y2021", "y2021 development geometry, AgML,xgeometry"}, {"y2021a", 20201215, 1, "y2021a", "y2021 first production geometry, AgML,xgeometry"}, + {"y2021b", 20201215, 2, "y2021b", "y2021 production geometry (FXT @ 200.7 cm), AgML,xgeometry"}, {"y2022", 20211015, 0, "y2022", "y2022 first cut geometry, AgML,xgeometry"}, {"y2022a", 20211015, 1, "y2022a", "y2022 production geometry, AgML,xgeometry"}, diff --git a/StarVMC/Geometry/StarGeo.xml b/StarVMC/Geometry/StarGeo.xml index 0b8c4da276a..33c1aabb091 100644 --- a/StarVMC/Geometry/StarGeo.xml +++ b/StarVMC/Geometry/StarGeo.xml @@ -324,6 +324,33 @@ + + + + + + + + + --> + + + + + + + + + + + + + + + + + + diff --git a/StarVMC/xgeometry/xgeometry.age b/StarVMC/xgeometry/xgeometry.age index abe543f0072..91ceeeb8d0e 100644 --- a/StarVMC/xgeometry/xgeometry.age +++ b/StarVMC/xgeometry/xgeometry.age @@ -2529,12 +2529,15 @@ If LL>0 case y2019 { y2019: y2019 first cut geometry; Geom = 'y2019 '; call geom_y2019;} case y2019a { y2019: y2019a production release; Geom = 'y2019a '; call geom_y2019a;} + case y2019b { y2019: y2019a production release; Geom = 'y2019b '; call geom_y2019b;} case y2020 { y2020: y2020 first cut geometry; Geom = 'y2020 '; call geom_y2020;} case y2020a { y2020a: y2020a production; Geom = 'y2020a '; call geom_y2020a;} + case y2020b { y2020b: y2020a production; Geom = 'y2020b '; call geom_y2020b;} case y2021 { y2021: y2021 first cut geometry; Geom = 'y2021 '; call geom_y2021;} case y2021a { y2021a: y2021 first production geometry; Geom = 'y2021a '; call geom_y2021a;} + case y2021b { y2021b: y2021 first production geometry; Geom = 'y2021b '; call geom_y2021b;} case y2022 { y2022: y2022 first cut geometry; Geom = 'y2022 '; call geom_y2022;} case y2022a { y2022a: y2022 first production geometry; Geom = 'y2022a '; call geom_y2022a;} From 252a5962fb705b57b9c3b9eac4213b27b6dabf95 Mon Sep 17 00:00:00 2001 From: Gene Van Buren <85305093+genevb@users.noreply.github.com> Date: Tue, 26 Nov 2024 07:33:34 -0500 Subject: [PATCH 45/45] chains for b versions of 2019-2021 geometries (#715) Goes along with PR #714 and commit 76329520deea6c856fd0304858ae44004750156f from several years ago. --- StRoot/StBFChain/BigFullChain.h | 39 +++++++++++++++++++++++++++++++-- 1 file changed, 37 insertions(+), 2 deletions(-) diff --git a/StRoot/StBFChain/BigFullChain.h b/StRoot/StBFChain/BigFullChain.h index a11ea2a7361..0a1d8b9eb15 100644 --- a/StRoot/StBFChain/BigFullChain.h +++ b/StRoot/StBFChain/BigFullChain.h @@ -993,6 +993,15 @@ Bfc_st BFC[] = { // standard chains "B2018a,ITTF,UseXgeom,BAna,VFMinuit,beamline3D,l3onl,emcDY2,epdHit,fpd,trgd,ZDCvtx,analysis" , "","","Base chain for year 2018 AA data - no Corr (+ l3, bcc/fpd, e/b-emc)",kFALSE}, + // 2018 updated chains + {"B2018c" ,"","", + "ry2018c,in,tpcX,UseXgeom,CorrX,AgML,tpcDB,TpcHitMover,Idst,tags,Tree,picoWrite,picoVtxDefault,picoCovMtxWrite","","" + , "Base chain for run 2018 data (tpc)",kFALSE}, + + {"P2018c","" ,"", + "B2018c,ITTF,BAna,VFMinuit,beamline3D,btof,mtd,l3onl,emcDY2,epdHit,fpd,trgd,ZDCvtx,analysis" + , "","","Base chain for year 2018 AA data - no Corr (+ l3, bcc/fpd, e/b-emc)",kFALSE}, + // 2019 chains, BES {"B2019a" ,"","","ry2019a,in,tpcX,UseXgeom,iTpcIT,CorrX,AgML,tpcDB,TpcHitMover,Idst,tags,Tree,picoWrite", "","", "Base chain for run 2019 data (tpc)",kFALSE}, @@ -1001,6 +1010,14 @@ Bfc_st BFC[] = { // standard chains "B2019a,ITTF,BAna,iTpcIT,VFMinuit,beamline3D,etofa,btof,mtd,l3onl,emcDY2,epdHit,trgd,ZDCvtx,analysis" , "","", "Base chain for year 2019 AA data - no Corr (+ l3, epd, mtd, b/etof, b-emc)",kFALSE}, + // 2019 updated chains + {"B2019b" ,"","", + "ry2019b,in,tpcX,UseXgeom,iTpcIT,CorrY,AgML,tpcDB,TpcHitMover,Idst,tags,Tree,picoWrite,picoVtxDefault,picoCovMtxWrite", + "","", "Base chain for run 2019 data (tpc)",kFALSE}, + + {"P2019b","" ,"", + "B2019b,ITTF,BAna,VFMinuit,etofa,btof,mtd,l3onl,emcDY2,epdHit,trgd,ZDCvtx,analysis" + , "","", "Base chain for year 2019 AA data - no Corr (+ l3, epd, mtd, b/etof, b-emc)",kFALSE}, // 2020 initial chains {"B2020a" ,"","", @@ -1011,14 +1028,32 @@ Bfc_st BFC[] = { // standard chains "B2020a,ITTF,BAna,iTpcIT,VFMinuit,etofa,btof,mtd,l3onl,emcDY2,epdHit,trgd,ZDCvtx,analysis" , "","", "Base chain for year 2020 AA data - no Corr (+ l3, epd, mtd, b/etof, b-emc)",kFALSE}, + // 2020 updated chains + {"B2020b" ,"","", + "ry2020b,in,tpcX,UseXgeom,iTpcIT,CorrY,AgML,tpcDB,TpcHitMover,Idst,tags,Tree,picoWrite,picoVtxDefault,picoCovMtxWrite", + "","", "Base chain for run 2020 data (tpc)",kFALSE}, + + {"P2020b","" ,"", + "B2020b,ITTF,BAna,VFMinuit,etofa,btof,mtd,l3onl,emcDY2,epdHit,trgd,ZDCvtx,analysis" + , "","", "Base chain for year 2020 AA data - no Corr (+ l3, epd, mtd, b/etof, b-emc)",kFALSE}, + // 2021 initial chains {"B2021a" ,"","", "ry2021a,in,tpcX,UseXgeom,iTpcIT,CorrY,AgML,tpcDB,TpcHitMover,Idst,tags,Tree,picoWrite,picoVtxDefault,picoCovMtxWrite", - "","", "Base chain for run 2020 data (tpc)",kFALSE}, + "","", "Base chain for run 2021 data (tpc)",kFALSE}, {"P2021a","" ,"", "B2021a,ITTF,BAna,iTpcIT,VFMinuit,etofa,btof,mtd,l3onl,emcDY2,epdHit,trgd,ZDCvtx,analysis" - , "","", "Base chain for year 2020 AA data - no Corr (+ l3, epd, mtd, b/etof, b-emc)",kFALSE}, + , "","", "Base chain for year 2021 AA data - no Corr (+ l3, epd, mtd, b/etof, b-emc)",kFALSE}, + + // 2021 updated chains + {"B2021b" ,"","", + "ry2021b,in,tpcX,UseXgeom,iTpcIT,CorrY,AgML,tpcDB,TpcHitMover,Idst,tags,Tree,picoWrite,picoVtxDefault,picoCovMtxWrite", + "","", "Base chain for run 2021 data (tpc)",kFALSE}, + + {"P2021b","" ,"", + "B2021b,ITTF,BAna,VFMinuit,etofa,btof,mtd,l3onl,emcDY2,epdHit,trgd,ZDCvtx,analysis" + , "","", "Base chain for year 2021 AA data - no Corr (+ l3, epd, mtd, b/etof, b-emc)",kFALSE}, // 2022 initial chains {"B2022" ,"","",