using namespace std; 

struct myBucketOfInformation_t {
  TLorentzVector momentum;
  TLorentzVector momentumCor;
  TLorentzVector vert4;
  int pindex;
  int sciDet;
};

struct myTree_t {
  std::vector <Int_t> *   REC_Particle_pid = 0;
  std::vector <Int_t> *   RECFT_Particle_pid = 0;
  std::vector <Char_t> *  REC_Particle_charge = 0;
  std::vector <Short_t> * REC_Particle_status = 0;
  std::vector <Short_t> * RECFT_Particle_status = 0;
  std::vector <Float_t> * REC_Particle_px = 0;
  std::vector <Float_t> * REC_Particle_py = 0;
  std::vector <Float_t> * REC_Particle_pz = 0;
  std::vector <Float_t> * REC_Particle_vx = 0;
  std::vector <Float_t> * REC_Particle_vy = 0;
  std::vector <Float_t> * REC_Particle_vz = 0;
  std::vector <Float_t> * REC_Particle_vt = 0; 
  std::vector <Float_t> * RECFT_Particle_vt = 0; 
  std::vector <Float_t> * REC_Particle_beta = 0;
  std::vector <Float_t> * RECFT_Particle_beta = 0;
  std::vector <Float_t> * REC_Particle_chi2pid = 0;
  std::vector <Float_t> * RECFT_Particle_chi2pid = 0;

  std::vector <Short_t> * REC_Scintillator_index = 0;
  std::vector <Short_t> * REC_Scintillator_pindex = 0;
  std::vector <Char_t> *  REC_Scintillator_detector = 0;
  std::vector <Char_t> *  REC_Scintillator_sector = 0;
  std::vector <Char_t> *  REC_Scintillator_layer = 0;
  std::vector <Short_t> * REC_Scintillator_component = 0;
  std::vector <Float_t> * REC_Scintillator_energy = 0;
  std::vector <Float_t> * REC_Scintillator_time = 0;
  std::vector <Float_t> * REC_Scintillator_path = 0;
  std::vector <Float_t> * REC_Scintillator_chi2 = 0;
  std::vector <Float_t> * REC_Scintillator_x = 0;
  std::vector <Float_t> * REC_Scintillator_y = 0;
  std::vector <Float_t> * REC_Scintillator_z = 0;
  std::vector <Float_t> * REC_Scintillator_hx = 0;
  std::vector <Float_t> * REC_Scintillator_hy = 0;
  std::vector <Float_t> * REC_Scintillator_hz = 0;
  std::vector <Short_t> * REC_Scintillator_status = 0;

  std::vector<Short_t> * REC_ForwardTagger_index = 0;
  std::vector<Short_t> * REC_ForwardTagger_pindex = 0;
  std::vector<Char_t> *  REC_ForwardTagger_detector = 0;
  //std::vector<Int_t> *  REC_ForwardTagger_detector = 0;
  std::vector<Char_t> *  REC_ForwardTagger_layer = 0;
  std::vector<Float_t> * REC_ForwardTagger_energy = 0;
  std::vector<Float_t> * REC_ForwardTagger_time = 0;
  std::vector<Float_t> * REC_ForwardTagger_path = 0;
  std::vector<Float_t> * REC_ForwardTagger_chi2 = 0;
  std::vector<Float_t> * REC_ForwardTagger_x = 0;
  std::vector<Float_t> * REC_ForwardTagger_y = 0;
  std::vector<Float_t> * REC_ForwardTagger_z = 0;
  std::vector<Float_t> * REC_ForwardTagger_dx = 0;
  std::vector<Float_t> * REC_ForwardTagger_dy = 0;
  std::vector<Float_t> * REC_ForwardTagger_radius = 0;
  std::vector<Short_t> * REC_ForwardTagger_size = 0;
  std::vector<Short_t> * REC_ForwardTagger_status = 0;

  //no idea what these are 
  //std::vector <double> * REC_Event_STTime = 0;
  //std::vector <double> * REC_Event_RFTime = 0;

