本文整理汇总了C++中DataTree类的典型用法代码示例。如果您正苦于以下问题:C++ DataTree类的具体用法?C++ DataTree怎么用?C++ DataTree使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了DataTree类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: dropEvent
void MainWindow::dropEvent( QDropEvent *event )
{
if (!event->mimeData()->hasFormat(MIMETYPE))
{
return;
}
auto &filenameBytes = event->mimeData()->data(MIMETYPE);
auto &filename = QTextCodec::codecForName("utf-16")->toUnicode(filenameBytes);
DataTree *tree = this->findChild<DataTree *>(tr("treeWidget"));
tree->clearData();
tree->loadData(filename);
}
示例2: onExportData
void MainWindow::onExportData()
{
// 判断有无导出路径;
auto comboBox_exportPaths = this->findChild<QComboBox *>(tr("comboBox_exportPaths"));
const auto &exportPath = comboBox_exportPaths->currentText();
if (exportPath.isEmpty())
{
QMessageBox::information(NULL, "information", "Please set export path first!", QMessageBox::Yes, QMessageBox::Yes);
return;
}
DataTree *tree = this->findChild<DataTree *>(tr("treeWidget"));
tree->exportData(exportPath);
QMessageBox::information(NULL, "information", "export done", QMessageBox::Yes, QMessageBox::Yes);
}
示例3: OS_ASSERT
bool LocalMachine::init()
{
if(m_initialized)
return true;
NotificationsManager::instance()->notify(_S("Initializing local machine..."));
OS_ASSERT(m_id.empty());
String filePath = utils::makeFilePath(Options::instance()->getDataPath(), FILENAME);
DataTree dt;
if(dt.load(filePath))
{
m_publicKey = dt.getV(PUBLIC_KEY);
m_privateKey = dt.getV(PRIVATE_KEY);
if(CryptManager::instance()->rsaCheckKeys(m_privateKey, m_publicKey))
{
// Carica l'id della macchina dopo aver verificato la validit delle chiavi
m_id = dt.getV(ID);
// Verifica che l'id sia stato archiviato correttamente
if(validate() == false)
m_id.clear();
}
}
if(m_id.empty())
{
m_privateKey.clear();
m_publicKey.clear();
if(CryptManager::instance()->rsaGenerateKeys(rsaType4096, m_privateKey, m_publicKey) == false)
return false;
// L'ID della macchina dato dall'hash della chiave pubblica
m_id = P2PSystem::instance()->generateMachineID(m_publicKey);
dt.setV(ID, m_id);
dt.setV(PUBLIC_KEY, m_publicKey);
dt.setV(PRIVATE_KEY, m_privateKey);
if(dt.save(filePath) == false)
return false;
}
m_initialized = true;
return true;
}
示例4: traverse
const std::vector<std::string> DataTree::getKeySet(const std::string& key)
{
std::vector<std::string> keySet;
if (key.empty())
{
return keySet;
}
DataTree* targetTree = traverse(splitKeys(key));
if (targetTree == nullptr)
{
return keySet;
}
keySet = targetTree->getKeySet();
return keySet;
}
示例5: save
bool AppConfig::save() {
DataTree cfg;
cfg.rootNode()->setName("cubicsdr_config");
if (winW.load() && winH.load()) {
DataNode *window_node = cfg.rootNode()->newChild("window");
*window_node->newChild("x") = winX.load();
*window_node->newChild("y") = winY.load();
*window_node->newChild("w") = winW.load();
*window_node->newChild("h") = winH.load();
*window_node->newChild("max") = winMax.load();
*window_node->newChild("theme") = themeId.load();
*window_node->newChild("snap") = snap.load();
*window_node->newChild("center_freq") = centerFreq.load();
*window_node->newChild("waterfall_lps") = waterfallLinesPerSec.load();
*window_node->newChild("spectrum_avg") = spectrumAvgSpeed.load();
}
DataNode *devices_node = cfg.rootNode()->newChild("devices");
std::map<std::string, DeviceConfig *>::iterator device_config_i;
for (device_config_i = deviceConfig.begin(); device_config_i != deviceConfig.end(); device_config_i++) {
DataNode *device_node = devices_node->newChild("device");
device_config_i->second->save(device_node);
}
if (manualDevices.size()) {
DataNode *manual_node = cfg.rootNode()->newChild("manual_devices");
for (std::vector<SDRManualDef>::const_iterator i = manualDevices.begin(); i != manualDevices.end(); i++) {
DataNode *rig_node = manual_node->newChild("device");
*rig_node->newChild("factory") = i->factory;
*rig_node->newChild("params") = i->params;
}
}
#ifdef USE_HAMLIB
DataNode *rig_node = cfg.rootNode()->newChild("rig");
*rig_node->newChild("model") = rigModel.load();
*rig_node->newChild("rate") = rigRate.load();
*rig_node->newChild("port") = rigPort;
#endif
std::string cfgFileName = getConfigFileName();
if (!cfg.SaveToFileXML(cfgFileName)) {
std::cout << "Error saving :: configuration file '" << cfgFileName << "' is not writable!" << std::endl;
return false;
}
return true;
}
示例6: QDialog
MainWindow::MainWindow(QWidget *parent)
: QDialog(parent)
{
ui.setupUi(this);
DataTree *tree = this->findChild<DataTree *>(tr("treeWidget"));
QStringList headers;
headers << tr("title");
tree->setHeaderLabels(headers);
tree->setHeaderHidden(true);
auto exportButton = this->findChild<QPushButton *>(tr("pushButton_exportData"));
if (exportButton)
{
this->connect(exportButton, SIGNAL(clicked()), this, SLOT(onExportData()));
}
auto setExportPathButton = this->findChild<QPushButton *>(tr("pushButton_setExportPath"));
if (setExportPathButton)
{
this->connect(setExportPathButton, SIGNAL(clicked()), this, SLOT(onSetExportPath()));
}
auto helpButton = this->findChild<QPushButton *>(tr("pushButton_help"));
if (helpButton)
{
this->connect(helpButton, SIGNAL(clicked()), this, SLOT(onHelp()));
}
this->setAcceptDrops(true);
loadOpenedFileList();
//QString filename = QObject::tr("D:\\dev\\project\\misc\\qt\\DataExporter\\data\\test.xlsx");
//tree->loadData(filename);
}
示例7: file
DataTree* DataTree::create(const std::string& fileName)
{
if (fileName.empty())
{
return nullptr;
}
std::string fileData = std::string();
std::ifstream file(fileName);
if (file.is_open())
{
// Simply using while loop and getline to read file instead of using file size method because file size wasn't correct.
std::string line;
while (std::getline(file, line))
{
fileData += (line + "\n");
}
}
if (fileData.empty() || fileData.size() <= 0)
{
//Data is empty or size is 0.
return nullptr;
}
DataTree* data = new DataTree("ROOT_KEY", "ROOT_VALUE");
bool result = data->parse(fileData);
if (result == false)
{
//Failed to parse
delete data;
return nullptr;
}
return data;
}
示例8: save
bool AppConfig::save() {
DataTree cfg;
cfg.rootNode()->setName("cubicsdr_config");
if (winW.load() && winH.load()) {
DataNode *window_node = cfg.rootNode()->newChild("window");
*window_node->newChild("x") = winX.load();
*window_node->newChild("y") = winY.load();
*window_node->newChild("w") = winW.load();
*window_node->newChild("h") = winH.load();
*window_node->newChild("max") = winMax.load();
*window_node->newChild("theme") = themeId.load();
*window_node->newChild("snap") = snap.load();
*window_node->newChild("center_freq") = centerFreq.load();
}
DataNode *devices_node = cfg.rootNode()->newChild("devices");
std::map<std::string, DeviceConfig *>::iterator device_config_i;
for (device_config_i = deviceConfig.begin(); device_config_i != deviceConfig.end(); device_config_i++) {
DataNode *device_node = devices_node->newChild("device");
device_config_i->second->save(device_node);
}
std::string cfgFileName = getConfigFileName();
if (!cfg.SaveToFileXML(cfgFileName)) {
std::cout << "Error saving :: configuration file '" << cfgFileName << "' is not writable!" << std::endl;
return false;
}
return true;
}
示例9: GetFileHeader
// read file type and id name without actually opening it
bool Resource::GetFileHeader(const std::string& filename, DataTree &fileHeader_out)
{
char *hdr_serialized;
long dataSize,headerSize;
ifstream fin(filename.c_str(), ios::binary);
fin.read((char *)&headerSize, sizeof(long));
fin.read((char *)&dataSize, sizeof(long));
hdr_serialized = new char[headerSize];
fin.read(hdr_serialized,headerSize);
fileHeader_out.setSerialized(hdr_serialized);
fin.close();
delete hdr_serialized;
return true;
}
示例10: atol
bool SnapLog::Impl::Serialize(
const DataTree &data_tree,
const map<uint64, uint64> &session_timeouts,
string *output) {
global::SnapLogFileHeader header;
header.magic = atol(kSnapLogFileHeaderMagic);
header.version = kLogVersion;
header.dbid = kDbId;
global::SessionList session_list;
ASSERT_TRUE(SerializeSessionList(session_timeouts, &session_list));
header.session_size = session_list.ByteSize();
string header_content;
ASSERT_TRUE(header.Serialize(&header_content));
string session_list_content;
ASSERT_TRUE(session_list.SerializeToString(&session_list_content));
string data_tree_content;
ASSERT_TRUE(data_tree.Serialize(&data_tree_content));
*output = header_content;
output->append(session_list_content);
output->append(data_tree_content);
return true;
}
示例11: save
bool AppConfig::save() {
DataTree cfg;
cfg.rootNode()->setName("cubicsdr_config");
if (winW.load() && winH.load()) {
DataNode *window_node = cfg.rootNode()->newChild("window");
*window_node->newChild("x") = winX.load();
*window_node->newChild("y") = winY.load();
*window_node->newChild("w") = winW.load();
*window_node->newChild("h") = winH.load();
*window_node->newChild("max") = winMax.load();
*window_node->newChild("tips") = showTips.load();
*window_node->newChild("perf_mode") = (int)perfMode.load();
*window_node->newChild("theme") = themeId.load();
*window_node->newChild("font_scale") = fontScale.load();
*window_node->newChild("snap") = snap.load();
*window_node->newChild("center_freq") = centerFreq.load();
*window_node->newChild("waterfall_lps") = waterfallLinesPerSec.load();
*window_node->newChild("spectrum_avg") = spectrumAvgSpeed.load();
*window_node->newChild("modemprops_collapsed") = modemPropsCollapsed.load();;
*window_node->newChild("db_offset") = dbOffset.load();
*window_node->newChild("main_split") = mainSplit.load();
*window_node->newChild("vis_split") = visSplit.load();
*window_node->newChild("bookmark_split") = bookmarkSplit.load();
*window_node->newChild("bookmark_visible") = bookmarksVisible.load();
}
//Recording settings:
DataNode *rec_node = cfg.rootNode()->newChild("recording");
*rec_node->newChild("path") = recordingPath;
*rec_node->newChild("squelch") = recordingSquelchOption;
*rec_node->newChild("file_time_limit") = recordingFileTimeLimitSeconds;
DataNode *devices_node = cfg.rootNode()->newChild("devices");
std::map<std::string, DeviceConfig *>::iterator device_config_i;
for (device_config_i = deviceConfig.begin(); device_config_i != deviceConfig.end(); device_config_i++) {
DataNode *device_node = devices_node->newChild("device");
device_config_i->second->save(device_node);
}
if (manualDevices.size()) {
DataNode *manual_node = cfg.rootNode()->newChild("manual_devices");
for (std::vector<SDRManualDef>::const_iterator i = manualDevices.begin(); i != manualDevices.end(); i++) {
DataNode *rig_node = manual_node->newChild("device");
*rig_node->newChild("factory") = i->factory;
*rig_node->newChild("params") = i->params;
}
}
#ifdef USE_HAMLIB
DataNode *rig_node = cfg.rootNode()->newChild("rig");
*rig_node->newChild("enabled") = rigEnabled.load()?1:0;
*rig_node->newChild("model") = rigModel.load();
*rig_node->newChild("rate") = rigRate.load();
*rig_node->newChild("port") = rigPort;
*rig_node->newChild("control") = rigControlMode.load()?1:0;
*rig_node->newChild("follow") = rigFollowMode.load()?1:0;
*rig_node->newChild("center_lock") = rigCenterLock.load()?1:0;
*rig_node->newChild("follow_modem") = rigFollowModem.load()?1:0;
#endif
std::string cfgFileName = getConfigFileName();
if (!cfg.SaveToFileXML(cfgFileName)) {
std::cout << "Error saving :: configuration file '" << cfgFileName << "' is not writable!" << std::endl;
return false;
}
return true;
}
示例12: main
//.........这里部分代码省略.........
for (int p=0; p<nPMT; p++) {
for (int i=0; i<posmap.getNbinsXY(); i++) {
for (int j=0; j<posmap.getNbinsXY(); j++) {
if (p == 0)
sprintf(hisxyName, "e0_%0.0f_%0.0f", posmap.getBinCenter(i), posmap.getBinCenter(j));
if (p == 1)
sprintf(hisxyName, "e1_%0.0f_%0.0f", posmap.getBinCenter(i), posmap.getBinCenter(j));
if (p == 2)
sprintf(hisxyName, "e2_%0.0f_%0.0f", posmap.getBinCenter(i), posmap.getBinCenter(j));
if (p == 3)
sprintf(hisxyName, "e3_%0.0f_%0.0f", posmap.getBinCenter(i), posmap.getBinCenter(j));
if (p == 4)
sprintf(hisxyName, "w0_%0.0f_%0.0f", posmap.getBinCenter(i), posmap.getBinCenter(j));
if (p == 5)
sprintf(hisxyName, "w1_%0.0f_%0.0f", posmap.getBinCenter(i), posmap.getBinCenter(j));
if (p == 6)
sprintf(hisxyName, "w2_%0.0f_%0.0f", posmap.getBinCenter(i), posmap.getBinCenter(j));
if (p == 7)
sprintf(hisxyName, "w3_%0.0f_%0.0f", posmap.getBinCenter(i), posmap.getBinCenter(j));
hisxy[p][i][j] = new TH1D(hisxyName, "", nBinHist,-100.,4000.0);
}
}
}
// Loop through input ntuples
char tempIn[500];
for (int i=0; i<nRuns; i++) {
// Open input ntuple
sprintf(tempIn, "%s/replay_pass2_%i.root",getenv("REPLAY_PASS2"), runList[i]);
DataTree *t = new DataTree();
t->setupInputTree(std::string(tempIn),"pass2");
if ( !t->inputTreeIsGood() ) {
std::cout << "Skipping " << tempIn << "... Doesn't exist or couldn't be opened.\n";
continue;
}
int nEvents = t->getEntries();
cout << "Processing " << runList[i] << " ... " << endl;
cout << "... nEvents = " << nEvents << endl;
// Loop over events
for (int i=0; i<nEvents; i++) {
t->getEvent(i);
// Select Type 0 events
if (t->PID != 1) continue;
if (t->Type != 0) continue;
//Cut out clipped events
if ( t->Side==0 && ( t->xE.nClipped>0 || t->yE.nClipped>0 || t->xeRC<1 || t->xeRC>4 || t->yeRC<1 || t->yeRC>4 ) ) continue;
else if ( t->Side==1 && ( t->xW.nClipped>0 || t->yW.nClipped>0 || t->xwRC<1 || t->xwRC>4 || t->ywRC<1 || t->ywRC>4) ) continue;
/*bool moveOnX = true, moveOnY=true; // Determining if the event is of the correct response class in x and y
//Swank addition: Wire Chamber Response class.
for (int j=0; j<numResponseClasses; j++) {
if (t->xeRC == responseClasses[j]) {moveOnX=false;}
if (t->yeRC == responseClasses[j]) {moveOnY=false;}
示例13: load
bool AppConfig::load() {
DataTree cfg;
std::string cfgFileDir = getConfigDir();
std::string cfgFileName = getConfigFileName();
wxFileName cfgFile = wxFileName(cfgFileName);
if (!cfgFile.Exists()) {
if (configName.length()) {
wxFileName baseConfig = wxFileName(getConfigFileName(true));
if (baseConfig.Exists()) {
std::string baseConfigFileName = baseConfig.GetFullPath(wxPATH_NATIVE).ToStdString();
std::cout << "Creating new configuration file '" << cfgFileName << "' by copying '" << baseConfigFileName << "'..";
wxCopyFile(baseConfigFileName, cfgFileName);
if (!cfgFile.Exists()) {
std::cout << "failed." << std::endl;
return true;
}
std::cout << "ok." << std::endl;
} else {
return true;
}
} else {
return true;
}
}
if (cfgFile.IsFileReadable()) {
std::cout << "Loading:: configuration file '" << cfgFileName << "'" << std::endl;
cfg.LoadFromFileXML(cfgFileName);
} else {
std::cout << "Error loading:: configuration file '" << cfgFileName << "' is not readable!" << std::endl;
return false;
}
if (cfg.rootNode()->hasAnother("window")) {
int x,y,w,h;
int max;
DataNode *win_node = cfg.rootNode()->getNext("window");
if (win_node->hasAnother("w") && win_node->hasAnother("h") && win_node->hasAnother("x") && win_node->hasAnother("y")) {
win_node->getNext("x")->element()->get(x);
win_node->getNext("y")->element()->get(y);
win_node->getNext("w")->element()->get(w);
win_node->getNext("h")->element()->get(h);
winX.store(x);
winY.store(y);
winW.store(w);
winH.store(h);
}
if (win_node->hasAnother("max")) {
win_node->getNext("max")->element()->get(max);
winMax.store(max?true:false);
}
if (win_node->hasAnother("theme")) {
int theme;
win_node->getNext("theme")->element()->get(theme);
themeId.store(theme);
}
if (win_node->hasAnother("snap")) {
long long snapVal;
win_node->getNext("snap")->element()->get(snapVal);
snap.store(snapVal);
}
if (win_node->hasAnother("center_freq")) {
long long freqVal;
win_node->getNext("center_freq")->element()->get(freqVal);
centerFreq.store(freqVal);
}
if (win_node->hasAnother("waterfall_lps")) {
int lpsVal;
win_node->getNext("waterfall_lps")->element()->get(lpsVal);
waterfallLinesPerSec.store(lpsVal);
}
if (win_node->hasAnother("spectrum_avg")) {
float avgVal;
win_node->getNext("spectrum_avg")->element()->get(avgVal);
spectrumAvgSpeed.store(avgVal);
}
}
if (cfg.rootNode()->hasAnother("devices")) {
DataNode *devices_node = cfg.rootNode()->getNext("devices");
while (devices_node->hasAnother("device")) {
DataNode *device_node = devices_node->getNext("device");
if (device_node->hasAnother("id")) {
std::string deviceId = device_node->getNext("id")->element()->toString();
getDevice(deviceId)->load(device_node);
}
//.........这里部分代码省略.........
示例14: main
int main(int argc, char *argv[]) {
if (argc!=2) {
std::cout << "Usage: ./endpointGain.exe [octet]\n";
//std::cout << "The code will produce comparisons for every octet in the range given,\non an octet-by-octet basis, and as a whole, using the Super-Sum\n";
exit(0);
}
int octet = atoi(argv[1]);
if ( std::find(badOct.begin(), badOct.end(),octet) != badOct.end() ) {
std::cout << "Bad Octet... \n";
std::ofstream gainFile(TString::Format("%s/EndpointGain/endpointGain_octet-%i.dat", getenv("ENDPOINT_ANALYSIS"),octet));
for ( int i=0; i<8; ++i ) gainFile << 1. << std::endl;
gainFile.close();
return 0;
}
int nBins = 100;
double minRange = 0.;
double maxRange = 1000.;
std::vector <int> runs = readOctetFile(octet);
std::vector <int> bgruns = readOctetFileForBGruns(octet);
std::vector < std::vector <Double_t> > pmtBackgroundRates = readPMTbackgroundRates(octet);
////////////////// Begin with data files /////////////////////
// Vectors for creating the individual runs events and errors
std::vector < std::vector < std::vector <Double_t> > > pmtSpec;
std::vector < std::vector < std::vector <Double_t> > > pmtSpecErr;
pmtSpec.resize(runs.size(),std::vector<std::vector<Double_t>>(8,std::vector<Double_t>(nBins,0.)));
pmtSpecErr.resize(runs.size(),std::vector<std::vector<Double_t>>(8,std::vector<Double_t>(nBins,0.)));
std::vector < std::vector < std::vector <Double_t> > > bgpmtSpec;
std::vector < std::vector < std::vector <Double_t> > > bgpmtSpecErr;
bgpmtSpec.resize(runs.size(),std::vector<std::vector<Double_t>>(8,std::vector<Double_t>(nBins,0.)));
bgpmtSpecErr.resize(runs.size(),std::vector<std::vector<Double_t>>(8,std::vector<Double_t>(nBins,0.)));
// Now loop over each run to determine the individual spectra, then fill their appropriate bins in the vector
TH1D *spec[8]; // All 8 PMTs signals
TH1D *bgspec[8]; // All 8 PMTs bg signals
TH1D *simspec[8]; // All 8 PMTs signals
int nRun = 0;
std::vector <Double_t> totalTime(runs.size(),0.); // Holds the runLengths
std::vector <Double_t> bgtotalTime(runs.size(),0.); // Holds the runLengths
//runs.resize(0);
for ( auto rn : runs ) {
for ( int i=0; i<8; ++i ) {
spec[i] = new TH1D(TString::Format("PMT%i",i),TString::Format("PMT %i",i),
nBins, minRange, maxRange);
}
// DataTree structure
DataTree t;
// Input ntuple
char tempIn[500];
sprintf(tempIn, "%s/replay_pass3_%i.root", getenv("REPLAY_PASS3"),rn);
t.setupInputTree(std::string(tempIn),"pass3");
unsigned int nevents = t.getEntries();
t.getEvent(nevents-1);
totalTime[nRun] = t.Time;
double r2E = 0.; //position of event squared
double r2W = 0.;
for (unsigned int n=0 ; n<nevents ; n++ ) {
t.getEvent(n);
r2E = t.xE.center*t.xE.center + t.yE.center*t.yE.center;
r2W = t.xW.center*t.xW.center + t.yW.center*t.yW.center;
if ( t.PID==1 && t.Side<2 && t.Type==0 && t.Erecon>0. ) {
if ( t.Side==0 ) {
if ( t.xeRC>6 || t.yeRC>6 ) continue; //only look at MWPC signal on East
else if ( t.xE.mult<1 || t.yE.mult<1 ) continue;
//.........这里部分代码省略.........
示例15: main
int main(int argc, char *argv[])
{
if ( argc<2 || argc>3 ) {
std::cout << "USAGE: ./replay_pass3.exe [run] [applyEndpointGain = false]\n\n";
exit(0);
}
cout.setf(ios::fixed, ios::floatfield);
cout.precision(12);
int runNumber = atoi(argv[1]);
bool applyEndpointGain = false;
if ( argc==3 && ( TString(argv[2])==TString("true") || atoi(argv[2])==1 ) ) applyEndpointGain = true;
int nPMT = 8;
int nParams = 3; //takes a quadratic
// Run number integer
cout << "Run " << runNumber << " ..." << endl;
char tempOut[500];
sprintf(tempOut, "%s/replay_pass3_%s.root",getenv("REPLAY_PASS3"), argv[1]);
//sprintf(tempOut, "replay_pass3_%s.root", argv[1]);
//Check if the file is good already and quit if it is so that we can
// only replay the files that are bad...
if ( OnlyReplayBadFiles ) {
if ( checkIfReplayFileIsGood(std::string(tempOut)) == 1 ) return 1;
else {
std::ofstream badRuns("badRuns.txt", std::fstream::app);
badRuns << argv[1] << "\n";
badRuns.close();
}
}
// Reading in pedestals file to get cathode pedestals
// Read pedestals file
char tempFilePed[500];
int iRun;
sprintf(tempFilePed, "%s/pedestals_%s.dat", getenv("PEDESTALS"), argv[1]);
std::cout << "... Reading: " << tempFilePed << std::endl;
std::ifstream filePed(tempFilePed);
for (int i=0; i<8; i++) {
filePed >> iRun >> pedQadc[i];
}
for (int i=0; i<32; i++) {
filePed >> iRun >> pedPdc2[i];
}
for (int i=0; i<32; i++) {
filePed >> iRun >> pedPadc[i];
}
filePed >> iRun >> pedPdc30;
filePed >> iRun >> pedPdc34;
cout << "... Applying Calibration ..." << endl;
unsigned int calibrationPeriod = getSrcRunPeriod(runNumber);
LinearityCurve linearityCurve(calibrationPeriod,false); //Get the linearity curve
EreconParameterization eRecon(runNumber); //Load the simulated relationship between EQ and Etrue
WirechamberCal mwpcCal(runNumber); //Load the Wirechamber Calibration
std::vector <Double_t> epGain(8,1.); // Loading the endpoint gain factors if they are to be used
if ( applyEndpointGain ) epGain = loadEndpointGain(runNumber);
std::vector <Int_t> pmtQuality = getEreconPMTQuality(runNumber); //Read in PMT quality file
std::vector <Double_t> alpha = GetAlphaValues(calibrationPeriod); //Get values for nPE/keV...
PositionMap posmap(5.0,50.); //Reading Scintillator position maps
posmap.readPositionMap( getXeRunPeriod(runNumber), "endpoint" );
MWPCPositionMap anodeMap(5., 50.); // Reading Anode position maps
anodeMap.readMWPCPositionMap( getXeRunPeriodForMWPCmap(runNumber) ,250.,300.); // Using 250-300 keV because that's the most probable range
DataTree *t = new DataTree(); // DataTree structure for input pass2 and output pass3
t->makeOutputTree(std::string(tempOut),"pass3"); // Open output ntuple
// Input ntuple
char tempIn[500];
sprintf(tempIn, "%s/replay_pass2_%s.root", getenv("REPLAY_PASS2"),argv[1]);
t->setupInputTree(std::string(tempIn),"pass2");
int nEvents = t->getEntries();
cout << "... Processing nEvents = " << nEvents << endl;
vector < vector <Int_t> > gridPoint;
vector < Double_t > eta;
vector < Double_t > old_eta;
vector < Double_t > gaus_eta;
//.........这里部分代码省略.........