#include #include #include #include #include "particleType.h" #include "TFile.h" #include "TCanvas.h" #include "TH2.h" #include "PlotDrawer/DCanvasInstructions.h" #include "PlotDrawer/DPadInstructions.h" #include "PlotDrawer/DPlotDrawer.h" void Subtract_Sidebands(string locInputFileName, Particle_t locPID, bool locIs4PiFlag); TH2* Subtract_Sidebands(TFile* locInputFile, Particle_t locPID, bool locIs4PiFlag, int locEBin, string locHistBaseName, size_t locVertexZBin, bool& locNoHistFlag); double Get_ScaleFactor(Particle_t locPID, bool locIs4PiFlag, int locEBin); double Get_ScaleFactor_Found(Particle_t locPID, bool locIs4PiFlag, int locEBin); int gExamineEBin = 16; /* .x Load.C .L ~/Code/Work/gluex/ROOT_Scripts/Sideband_Subtract.C+ Subtract_Sidebands("~/Scratch/gluex/trackeff_spring/trackeff_Pi+_2pi.root", PiPlus, false); Subtract_Sidebands("~/Scratch/gluex/trackeff_spring/trackeff_Pi+_4pi.root", PiPlus, true); Subtract_Sidebands("~/Scratch/gluex/trackeff_spring/trackeff_Pi-_2pi.root", PiMinus, false); Subtract_Sidebands("~/Scratch/gluex/trackeff_spring/trackeff_Pi-_4pi.root", PiMinus, true); Subtract_Sidebands("~/Scratch/gluex/trackeff_spring/trackeff_Proton.root", Proton, true); */ void Subtract_Sidebands(string locInputFileName, Particle_t locPID, bool locIs4PiFlag) { TFile* locInputFile = new TFile(locInputFileName.c_str(), "READ"); string locOutputFileName = locInputFileName + ".subtracted.root"; TFile* locOutputFile = new TFile(locOutputFileName.c_str(), "RECREATE"); string locOutputDirName = ParticleType(locPID); if(locIs4PiFlag) locOutputDirName += "_4pi"; else locOutputDirName += "_2pi"; gDirectory->mkdir(locOutputDirName.c_str(), locOutputDirName.c_str())->cd(); int locEBin = 0; size_t locVertexZBin = 0; while(true) //loop over vertz bins { bool locNoEBinsFlag = true; TH2* locEBinSumHist_PVsTheta_TrackFound = nullptr, *locEBinSumHist_PVsTheta_TrackMissing = nullptr; TH2* locEBinSumHist_PhiVsTheta_TrackFound = nullptr, *locEBinSumHist_PhiVsTheta_TrackMissing = nullptr; while(true) //loop over ebins { //p vs theta: found bool locNoHistFlag = false; TH2* locSidebandSubtractedHist = Subtract_Sidebands(locInputFile, locPID, locIs4PiFlag, locEBin, "PVsTheta_TrackFound", locVertexZBin, locNoHistFlag); if(locNoHistFlag) break; if(locSidebandSubtractedHist != nullptr) { if(locEBinSumHist_PVsTheta_TrackFound == nullptr) { string locHistName = string(locSidebandSubtractedHist->GetName()) + "_Merged"; locEBinSumHist_PVsTheta_TrackFound = (TH2*)locSidebandSubtractedHist->Clone(locHistName.c_str()); } else locEBinSumHist_PVsTheta_TrackFound->Add(locSidebandSubtractedHist, 1.0); } //p vs theta: missing locSidebandSubtractedHist = Subtract_Sidebands(locInputFile, locPID, locIs4PiFlag, locEBin, "PVsTheta_TrackMissing", locVertexZBin, locNoHistFlag); if(locSidebandSubtractedHist != nullptr) { if(locEBinSumHist_PVsTheta_TrackMissing == nullptr) { string locHistName = string(locSidebandSubtractedHist->GetName()) + "_Merged"; locEBinSumHist_PVsTheta_TrackMissing = (TH2*)locSidebandSubtractedHist->Clone(locHistName.c_str()); } else locEBinSumHist_PVsTheta_TrackMissing->Add(locSidebandSubtractedHist, 1.0); } if(locEBin == gExamineEBin) return; //phi vs theta: found locSidebandSubtractedHist = Subtract_Sidebands(locInputFile, locPID, locIs4PiFlag, locEBin, "PhiVsTheta_TrackFound", locVertexZBin, locNoHistFlag); if(locSidebandSubtractedHist != nullptr) { if(locEBinSumHist_PhiVsTheta_TrackFound == nullptr) { string locHistName = string(locSidebandSubtractedHist->GetName()) + "_Merged"; locEBinSumHist_PhiVsTheta_TrackFound = (TH2*)locSidebandSubtractedHist->Clone(locHistName.c_str()); } else locEBinSumHist_PhiVsTheta_TrackFound->Add(locSidebandSubtractedHist, 1.0); } //phi vs theta: missing locSidebandSubtractedHist = Subtract_Sidebands(locInputFile, locPID, locIs4PiFlag, locEBin, "PhiVsTheta_TrackMissing", locVertexZBin, locNoHistFlag); if(locSidebandSubtractedHist != nullptr) { if(locEBinSumHist_PhiVsTheta_TrackMissing == nullptr) { string locHistName = string(locSidebandSubtractedHist->GetName()) + "_Merged"; locEBinSumHist_PhiVsTheta_TrackMissing = (TH2*)locSidebandSubtractedHist->Clone(locHistName.c_str()); } else locEBinSumHist_PhiVsTheta_TrackMissing->Add(locSidebandSubtractedHist, 1.0); } ++locEBin; locNoEBinsFlag = false; } if(locNoEBinsFlag) break; locEBin = 0; ++locVertexZBin; } locOutputFile->Write(); locOutputFile->Close(); } TH2* Subtract_Sidebands(TFile* locInputFile, Particle_t locPID, bool locIs4PiFlag, int locEBin, string locHistBaseName, size_t locVertexZBin, bool& locNoHistFlag) { //get signal ostringstream locSignalHistName; locSignalHistName << "Efficiency_SignalPeak/EnergyBin_" << locEBin << "/" << locHistBaseName << "_VertexZBin" << locVertexZBin; TH2* locSignalHist = static_cast(locInputFile->Get(locSignalHistName.str().c_str())); if(locSignalHist == nullptr) { locNoHistFlag = true; return nullptr; } locSignalHist->Rebin2D(4, 4); if(!(locSignalHist->GetEntries() > 0.0)) return nullptr; //get sidebands ostringstream locSidebandHistName; locSidebandHistName << "Efficiency_SideBands/EnergyBin_" << locEBin << "/" << locHistBaseName << "_VertexZBin" << locVertexZBin; TH2* locSidebandHist = static_cast(locInputFile->Get(locSidebandHistName.str().c_str())); locSidebandHist->Rebin2D(4, 4); if(!(locSidebandHist->GetEntries() > 0.0)) return nullptr; //Check if valid for subtraction double locScaleFactor_Missing = Get_ScaleFactor(locPID, locIs4PiFlag, locEBin); if(locScaleFactor_Missing >= 0.0) return nullptr; /* double locScaleFactor_Found = Get_ScaleFactor_Found(locPID, locIs4PiFlag, locEBin); if(locScaleFactor_Found >= 0.0) return nullptr; */ //choose scale factor // double locScaleFactor = TString(locHistBaseName).Contains("TrackFound") ? locScaleFactor_Found : locScaleFactor_Missing; double locScaleFactor = locScaleFactor_Missing; //subtract ostringstream locNewHistName; locNewHistName << locHistBaseName << "_EnergyBin" << locEBin << "_VertexZBin" << locVertexZBin; TH2* locSidebandSubtractedHist = static_cast(locSignalHist->Clone(locNewHistName.str().c_str())); if(TString(locHistBaseName).Contains("TrackFound")) return locSidebandSubtractedHist; //don't subtract!!! locSidebandSubtractedHist->Add(locSidebandHist, locScaleFactor); if(locEBin == gExamineEBin) { DCanvasInstructions* locCanvasInstructions = new DCanvasInstructions("Heya"); locCanvasInstructions->Set_TargetCanvasAspectRatio(16.0/9.0); locCanvasInstructions->dTargetPadAspectRatio = 16.0/9.0; locCanvasInstructions->dMinPadWidth = 400; DPlotDrawer locPlotDrawer; locPlotDrawer.Draw_Object(locSignalHist, locCanvasInstructions); locPlotDrawer.Draw_Object(locSidebandHist, locCanvasInstructions); locPlotDrawer.Draw_Object(locSidebandSubtractedHist, locCanvasInstructions); cout << "factor = " << locScaleFactor << endl; } return locSidebandSubtractedHist; } double Get_ScaleFactor(Particle_t locPID, bool locIs4PiFlag, int locEBin) { if(locPID == Proton) { if(locEBin == 0) return -0.421601; if(locEBin == 1) return -0.414174; if(locEBin == 2) return -0.422239; if(locEBin == 3) return -0.456965; if(locEBin == 4) return -0.473895; if(locEBin == 5) return -0.49363; if(locEBin == 6) return -0.497518; if(locEBin == 7) return -0.523609; if(locEBin == 8) return -0.57775; if(locEBin == 9) return -0.615169; if(locEBin == 10) return -0.659631; if(locEBin == 11) return -0.672144; if(locEBin == 12) return -0.716472; if(locEBin == 13) return -0.746482; if(locEBin == 14) return -0.813814; if(locEBin == 15) return -0.810368; if(locEBin == 16) return -0.854159; if(locEBin == 17) return -0.868162; if(locEBin == 18) return -0.955638; if(locEBin == 19) return -1.06114; if(locEBin == 20) return -1.10786; if(locEBin == 21) return -1.11224; if(locEBin == 22) return -1.24028; if(locEBin == 23) return -1.37423; if(locEBin == 24) return -1.41114; if(locEBin == 25) return -1.55998; if(locEBin == 26) return -1.65772; if(locEBin == 27) return -1.9182; if(locEBin == 28) return -2.08361; if(locEBin == 29) return -1.76799; if(locEBin == 30) return -2.42522; if(locEBin == 31) return -4.30788; if(locEBin == 32) return -2.73024; if(locEBin == 33) return -2.84442; if(locEBin == 34) return 0.5*(-2.84442 - 5.12087); if(locEBin == 35) return -5.12087; if(locEBin == 36) return -5.89802; } else if((locPID == PiPlus) && locIs4PiFlag) { if(locEBin == 0) return -0.666174; if(locEBin == 1) return -0.566852; if(locEBin == 2) return -0.555362; if(locEBin == 3) return -0.620643; if(locEBin == 4) return -0.464713; if(locEBin == 5) return -0.519132; if(locEBin == 6) return -0.460403; if(locEBin == 7) return -0.488509; if(locEBin == 8) return -0.432482; if(locEBin == 9) return -0.586166; if(locEBin == 10) return -0.52397; if(locEBin == 11) return -0.503529; if(locEBin == 12) return -0.481694; if(locEBin == 13) return -0.488233; if(locEBin == 14) return -0.466317; if(locEBin == 15) return -0.507193; if(locEBin == 16) return -0.536552; if(locEBin == 17) return -0.516204; if(locEBin == 18) return -0.55138; if(locEBin == 19) return -0.488599; if(locEBin == 20) return -0.491315; if(locEBin == 21) return -0.488068; if(locEBin == 22) return -0.502182; if(locEBin == 23) return -0.628794; if(locEBin == 24) return -0.520313; if(locEBin == 25) return -0.532589; if(locEBin == 26) return -0.611128; if(locEBin == 27) return -0.533524; if(locEBin == 28) return -0.551418; if(locEBin == 29) return -0.699821; if(locEBin == 30) return -0.624965; if(locEBin == 31) return -0.653048; if(locEBin == 32) return -0.605881; if(locEBin == 33) return -0.622384; if(locEBin == 34) return 0.5*(-0.622384 - 0.640578); if(locEBin == 35) return -0.640578; if(locEBin == 36) return -0.630702; if(locEBin == 37) return -0.635153; if(locEBin == 38) return -0.738314; if(locEBin == 39) return -0.704156; if(locEBin == 40) return -0.715121; if(locEBin == 41) return -0.670223; if(locEBin == 42) return 0.5*(-0.670223 - 0.741372); if(locEBin == 43) return -0.741372; if(locEBin == 44) return -0.774748; if(locEBin == 45) return -0.82152; if(locEBin == 46) return -0.849668; if(locEBin == 47) return -0.941959; if(locEBin == 48) return -1.04871; if(locEBin == 49) return -0.910906; if(locEBin == 50) return -0.859563; if(locEBin == 51) return -0.801404; if(locEBin == 52) return -0.982656; if(locEBin == 53) return -0.899067; if(locEBin == 54) return -1.22996; if(locEBin == 55) return -1.07422; if(locEBin == 56) return -0.931402; if(locEBin == 57) return -1.01283; if(locEBin == 58) return -1.09595; if(locEBin == 59) return -0.841656; if(locEBin == 60) return -0.91408; if(locEBin == 61) return -0.878148; if(locEBin == 62) return -0.821264; if(locEBin == 63) return -0.820937; if(locEBin == 64) return -0.769119; if(locEBin == 65) return -0.804986; if(locEBin == 66) return -0.808663; if(locEBin == 67) return -0.85469; if(locEBin == 68) return -0.798584; if(locEBin == 69) return -0.749111; if(locEBin == 70) return -0.804343; if(locEBin == 71) return -0.716678; if(locEBin == 72) return -0.737211; if(locEBin == 73) return -0.731305; if(locEBin == 74) return -0.751362; if(locEBin == 75) return -0.79257; if(locEBin == 76) return -0.957973; if(locEBin == 77) return -1.32607; if(locEBin == 78) return -1.06926; if(locEBin == 79) return -1.38877; if(locEBin == 80) return -1.08206; if(locEBin == 81) return -0.889979; if(locEBin == 82) return -1.14839; if(locEBin == 83) return -1.23716; if(locEBin == 84) return -1.20291; if(locEBin == 85) return -1.00449; if(locEBin == 86) return -1.07044; if(locEBin == 87) return -1.50894; if(locEBin == 88) return -1.14359; if(locEBin == 89) return -0.965325; if(locEBin == 90) return -1.04287; if(locEBin == 91) return -1.23001; if(locEBin == 92) return -1.31701; if(locEBin == 93) return -1.28958; if(locEBin == 94) return -1.46391; if(locEBin == 95) return 0.5*(-1.46391 - 1.42759); if(locEBin == 96) return -1.42759; if(locEBin == 97) return -1.56946; if(locEBin == 98) return -1.45137; if(locEBin == 99) return -2.14965; if(locEBin == 100) return -1.6801; if(locEBin == 101) return -1.51004; if(locEBin == 102) return -1.61509; if(locEBin == 103) return -1.46655; if(locEBin == 104) return -1.69654; if(locEBin == 105) return -1.3252; if(locEBin == 106) return -1.5012; if(locEBin == 107) return -1.39406; if(locEBin == 108) return -1.72485; if(locEBin == 109) return -1.71925; if(locEBin == 110) return -2.1786; } else if((locPID == PiPlus) && !locIs4PiFlag) { if(locEBin == 0) return -0.399088; if(locEBin == 1) return -0.414003; if(locEBin == 2) return -0.421361; if(locEBin == 3) return -0.432959; if(locEBin == 4) return -0.447499; if(locEBin == 5) return -0.455753; if(locEBin == 6) return -0.477611; if(locEBin == 7) return -0.486861; if(locEBin == 8) return -0.496827; if(locEBin == 9) return -0.516469; if(locEBin == 10) return -0.538751; if(locEBin == 11) return -0.54574; if(locEBin == 12) return -0.553944; if(locEBin == 13) return -0.562785; if(locEBin == 14) return -0.565371; if(locEBin == 15) return -0.586107; if(locEBin == 16) return -0.584039; if(locEBin == 17) return -0.602696; if(locEBin == 18) return -0.617838; if(locEBin == 19) return -0.624534; if(locEBin == 20) return -0.621143; if(locEBin == 21) return -0.634258; if(locEBin == 22) return -0.65196; if(locEBin == 23) return -0.673343; if(locEBin == 24) return -0.66366; if(locEBin == 25) return -0.699747; if(locEBin == 26) return -0.692378; if(locEBin == 27) return -0.707524; if(locEBin == 28) return -0.736936; if(locEBin == 29) return -0.732771; if(locEBin == 30) return -0.746719; if(locEBin == 31) return -0.726817; if(locEBin == 32) return -0.76327; if(locEBin == 33) return -0.76276; if(locEBin == 34) return 0.5*(-0.76276 - 0.77618); if(locEBin == 35) return -0.77618; if(locEBin == 36) return -0.782219; } else if((locPID == PiMinus) && locIs4PiFlag) { if(locEBin == 0) return -0.569965; if(locEBin == 1) return -0.624301; if(locEBin == 2) return -0.562492; if(locEBin == 3) return -0.574949; if(locEBin == 4) return -0.573455; if(locEBin == 5) return -0.509184; if(locEBin == 6) return -0.521815; if(locEBin == 7) return -0.525901; if(locEBin == 8) return -0.514911; if(locEBin == 9) return -0.496003; if(locEBin == 10) return -0.543738; if(locEBin == 11) return -0.566617; if(locEBin == 12) return -0.510428; if(locEBin == 13) return -0.530157; if(locEBin == 14) return -0.525449; if(locEBin == 15) return -0.542296; if(locEBin == 16) return -0.514303; if(locEBin == 17) return -0.633186; if(locEBin == 18) return -0.602525; if(locEBin == 19) return -0.589152; if(locEBin == 20) return -0.577278; if(locEBin == 21) return -0.561942; if(locEBin == 22) return -0.590125; if(locEBin == 23) return -0.587203; if(locEBin == 24) return -0.559905; if(locEBin == 25) return -0.591552; if(locEBin == 26) return -0.56012; if(locEBin == 27) return -0.599134; if(locEBin == 28) return -0.612244; if(locEBin == 29) return -0.728208; if(locEBin == 30) return -0.675734; if(locEBin == 31) return -0.687946; if(locEBin == 32) return -0.672652; if(locEBin == 33) return -0.742963; if(locEBin == 34) return 0.5*(-0.742963 - 0.72019); if(locEBin == 35) return -0.72019; if(locEBin == 36) return -0.708138; if(locEBin == 37) return -0.806109; if(locEBin == 38) return -0.770847; if(locEBin == 39) return -0.792096; if(locEBin == 40) return -0.832493; if(locEBin == 41) return -0.795908; if(locEBin == 42) return 0.5*(-0.795908 - 0.936861); if(locEBin == 43) return -0.936861; if(locEBin == 44) return -0.929522; if(locEBin == 45) return -0.92718; if(locEBin == 46) return -1.11869; if(locEBin == 47) return -0.897185; if(locEBin == 48) return -0.976814; if(locEBin == 49) return -1.08619; if(locEBin == 50) return -0.943768; if(locEBin == 51) return -0.874399; if(locEBin == 52) return -1.19486; if(locEBin == 53) return -1.01043; if(locEBin == 54) return -1.0795; if(locEBin == 55) return -0.873728; if(locEBin == 56) return -1.00144; if(locEBin == 57) return -1.02422; if(locEBin == 58) return -1.08868; if(locEBin == 59) return -0.961145; if(locEBin == 60) return -0.919628; if(locEBin == 61) return -0.853817; if(locEBin == 62) return -0.847351; if(locEBin == 63) return -0.859042; if(locEBin == 64) return -0.807388; if(locEBin == 65) return -0.895004; if(locEBin == 66) return -0.817945; if(locEBin == 67) return -0.797455; if(locEBin == 68) return -0.799526; if(locEBin == 69) return -0.8149; if(locEBin == 70) return -0.772171; if(locEBin == 71) return -0.720536; if(locEBin == 72) return -0.70578; if(locEBin == 73) return -0.743225; if(locEBin == 74) return -0.761043; if(locEBin == 75) return -0.784069; if(locEBin == 76) return -0.93212; if(locEBin == 77) return -1.08486; if(locEBin == 78) return -0.976332; if(locEBin == 79) return -1.09733; if(locEBin == 80) return -1.07559; if(locEBin == 81) return -1.1569; if(locEBin == 82) return -1.13704; if(locEBin == 83) return -1.36867; if(locEBin == 84) return -1.22759; if(locEBin == 85) return -1.17672; if(locEBin == 86) return -1.18555; if(locEBin == 87) return -0.96999; if(locEBin == 88) return 0.5*(-0.96999 - 1.04459); if(locEBin == 89) return -1.04459; if(locEBin == 90) return -0.972466; if(locEBin == 91) return -1.28667; if(locEBin == 92) return -1.35441; if(locEBin == 93) return -1.64542; if(locEBin == 94) return -1.33687; if(locEBin == 95) return -1.5716; if(locEBin == 96) return -1.34907; if(locEBin == 97) return -1.28311; if(locEBin == 98) return -1.49495; if(locEBin == 99) return -1.63222; if(locEBin == 100) return -1.51136; if(locEBin == 101) return -1.10271; if(locEBin == 102) return -1.34866; if(locEBin == 103) return -1.20346; if(locEBin == 104) return -1.62295; if(locEBin == 105) return -1.50054; if(locEBin == 106) return -1.04207; if(locEBin == 107) return -1.68036; if(locEBin == 108) return -1.92663; if(locEBin == 109) return 0.5*(-1.92663 - 1.66852); if(locEBin == 110) return -1.66852; } else if((locPID == PiMinus) && !locIs4PiFlag) { if(locEBin == 0) return -0.464927; if(locEBin == 1) return -0.463838; if(locEBin == 2) return -0.479037; if(locEBin == 3) return -0.479972; if(locEBin == 4) return -0.495052; if(locEBin == 5) return -0.514383; if(locEBin == 6) return -0.52355; if(locEBin == 7) return -0.527896; if(locEBin == 8) return -0.551464; if(locEBin == 9) return -0.563862; if(locEBin == 10) return -0.570772; if(locEBin == 11) return -0.580872; if(locEBin == 12) return -0.601992; if(locEBin == 13) return -0.608803; if(locEBin == 14) return -0.611434; if(locEBin == 15) return -0.596412; if(locEBin == 16) return -0.610214; if(locEBin == 17) return -0.600318; if(locEBin == 18) return -0.616269; if(locEBin == 19) return -0.619439; if(locEBin == 20) return -0.632355; if(locEBin == 21) return -0.633285; if(locEBin == 22) return -0.653263; if(locEBin == 23) return -0.656411; if(locEBin == 24) return -0.665272; if(locEBin == 25) return -0.683694; if(locEBin == 26) return -0.693841; if(locEBin == 27) return -0.705344; if(locEBin == 28) return -0.710294; if(locEBin == 29) return -0.716078; if(locEBin == 30) return -0.709045; if(locEBin == 31) return -0.744201; if(locEBin == 32) return -0.753493; if(locEBin == 33) return -0.736987; if(locEBin == 34) return 0.5*(-0.736987 - 0.755952); if(locEBin == 35) return -0.755952; if(locEBin == 36) return -0.77233; } return 100.0; } double Get_ScaleFactor_Found(Particle_t locPID, bool locIs4PiFlag, int locEBin) { if(locPID == Proton) { if(locEBin == 0) return -1.27605; if(locEBin == 1) return -1.17891; if(locEBin == 2) return -1.13268; if(locEBin == 3) return -1.30622; if(locEBin == 4) return -1.42665; if(locEBin == 5) return -1.33575; if(locEBin == 6) return -1.40415; if(locEBin == 7) return -1.40676; if(locEBin == 8) return -1.60786; if(locEBin == 9) return -1.76313; if(locEBin == 10) return -1.78572; if(locEBin == 11) return -1.76772; if(locEBin == 12) return -2.01913; if(locEBin == 13) return -2.02181; if(locEBin == 14) return -2.36539; if(locEBin == 15) return -2.32079; if(locEBin == 16) return -2.29662; if(locEBin == 17) return -2.41974; if(locEBin == 18) return -2.75492; if(locEBin == 19) return -3.19398; if(locEBin == 20) return -3.44327; if(locEBin == 21) return -3.69808; if(locEBin == 22) return -4.25483; if(locEBin == 23) return -4.92484; if(locEBin == 24) return -5.81943; if(locEBin == 25) return -7.4809; if(locEBin == 26) return -9.09001; if(locEBin == 27) return -12.4642; if(locEBin == 28) return -18.3411; if(locEBin >= 29) return 10.0; } else if((locPID == PiPlus) && locIs4PiFlag) { if(locEBin == 0) return -0.707042; if(locEBin == 1) return -0.714529; if(locEBin == 2) return -0.71626; if(locEBin == 3) return -0.844114; if(locEBin == 4) return -0.738828; if(locEBin == 5) return -0.754143; if(locEBin == 6) return -0.801842; if(locEBin == 7) return -0.796525; if(locEBin == 8) return -0.734024; if(locEBin == 9) return -1.02797; if(locEBin == 10) return -0.882721; if(locEBin == 11) return -0.849176; if(locEBin == 12) return -0.846443; if(locEBin == 13) return -0.870468; if(locEBin == 14) return -0.844543; if(locEBin == 15) return -0.904181; if(locEBin == 16) return -1.03646; if(locEBin == 17) return -1.01062; if(locEBin == 18) return -1.161; if(locEBin == 19) return -0.97192; if(locEBin == 20) return -1.01438; if(locEBin == 21) return -1.00096; if(locEBin == 22) return -1.02162; if(locEBin == 23) return -1.27704; if(locEBin == 24) return -1.03662; if(locEBin == 25) return -1.03841; if(locEBin == 26) return -1.12488; if(locEBin == 27) return -1.04797; if(locEBin == 28) return -1.12601; if(locEBin == 29) return -1.57158; if(locEBin == 30) return -1.26855; if(locEBin == 31) return -1.19867; if(locEBin == 32) return -1.26135; if(locEBin == 33) return -1.2125; if(locEBin == 34) return 0.5*(-1.2125 - 1.29529); if(locEBin == 35) return -1.29529; if(locEBin == 36) return -1.30201; if(locEBin == 37) return -1.32409; if(locEBin == 38) return -1.59435; if(locEBin == 39) return -1.46984; if(locEBin == 40) return -1.52255; if(locEBin == 41) return -1.43768; if(locEBin == 42) return 0.5*(-1.43768 - 1.53776); if(locEBin == 43) return -1.53776; if(locEBin == 44) return -1.55749; if(locEBin == 45) return -1.9012; if(locEBin == 46) return -2.0726; if(locEBin == 47) return -2.10891; if(locEBin == 48) return -2.8399; if(locEBin == 49) return -2.3163; if(locEBin == 50) return -2.24551; if(locEBin == 51) return -2.27055; if(locEBin == 52) return -2.69216; if(locEBin == 53) return -2.61306; if(locEBin == 54) return -4.53065; if(locEBin == 55) return -4.0351; if(locEBin == 56) return -3.25929; if(locEBin == 57) return -3.90185; if(locEBin == 58) return -4.19356; if(locEBin == 59) return -3.40953; if(locEBin == 60) return -3.67853; if(locEBin == 61) return -3.64779; if(locEBin == 62) return -3.88259; if(locEBin == 63) return -4.1181; if(locEBin == 64) return -4.05756; if(locEBin == 65) return -4.11257; if(locEBin == 66) return -4.54964; if(locEBin == 67) return -4.73852; if(locEBin == 68) return -4.6459; if(locEBin == 69) return -4.68358; if(locEBin == 70) return -5.19812; if(locEBin == 71) return -5.04912; if(locEBin == 72) return -5.29669; if(locEBin == 73) return -5.41793; if(locEBin == 74) return -5.80477; if(locEBin == 75) return -5.91746; if(locEBin == 76) return -5.51237; if(locEBin == 77) return -9.05187; if(locEBin == 78) return -6.36512; if(locEBin == 79) return -9.1083; if(locEBin == 80) return -6.60016; if(locEBin == 81) return -6.34677; if(locEBin == 82) return -7.41667; if(locEBin == 83) return -9.72411; if(locEBin == 84) return -8.09408; if(locEBin == 85) return -6.46303; if(locEBin == 86) return -7.78067; if(locEBin == 87) return -13.3711; if(locEBin == 88) return -9.43477; if(locEBin == 89) return -7.80648; if(locEBin == 90) return -10.8609; if(locEBin == 91) return -14.7126; if(locEBin == 92) return -9.98087; if(locEBin == 93) return -12.4681; if(locEBin == 94) return -18.1227; if(locEBin == 95) return 0.5*(-18.1227 - 15.6423); if(locEBin == 96) return -15.6423; if(locEBin == 97) return -23.9032; if(locEBin == 98) return -18.8374; if(locEBin >= 99) return 50.4133; } else if((locPID == PiPlus) && !locIs4PiFlag) //pi+ 2pi { if(locEBin == 0) return -0.884554; if(locEBin == 1) return -0.902938; if(locEBin == 2) return -0.911819; if(locEBin == 3) return -0.935004; if(locEBin == 4) return -0.934942; if(locEBin == 5) return -0.957268; if(locEBin == 6) return -0.972545; if(locEBin == 7) return -0.969476; if(locEBin == 8) return -0.988704; if(locEBin == 9) return -1.00911; if(locEBin == 10) return -1.01513; if(locEBin == 11) return -1.02082; if(locEBin == 12) return -1.0539; if(locEBin == 13) return -1.07319; if(locEBin == 14) return -1.08718; if(locEBin == 15) return -1.10402; if(locEBin == 16) return -1.12012; if(locEBin == 17) return -1.13546; if(locEBin == 18) return -1.17928; if(locEBin == 19) return -1.19684; if(locEBin == 20) return -1.21268; if(locEBin == 21) return -1.23562; if(locEBin == 22) return -1.28545; if(locEBin == 23) return -1.31103; if(locEBin == 24) return -1.32731; if(locEBin == 25) return -1.35344; if(locEBin == 26) return -1.39356; if(locEBin == 27) return -1.42839; if(locEBin == 28) return -1.45399; if(locEBin == 29) return -1.47448; if(locEBin == 30) return -1.54279; if(locEBin == 31) return -1.538; if(locEBin == 32) return -1.59449; if(locEBin == 33) return -1.62082; if(locEBin == 34) return 0.5*(-1.62082 - 1.72751); if(locEBin == 35) return -1.72751; if(locEBin == 36) return -1.71851; } else if((locPID == PiMinus) && locIs4PiFlag) { if(locEBin == 0) return -0.774721; if(locEBin == 1) return -0.815318; if(locEBin == 2) return -0.790488; if(locEBin == 3) return -0.841789; if(locEBin == 4) return -0.830624; if(locEBin == 5) return -0.821044; if(locEBin == 6) return -0.896127; if(locEBin == 7) return -0.892867; if(locEBin == 8) return -0.856664; if(locEBin == 9) return -0.888022; if(locEBin == 10) return -0.900854; if(locEBin == 11) return -1.07561; if(locEBin == 12) return -0.89532; if(locEBin == 13) return -0.954527; if(locEBin == 14) return -0.983963; if(locEBin == 15) return -0.981495; if(locEBin == 16) return -1.04306; if(locEBin == 17) return -1.29856; if(locEBin == 18) return -1.25583; if(locEBin == 19) return -1.10189; if(locEBin == 20) return -1.15879; if(locEBin == 21) return -1.13451; if(locEBin == 22) return -1.13715; if(locEBin == 23) return -1.20027; if(locEBin == 24) return -1.14328; if(locEBin == 25) return -1.20855; if(locEBin == 26) return -1.2162; if(locEBin == 27) return -1.21296; if(locEBin == 28) return -1.27546; if(locEBin == 29) return -1.46024; if(locEBin == 30) return -1.41413; if(locEBin == 31) return -1.34871; if(locEBin == 32) return -1.3486; if(locEBin == 33) return -1.74532; if(locEBin == 34) return 0.5*(-1.74532 - 1.4245); if(locEBin == 35) return -1.4245; if(locEBin == 36) return -1.45032; if(locEBin == 37) return -1.62708; if(locEBin == 38) return -1.60341; if(locEBin == 39) return -1.8698; if(locEBin == 40) return -1.5912; if(locEBin == 41) return -1.69001; if(locEBin == 42) return 0.5*(-1.69001 - 2.18344); if(locEBin == 43) return -2.18344; if(locEBin == 44) return -2.41604; if(locEBin == 45) return -2.27207; if(locEBin == 46) return -3.32145; if(locEBin == 47) return -2.32696; if(locEBin == 48) return -2.58541; if(locEBin == 49) return -2.95772; if(locEBin == 50) return -2.64961; if(locEBin == 51) return -2.65777; if(locEBin == 52) return -3.95577; if(locEBin == 53) return -3.13901; if(locEBin == 54) return -3.38878; if(locEBin == 55) return -3.06304; if(locEBin == 56) return -3.93274; if(locEBin == 57) return -4.12479; if(locEBin == 58) return -4.41464; if(locEBin == 59) return -4.16368; if(locEBin == 60) return -4.23897; if(locEBin == 61) return -4.02585; if(locEBin == 62) return -4.38768; if(locEBin == 63) return -4.59407; if(locEBin == 64) return -4.59891; if(locEBin == 65) return -4.68024; if(locEBin == 66) return -4.55219; if(locEBin == 67) return -4.78728; if(locEBin == 68) return -4.69498; if(locEBin == 69) return -5.31466; if(locEBin == 70) return -5.2472; if(locEBin == 71) return -5.03229; if(locEBin == 72) return -5.30591; if(locEBin == 73) return -5.62549; if(locEBin == 74) return -6.07215; if(locEBin == 75) return -5.96268; if(locEBin == 76) return -5.32538; if(locEBin == 77) return -6.039; if(locEBin == 78) return -5.90838; if(locEBin == 79) return -6.21278; if(locEBin == 80) return -6.67628; if(locEBin == 81) return -7.5628; if(locEBin == 82) return -7.42718; if(locEBin == 83) return -7.29734; if(locEBin == 84) return -7.62567; if(locEBin == 85) return -7.56488; if(locEBin == 86) return -8.09216; if(locEBin == 87) return -7.54887; if(locEBin == 88) return 0.5*(-7.54887 - 8.87865); if(locEBin == 89) return -8.87865; if(locEBin == 90) return -7.41764; if(locEBin == 91) return -11.2838; if(locEBin == 92) return -10.6124; if(locEBin == 93) return -12.0171; if(locEBin == 94) return -11.4647; if(locEBin == 95) return -12.9527; if(locEBin == 96) return -13.3109; if(locEBin == 97) return -13.2667; if(locEBin == 98) return -15.8481; if(locEBin == 99) return -15.8048; if(locEBin >= 100) return -17.2259; } else if((locPID == PiMinus) && !locIs4PiFlag) //pi- 2pi { if(locEBin == 0) return -0.965617; if(locEBin == 1) return -0.95724; if(locEBin == 2) return -0.963863; if(locEBin == 3) return -0.975426; if(locEBin == 4) return -0.982212; if(locEBin == 5) return -0.992552; if(locEBin == 6) return -0.993426; if(locEBin == 7) return -1.00949; if(locEBin == 8) return -1.0401; if(locEBin == 9) return -1.03807; if(locEBin == 10) return -1.03454; if(locEBin == 11) return -1.05079; if(locEBin == 12) return -1.09248; if(locEBin == 13) return -1.09178; if(locEBin == 14) return -1.09175; if(locEBin == 15) return -1.09676; if(locEBin == 16) return -1.13091; if(locEBin == 17) return -1.15968; if(locEBin == 18) return -1.18011; if(locEBin == 19) return -1.18872; if(locEBin == 20) return -1.19009; if(locEBin == 21) return -1.22152; if(locEBin == 22) return -1.24275; if(locEBin == 23) return -1.26517; if(locEBin == 24) return -1.26172; if(locEBin == 25) return -1.30999; if(locEBin == 26) return -1.39657; if(locEBin == 27) return -1.39174; if(locEBin == 28) return -1.39301; if(locEBin == 29) return -1.41818; if(locEBin == 30) return -1.43237; if(locEBin == 31) return -1.48108; if(locEBin == 32) return -1.52318; if(locEBin == 33) return -1.5264; if(locEBin == 34) return 0.5*(-1.5264 - 1.64067); if(locEBin == 35) return -1.64067; if(locEBin == 36) return -1.6301; } return 100.0; }