  //std::vector <int> *    CTOF_hits_trkID = 0;
  //std::vector <double> * CTOF_hits_energy = 0;

  //std::vector <double> * FTCAL_clusters_recEnergy = 0;

  //std::vector <long long> * REC_Event_TRG = 0;
};

void getBranchesStage1(TTree *inTree, myTree_t *myTree){

  //cout<<"whatup"<<endl;
  //inTree->SetBranchAddress("FTCAL_clusters_recEnergy",&myTree->FTCAL_clusters_recEnergy);

  //inTree->SetBranchAddress("REC_Event_TRG",&myTree->REC_Event_TRG);

  inTree->SetBranchAddress("REC_Particle_pid",&myTree->REC_Particle_pid);
  inTree->SetBranchAddress("RECFT_Particle_pid",&myTree->RECFT_Particle_pid);

  //cout<<"whatup Bitches"<<endl;

  inTree->SetBranchAddress("REC_Particle_charge",&myTree->REC_Particle_charge);
  inTree->SetBranchAddress("REC_Particle_status",&myTree->REC_Particle_status);
  inTree->SetBranchAddress("RECFT_Particle_status",&myTree->RECFT_Particle_status);
  inTree->SetBranchAddress("REC_Particle_px",&myTree->REC_Particle_px);
  inTree->SetBranchAddress("REC_Particle_py",&myTree->REC_Particle_py);
  inTree->SetBranchAddress("REC_Particle_pz",&myTree->REC_Particle_pz);
  inTree->SetBranchAddress("REC_Particle_vx",&myTree->REC_Particle_vx);
  inTree->SetBranchAddress("REC_Particle_vy",&myTree->REC_Particle_vy);
  inTree->SetBranchAddress("REC_Particle_vz",&myTree->REC_Particle_vz);
  inTree->SetBranchAddress("REC_Particle_vt",&myTree->REC_Particle_vt);
  inTree->SetBranchAddress("RECFT_Particle_vt",&myTree->RECFT_Particle_vt);
  inTree->SetBranchAddress("REC_Particle_beta",&myTree->REC_Particle_beta);
  inTree->SetBranchAddress("RECFT_Particle_beta",&myTree->RECFT_Particle_beta);
  inTree->SetBranchAddress("REC_Particle_chi2pid",&myTree->REC_Particle_chi2pid);
  inTree->SetBranchAddress("RECFT_Particle_chi2pid",&myTree->RECFT_Particle_chi2pid);

  inTree->SetBranchAddress("REC_Scintillator_index",&myTree->REC_Scintillator_index);
  inTree->SetBranchAddress("REC_Scintillator_pindex",&myTree->REC_Scintillator_pindex);
  inTree->SetBranchAddress("REC_Scintillator_detector",&myTree->REC_Scintillator_detector);
  inTree->SetBranchAddress("REC_Scintillator_sector",&myTree->REC_Scintillator_sector);
  inTree->SetBranchAddress("REC_Scintillator_layer",&myTree->REC_Scintillator_layer);
  inTree->SetBranchAddress("REC_Scintillator_component",&myTree->REC_Scintillator_component);
  inTree->SetBranchAddress("REC_Scintillator_x",&myTree->REC_Scintillator_x);
  inTree->SetBranchAddress("REC_Scintillator_y",&myTree->REC_Scintillator_y);
  inTree->SetBranchAddress("REC_Scintillator_z",&myTree->REC_Scintillator_z);
  inTree->SetBranchAddress("REC_Scintillator_hx",&myTree->REC_Scintillator_hx);
  inTree->SetBranchAddress("REC_Scintillator_hy",&myTree->REC_Scintillator_hy);
  inTree->SetBranchAddress("REC_Scintillator_hz",&myTree->REC_Scintillator_hz);
  inTree->SetBranchAddress("REC_Scintillator_path",&myTree->REC_Scintillator_path);
  inTree->SetBranchAddress("REC_Scintillator_time",&myTree->REC_Scintillator_time);
  inTree->SetBranchAddress("REC_Scintillator_energy",&myTree->REC_Scintillator_energy);
  inTree->SetBranchAddress("REC_Scintillator_chi2",&myTree->REC_Scintillator_chi2);
  inTree->SetBranchAddress("REC_Scintillator_status",&myTree->REC_Scintillator_status);
 
  //inTree->SetBranchAddress("REC_ForwardTagger_index",&myTree->REC_ForwardTagger_index);
  inTree->SetBranchAddress("REC_ForwardTagger_pindex",&myTree->REC_ForwardTagger_pindex);
  inTree->SetBranchAddress("REC_ForwardTagger_detector",&myTree->REC_ForwardTagger_detector);
  inTree->SetBranchAddress("REC_ForwardTagger_layer",&myTree->REC_ForwardTagger_layer);
  inTree->SetBranchAddress("REC_ForwardTagger_energy",&myTree->REC_ForwardTagger_energy);
  inTree->SetBranchAddress("REC_ForwardTagger_time",&myTree->REC_ForwardTagger_time);
  inTree->SetBranchAddress("REC_ForwardTagger_path",&myTree->REC_ForwardTagger_path);
  inTree->SetBranchAddress("REC_ForwardTagger_chi2",&myTree->REC_ForwardTagger_chi2);
  inTree->SetBranchAddress("REC_ForwardTagger_x",&myTree->REC_ForwardTagger_x);
  inTree->SetBranchAddress("REC_ForwardTagger_y",&myTree->REC_ForwardTagger_y);
  inTree->SetBranchAddress("REC_ForwardTagger_z",&myTree->REC_ForwardTagger_z);
  inTree->SetBranchAddress("REC_ForwardTagger_dx",&myTree->REC_ForwardTagger_dx);
  inTree->SetBranchAddress("REC_ForwardTagger_dy",&myTree->REC_ForwardTagger_dy);
  inTree->SetBranchAddress("REC_ForwardTagger_radius",&myTree->REC_ForwardTagger_radius);
  inTree->SetBranchAddress("REC_ForwardTagger_size",&myTree->REC_ForwardTagger_size);
  inTree->SetBranchAddress("REC_ForwardTagger_status",&myTree->REC_ForwardTagger_status);

 
  //inTree->SetBranchAddress("REC_Event_STTime",&myTree->REC_Event_STTime);
  //inTree->SetBranchAddress("REC_Event_RFTime",&myTree->REC_Event_RFTime);

  //inTree->SetBranchAddress("MC_Particle_pid",&myTree->MC_Particle_pid);
  //inTree->SetBranchAddress("MC_Particle_px",&myTree->MC_Particle_px);
  //inTree->SetBranchAddress("MC_Particle_py",&myTree->MC_Particle_py);
  //inTree->SetBranchAddress("MC_Particle_pz",&myTree->MC_Particle_pz);
  //inTree->SetBranchAddress("MC_Particle_vx",&myTree->MC_Particle_vx);
  //inTree->SetBranchAddress("MC_Particle_vy",&myTree->MC_Particle_vy);
  //inTree->SetBranchAddress("MC_Particle_vz",&myTree->MC_Particle_vz);

  //inTree->SetBranchAddress("RUN_rf_time",&myTree->RUN_rf_time);

 //inTree->SetBranchAddress("FT_particles_charge",&myTree->FT_particles_charge);
 //inTree->SetBranchAddress("FT_particles_energy",&myTree->FT_particles_energy);
 //inTree->SetBranchAddress("FT_particles_time",&myTree->FT_particles_time);
 //inTree->SetBranchAddress("FT_particles_cx",&myTree->FT_particles_cx);
 //inTree->SetBranchAddress("FT_particles_cy",&myTree->FT_particles_cy);
 //inTree->SetBranchAddress("FT_particles_cz",&myTree->FT_particles_cz);
}
