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 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 53a62bb71a9..c9966fa537a 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 ); @@ -459,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 5d6ad67bccd..c950a7999fd 100644 --- a/OnlTools/Jevp/level.source +++ b/OnlTools/Jevp/level.source @@ -1,4 +1,7 @@ # STAR LEVEL for EVP code -starver SL23b +starver SL24a #starver SL21b + + +unsetenv DB_SERVER_LOCAL_CONFIG 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. 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 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 */ +}; 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/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..abad19accb9 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,40 @@ 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: 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) ; + +// 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 +414,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: T %d: ch_scan %d:%d:%d bx %d, expect %d",rdo1,token,fee_ix,lane_ix,ch_ix,bx,bx_count) ; + } + } } } @@ -440,9 +481,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 +505,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 +517,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 ; } @@ -485,26 +530,33 @@ 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!!! 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) ; + + seq[seq_ix].t_lo = 400 ; + seq[seq_ix].t_hi = 401 ; + } 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) ; + seq[seq_ix].t_lo = 400 ; + seq[seq_ix].t_hi = 401 ; + } + seq_ix++ ; ix = 2 ; break ; @@ -619,16 +671,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: 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]) { + 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 +709,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: T %d: lane_scan %d:%d: unknown end 0x%08X",rdo1,token,fee_ix,lane_ix,d[0]) ; } d++ ; // skip 0x7... @@ -658,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) 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=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 +967,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 +996,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 +1042,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 ; } @@ -1067,12 +1149,30 @@ int itpc23::rdo_scan(char *c_addr, int iwords) // LOG(TERR,"%d: fee_mask 0x%08X",rdo1,fee_mask) ; + + if(err) { + if(mode || online) { + LOG(ERR,"%d: T %d: error 0x%X before fee_scan??",rdo1,token,err) ; + } + } + + + for(int i=0;i<16;i++) { if(fee_mask & (1<=trl) break ; } @@ -1089,7 +1189,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,10 +1396,10 @@ itpc23::itpc23() data_c = 0 ; - fee_errs = 0 ; // just in case - 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 2e857ee015a..e480136d9e3 100644 --- a/StRoot/RTS/src/DAQ_TPC23/tpc23_base.cxx +++ b/StRoot/RTS/src/DAQ_TPC23/tpc23_base.cxx @@ -1353,7 +1353,9 @@ int tpc23_base::run_start() evt_trgd = 0 ; run_errors = 0 ; - fee_errs = 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 ; } @@ -1384,6 +1396,7 @@ tpc23_base::tpc23_base() s2_words = 0 ; no_cld = 0 ; + mode = 0 ; // rp_gain_tpx = 0 ; // rp_gain_itpc = 0 ; @@ -1413,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 61862750698..078a3923229 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 ; @@ -109,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 61c46c559b4..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] ; @@ -58,10 +74,12 @@ int tpx23::fee_scan() { u_int *h ; err = 0 ; // in class + int id_pre = -1 ; + int ch_pre = -1 ; + int s_cou ; + char retry ; +// double s_tmx = mark() ; -// u_char altro_present[256][16] ; - - get_token((char *)d_start,words) ; TLOG() ; @@ -85,21 +103,23 @@ int tpx23::fee_scan() // last valid FEE word is at d_end h = d_end ; + TLOGX(rdo1) ; -// memset(altro_present,0,sizeof(altro_present)) ; - if(hdr_version) { - + if(log_level>0) LOG(TERR,"%d: fee_scan",rdo1) ; - } + u_int *h_to_continue ; + retry = 0 ; - TLOGX(rdo1) ; - if(log_level>0) LOG(TERR,"%d: fee_scan",rdo1) ; + 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-- ; @@ -108,13 +128,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++ ; + +// 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) { @@ -189,6 +287,8 @@ int tpx23::fee_scan() //TLOGX(row) ; +// tmx = mark() ; + for(int i=0;i440 || 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 ; } @@ -325,6 +436,31 @@ int tpx23::fee_scan() } } + else if(altro) { + altro[altro_cou].row = row ; + altro[altro_cou].pad = pad ; + altro[altro_cou].ch = ch ; + altro[altro_cou].id = id ; + altro[altro_cou].count = 0 ; + + int aix = 0 ; + + for(int i=(seq_ix-1);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 ; @@ -332,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 @@ -362,15 +498,19 @@ int tpx23::fee_scan() +// f_stat.tm[2] += delta(tmx) ; //LOG(TERR,"Here 2") ; - int s_cou = 0 ; + s_cou = 0 ; dd = d ; seq = s1[row][pad].seq ; // 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 ; @@ -417,14 +557,21 @@ int tpx23::fee_scan() } #endif - + id_pre = id ; + ch_pre = ch ; + +// f_stat.tm[3] += delta(tmx) ; + + end_loop:; } done:; +// f_stat.tm[4] += delta(s_tmx) ; + TLOG() ; return err ; @@ -797,7 +944,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 +990,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 +1000,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) { @@ -1029,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/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/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/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/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]; diff --git a/StRoot/RTS/src/TRG_FCS/fcs_trg_base.cxx b/StRoot/RTS/src/TRG_FCS/fcs_trg_base.cxx index 6e8b1b33ef9..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; - self_trigger = 0 ; s3_to_dsm = d_in[trg_xing].s3.dsm_out.d[0] ; diff --git a/StRoot/StAnalysisUtilities/StHistUtil.cxx b/StRoot/StAnalysisUtilities/StHistUtil.cxx index c7501765c16..586a9a6ac15 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) { @@ -952,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); @@ -964,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") || @@ -971,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); } @@ -1789,6 +1808,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/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" diff --git a/StRoot/StBFChain/BigFullChain.h b/StRoot/StBFChain/BigFullChain.h index dd1c84552a8..f34f3118424 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,16 @@ 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}, + + // 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 @@ -998,9 +1007,17 @@ 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}, + // 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" ,"","", @@ -1008,17 +1025,35 @@ 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}, + + // 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,hitfilt,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}, + "B2021a,ITTF,BAna,iTpcIT,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}, + + // 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" ,"","", @@ -1026,7 +1061,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 +1069,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,9 +1078,22 @@ 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 + {"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,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","","" @@ -1214,7 +1262,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}, @@ -1512,7 +1560,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}, @@ -1587,8 +1635,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", @@ -1646,6 +1696,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", @@ -1740,12 +1791,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}, @@ -1935,9 +1986,11 @@ 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}, + {"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 3bd01c1f138..247b5e95203 100644 --- a/StRoot/StBFChain/StBFChain.cxx +++ b/StRoot/StBFChain/StBFChain.cxx @@ -735,8 +735,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/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/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/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) 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/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/StETofCalibMaker/StETofCalibMaker.cxx b/StRoot/StETofCalibMaker/StETofCalibMaker.cxx index e8ab1b96049..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; @@ -1233,37 +1283,28 @@ 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++){ + 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 + } + + //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 +1409,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;// - 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); - } - } + //drag along pulser information + 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); + } + + //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){ + 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 +1513,6 @@ StETofCalibMaker::processMuDst() prev = current; } - /// calculate calibrated time and tot for the digi /// only for digis inside the timing window applyCalibration( aDigi, etofHeader ); @@ -1569,22 +1611,25 @@ 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; - } - } + 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 ); } + } @@ -2118,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; @@ -2608,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/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..70bb202e807 100644 --- a/StRoot/StETofMatchMaker/StETofMatchMaker.cxx +++ b/StRoot/StETofMatchMaker/StETofMatchMaker.cxx @@ -86,9 +86,11 @@ #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" +#include "StETofCalibMaker/StETofCalibMaker.h" #include "StETofUtil/StETofGeometry.h" #include "StETofUtil/StETofConstants.h" @@ -160,9 +162,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 +177,7 @@ StETofMatchMaker::StETofMatchMaker( const char* name ) } + //--------------------------------------------------------------------------- StETofMatchMaker::~StETofMatchMaker() { @@ -267,7 +274,6 @@ StETofMatchMaker::InitRun( Int_t runnumber ) // -------------------------------------------------------------------------------------------- - // -------------------------------------------------------------------------------------------- // initializie etof geometry // -------------------------------------------------------------------------------------------- @@ -498,7 +504,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 +517,18 @@ StETofMatchMaker::Make() eTofHitVec singleTrackMatchVec; vector< eTofHitVec > multiTrackMatchVec; - sortSingleMultipleHits( matchCandVec, singleTrackMatchVec, multiTrackMatchVec ); - - if( singleTrackMatchVec.size() == 0 ) { - //LOG_INFO << "Make() -- event done ... bye-bye" << endm; + //sortSingleMultipleHits( matchCandVec, singleTrackMatchVec, multiTrackMatchVec ); // old matching procedure - 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 +542,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 +847,10 @@ StETofMatchMaker::readETofDetectorHits( eTofHitVec& detectorHitVec ) detectorHit.index2ETofHit = i; detectorHitVec.push_back( detectorHit ); + + + + } } @@ -1267,8 +1280,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 +1292,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 +1344,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 +1360,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 +2028,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 +2092,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 +2519,7 @@ StETofMatchMaker::expectedTimeOfFlight( const double& pathLength, const double& void StETofMatchMaker::fillQaHistograms( eTofHitVec& finalMatchVec ) { + vector< int > nPidMatches( 36 ); for( auto& matchCand : finalMatchVec ) { @@ -2441,6 +2527,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 +2564,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 +2611,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 +2818,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 +3231,844 @@ 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 + eTofHitVecIter tempIter = tempVec.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 done + + MMMap[storeVecTmp.begin()->trackId] = storeVecTmp; + storeVecTmp.clear(); + + }// while all hits on counter + + outputMap = MMMap; +} +//--------------------------------------------------------------------------- +void +StETofMatchMaker::sortandcluster(eTofHitVec& matchCandVec , eTofHitVec& detectorHitVec , eTofHitVec& intersectionVec , eTofHitVec& finalMatchVec){ + + + //flag Overlap-Hits & jumped 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(); ) { + + 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 + + //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); +} + +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 0a5020fbafb..df198ab880a 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,10 @@ 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 ); + void sortOutOlDoubles( eTofHitVec& finalMatchVec); + double startTimeBTof(); double startTimeETof( const eTofHitVec& finalMatchVec, unsigned int& nCand_etofT0 ); @@ -220,9 +228,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/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; 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/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]; 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/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 4b1b8ce6515..8fcc4341901 100644 --- a/StRoot/StEvent/StFttCluster.h +++ b/StRoot/StEvent/StFttCluster.h @@ -27,6 +27,8 @@ 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 + UShort_t qaTruth() const { return mQaTruth; } // Get the truth quality void setId(int cluid); void setPlane(UChar_t plane); @@ -37,6 +39,8 @@ class StFttCluster : public StObject { 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; } StPtrVecFttRawHit& rawHits(); const StPtrVecFttRawHit& rawHits() const; @@ -62,8 +66,10 @@ 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 + UShort_t mQaTruth=0; // Truth Quality - ClassDef(StFttCluster, 2) + 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 71bcbd8cd79..4add9090ef0 100644 --- a/StRoot/StEvent/StFttPoint.h +++ b/StRoot/StEvent/StFttPoint.h @@ -28,9 +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); @@ -38,7 +40,8 @@ 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 setQaTruth(UShort_t qa) { mQaTruth = qa; } void print(int option=0); @@ -49,8 +52,10 @@ 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 + UShort_t mQaTruth=0; // Truth quality - ClassDef(StFttPoint, 1) + 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/StFcsDbMaker/StFcsDb.cxx b/StRoot/StFcsDbMaker/StFcsDb.cxx index e6e1feec7e3..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){ @@ -756,7 +798,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); @@ -936,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()); } @@ -1943,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; isetAdcSum(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]); 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.; } } } 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 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 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; } 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 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/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/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 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 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 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 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/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 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/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); 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 }; 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) 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 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 1ffeebf0de8..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); @@ -215,7 +218,7 @@ int StFcsTriggerSimMaker::InitRun(int runNumber){ mFcsDb->getDepfromId(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 +227,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 +283,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"<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(){ @@ -713,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 "<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(); @@ -2077,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; //! 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, 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; 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 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(); + } +} 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; +} 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/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; 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;} 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" 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