Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- struct GenieData
- {
- unsigned int current;
- unsigned int intType;
- unsigned int incoming;
- unsigned int primaryLepton;
- unsigned int nFSPart;
- unsigned int FSPartPDG[500];
- double w;
- double Q2;
- double vtx[4];
- double primFSLepton[4];
- };
- //======Reading the Truth File======
- void read_playlist(const char* filename, TChain* chain)
- {
- std::ifstream playlist(filename);
- std::string line;
- if (playlist.is_open()){
- while ( std::getline(playlist, line) ){
- std::cout << "File: " << line << std::endl;
- chain->Add( line.c_str() );
- }
- playlist.close();
- }
- }
- //=======Get Branches=====
- void get_mc_branches(TChain* chain, GenieData& data){
- chain->SetBranchAddress("mc_intType", &data.intType);
- chain->SetBranchAddress("mc_incoming", &data.incoming);
- chain->SetBranchAddress("mc_current", &data.current);
- chain->SetBranchAddress("mc_primaryLepton", &data.primaryLepton);
- chain->SetBranchAddress("mc_nFSPart", &data.nFSPart);
- chain->SetBranchAddress("mc_FSPartPDG", &data.FSPartPDG);
- chain->SetBranchAddress("mc_w", &data.w);
- chain->SetBranchAddress("mc_Q2", &data.Q2);
- chain->SetBranchAddress("mc_vtx",&data.vtx);
- chain->SetBranchAddress("mc_primFSLepton", &data.primFSLepton);
- }
- //=========Output Branches========
- void set_output_branches(TTree* output, GenieData& data)
- {
- output->Branch("mc_current", &data.current, "mc_current/I");
- output->Branch("mc_intType", &data.intType,"mc_intType/I");
- output->Branch("mc_incoming", &data.incoming, "mc_incoming/I");
- output->Branch("mc_primaryLepton", &data.primaryLepton, "mc_primaryLepton/I");
- output->Branch("mc_nFSPart", &data.nFSPart, "mc_nFSPart/I");
- output->Branch("mc_FSPartPDG", &data.FSPartPDG, "mc_FSPartPDG[mc_nFSPart]/I");
- output->Branch("mc_w", &data.w, "mc_w/D");
- output->Branch("mc_Q2", &data.Q2, "mc_Q2/D");
- output->Branch("mc_vtx", &data.vtx, "mc_vtx[4]/D");
- output->Branch("mc_primFSLepton", &data.primFSLepton, "mc_primFSLepton[4]/D");
- }
- //=======Genie Histos======
- struct GenieHistos
- {
- PlotUtils::MnvH1D* Q2;
- PlotUtils::MnvH1D* Q2_Res;
- PlotUtils::MnvH1D* Q2_Res_pi0;
- PlotUtils::MnvH1D* Q2_DES;
- PlotUtils::MnvH1D* Q2_DES_pi0;
- PlotUtils::MnvH1D* w;
- PlotUtils::MnvH1D* w_Res;
- PlotUtils::MnvH1D* w_Res_pi0;
- PlotUtils::MnvH1D* w_DES;
- PlotUtils::MnvH1D* w_DES_pi0;
- PlotUtils::MnvH1D* muonE;
- PlotUtils::MnvH1D* muonE_DES;
- PlotUtils::MnvH1D* muonE_pi0;
- PlotUtils::MnvH1D* muonE_DES_pi0;
- };
- //======Chains=====
- void truth_minos(){
- TChain* mc_chain = new TChain("Truth");
- cout << "Creating the Truth chain" << endl;
- read_playlist("MC_playlist.txt", mc_chain);
- GenieData mc;
- get_mc_branches(mc_chain, mc);
- TFile *output_file = new TFile("truth_minos.root", "RECREATE");
- TTree *output_tree = new TTree("truth_minos", "truth_minos");
- set_output_branches(output_tree, mc);
- int n_entries = 10000;
- for (int i = 0; i < n_entries; i++){
- if (i % 100000 == 0) {
- cout << "Searching at the TruthMC entry: " << i << "/" << n_entries<< endl;
- }
- mc_chain->GetEntry(i);
- }
- output_tree->Print();
- output_tree->Write();
- output_file->Write();
- output_file->Clear();
- output_file->Close();
- }
- //=======this is the end, my friend, the end=======
- int main(int argc, char** argv)
- {
- truth_minos();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement