Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
91 changes: 59 additions & 32 deletions src/app/ProcessNTuples.C
Original file line number Diff line number Diff line change
Expand Up @@ -31,18 +31,23 @@
#include "XSecAnalyzer/Selections/SelectionBase.hh"
#include "XSecAnalyzer/Selections/SelectionFactory.hh"

void analyze( const std::vector< std::string >& in_file_names,
const std::vector< std::string >& selection_names,
const std::string& output_filename )
struct Arguments {
std::vector<std::string> input_files;
std::string output_file;
std::vector<std::string> selection_names;
int nevents = -1;
};

void analyze( const Arguments & arguments )
{
std::cout << "\nRunning ProcessNTuples with options:\n";
std::cout << "\toutput_filename: " << output_filename << '\n';
std::cout << "\toutput_filename: " << arguments.output_file << '\n';
std::cout << "\tinput_file_names:\n";
for ( size_t i = 0u; i < in_file_names.size(); ++i ) {
std::cout << "\t\t- " << in_file_names[i] << '\n';
for (const auto & name : arguments.input_files) {
std::cout << "\t\t- " << name << '\n';
}
std::cout << "\n\nselection names:\n";
for ( const auto& sel_name : selection_names ) {
for ( const auto& sel_name : arguments.selection_names ) {
std::cout << "\t\t- " << sel_name << '\n';
}

Expand All @@ -51,14 +56,14 @@ void analyze( const std::vector< std::string >& in_file_names,
TChain events_ch( "nuselection/NeutrinoSelectionFilter" );
TChain subruns_ch( "nuselection/SubRun" );

for ( const auto& f_name : in_file_names ) {
for ( const auto& f_name : arguments.input_files ) {
events_ch.Add( f_name.c_str() );
subruns_ch.Add( f_name.c_str() );
}

// OUTPUT TTREE
// Make an output TTree for plotting (one entry per event)
TFile* out_file = new TFile( output_filename.c_str(), "recreate" );
TFile* out_file = new TFile( arguments.output_file.c_str(), "recreate" );
out_file->cd();
TTree* out_tree = new TTree( "stv_tree", "STV analysis tree" );

Expand All @@ -84,7 +89,7 @@ void analyze( const std::vector< std::string >& in_file_names,
std::vector< std::unique_ptr<SelectionBase> > selections;

SelectionFactory sf;
for ( const auto& sel_name : selection_names ) {
for ( const auto& sel_name : arguments.selection_names ) {
selections.emplace_back().reset( sf.CreateSelection(sel_name) );
}

Expand All @@ -102,7 +107,9 @@ void analyze( const std::vector< std::string >& in_file_names,

while ( true ) {

//if ( events_entry > 1000) break;
//If not doing all events (-1), break after nevents
if ( (arguments.nevents != -1) && (events_entry > arguments.nevents) )
break;

if ( events_entry % 1000 == 0 ) {
std::cout << "Processing event #" << events_entry << '\n';
Expand Down Expand Up @@ -152,7 +159,7 @@ void analyze( const std::vector< std::string >& in_file_names,
for ( auto& sel : selections ) {
sel->summary();
}
std::cout << "Wrote output to:" << output_filename << std::endl;
std::cout << "Wrote output to:" << arguments.output_file << std::endl;

for ( auto& sel : selections ) {
sel->final_tasks();
Expand All @@ -163,34 +170,54 @@ void analyze( const std::vector< std::string >& in_file_names,
delete out_file;
}

void analyzer( const std::string& in_file_name,
const std::vector< std::string > selection_names,
const std::string& output_filename)
void analyzer( const Arguments & arguments )
{
std::vector< std::string > in_files = { in_file_name };
analyze( in_files, selection_names, output_filename );
analyze( arguments );
}

int main( int argc, char* argv[] ) {

if ( argc != 4 ) {
std::cout << "Usage: " << argv[0]
<< " INPUT_PELEE_NTUPLE_FILE SELECTION_NAMES OUTPUT_FILE\n";
return 1;
bool parse_args( int argc, char* argv[], Arguments & arg_results ) {
for (int iArg = 1; iArg < argc; iArg++) {
if (!strcasecmp(argv[iArg],"-o")) {
arg_results.output_file = argv[++iArg];
}
if (!strcasecmp(argv[iArg],"-i")) {
arg_results.input_files.push_back(argv[++iArg]);
}
if (!strcasecmp(argv[iArg],"-s")) {
std::stringstream sel_ss(argv[++iArg]);
std::string sel_name;
while ( std::getline(sel_ss, sel_name, ',') ) {
arg_results.selection_names.push_back( sel_name );
}
}
if (!strcasecmp(argv[iArg],"-n")) {
arg_results.nevents = std::atoi(argv[++iArg]);
if (arg_results.nevents < -1) {
std::cerr << "Error: Must provide -1 for all events or positive number" <<
std::endl;
return false;
}
}
if (!strcasecmp(argv[iArg],"-h")) {
std::cout << argv[0] <<
"-i <input_pelee_file> -o <output_file> " <<
"-s <comma-separated selection names list> " <<
"-n <nevents: default -1 for all> " <<
std::endl;
return false;
}
}
return true;
}

std::string input_file_name( argv[1] );
std::string output_file_name( argv[3] );

std::vector< std::string > selection_names;
int main( int argc, char* argv[] ) {

std::stringstream sel_ss( argv[2] );
std::string sel_name;
while ( std::getline(sel_ss, sel_name, ',') ) {
selection_names.push_back( sel_name );
Arguments arguments;
if (!parse_args(argc, argv, arguments)) {
return 1;
}

analyzer( input_file_name, selection_names, output_file_name );
analyzer( arguments );

return 0;
}