Exemple #1
0
bool ListReaderH5::ReadAux (const std::vector<std::pair<int, int> >& a_vIdx, T* a_) const
{
  // set up the indices to read the portion of the boundary conditions that
  // we are going to read
  for (size_t i=0; i<a_vIdx.size(); i++)
  {
    std::pair<int, int> myPair(0, 1);
    VEC_INT_PAIR indices(3, myPair);
    indices.at(0).first = a_vIdx.at(i).first;
    indices.at(0).second = 1;
    indices.at(1).second = m_nRows;
    indices.at(2).first = m_stress - 1;
    indices.at(2).second = 1;

    CStr str(m_path);

    str += "/";
    str += PROPERTY;
    H5DataSetReader r(m_file, str, indices);
    r.AllowTypeConversions(true);
    std::vector<Real> vDat;
    if (!r.GetData(vDat))
    {
      ASSERT(0);
      return false;
    }

    int index = m_nFields - m_nAuxFields + a_vIdx.at(i).second;
    for (size_t j=0; j<vDat.size(); j++)
    {
      a_[j*m_nFields+index] = (T)vDat.at(j);
    }
  }
  return true;
} // ListReaderH5::ReadAux
Exemple #2
0
bool ListReaderH5::GetIface (T *a_) const
{
  std::pair<int, int> myPair(0, m_nRows);
  VEC_INT_PAIR indices(1, myPair);

  CStr str(m_path);
  str += "/";
  str += IFACE;

  int auxIdx(GetAuxIdx("iface"));
  if (auxIdx < 0)
  {
    auxIdx = 0;
  }
  int index;
  index = m_nFields - m_nAuxFields + auxIdx - m_nCbcFields;

  H5DataSetReader r(m_file, str, indices);
  std::vector<int> iface(m_nRows, 0);
  r.GetData(&iface[0], iface.size());
  for (size_t i=0; i<iface.size(); i++)
  {
    a_[i*m_nFields+index] = (T)iface.at(i);
  }
  return true;
} // ListReaderH5::GetIface
Exemple #3
0
bool ListReaderH5::GetCellKIJ (T *a_) const
{
  std::pair<int, int> myPair(0, m_nRows);
  VEC_INT_PAIR indices(1, myPair);

  CStr str(m_path);
  str += "/";
  str += CELLIDS;

  H5DataSetReader r(m_file, str, indices);
  CellIdToIJK g(m_nGridRows, m_nGridCols);

  std::vector<int> cellIds(m_nRows, 0);
  if (!r.GetData(&cellIds[0], cellIds.size()))
    return false;

  for (size_t i=0; i<cellIds.size(); i++)
  {
    a_[i*m_nFields] = (T)g.KFromId(cellIds.at(i));
    a_[i*m_nFields+1] = (T)g.IFromId(cellIds.at(i));
    a_[i*m_nFields+2] = (T)g.JFromId(cellIds.at(i));
  }

  return true;
} // ListReaderH5::GetCellKIJ
Exemple #4
0
//------------------------------------------------------------------------------
/// \brief
//------------------------------------------------------------------------------
bool ListReaderH5::GetVersion ()
{
  // get the file version
  std::pair<int, int> myPair(0, 1);
  VEC_INT_PAIR indices(1, myPair);
  H5DataSetReader r(m_file, "MFH5 Version", indices);
  if (r.DataSetExists())
    return(r.GetData(&m_fileVersion, 1));
  else
    return false;
} // ListReaderH5::GetVersion
Exemple #5
0
//------------------------------------------------------------------------------
/// \brief Gets the factor (a multiplier) associated with this BC.
//------------------------------------------------------------------------------
bool ListReaderH5::GetFactorVer1 (std::vector<Real> &a_) const
{
  std::pair<int, int> myPair(0, m_nRows);
  VEC_INT_PAIR indices(1, myPair);

  CStr str(m_path);
  str += "/";
  str += FACTOR;

  H5DataSetReader r(m_file, str, indices);
  r.AllowTypeConversions(true);
  return (r.GetData(a_));
} // ListReaderH5::GetFactorVer1
Exemple #6
0
bool ListReaderH5::GetStressData (T *a_) const
{
  // set up the indices to read the portion of the boundary conditions that
  // we are going to read
  int nVals = m_nFields - m_nAuxFields - 3 - m_ial;
  std::pair<int, int> myPair(0, nVals);
  VEC_INT_PAIR indices(3, myPair);
  indices.at(1).second = m_nRows;
  indices.at(2).first = m_stress - 1;
  indices.at(2).second = 1;

  CStr str(m_path), parType;

  str += "/";
  str += PROPERTY;
  H5DataSetReader r(m_file, str, indices);
  r.AllowTypeConversions(true);
  std::vector<Real> d, fact;
  r.GetData(d);
  GetFactor(fact, 0);

  Parameters::ParTypeFromH5Path(m_path, parType);
  if (Parameters::CheckListSubstituteOk())
  {
    Parameters::SubstituteList(d, fact, parType);
  }
  else if (parType == "STR")
  {
    mfLibExp_StrCondFact(&fact[0], (int)fact.size());
  }
  try
  {
    for (int i=0; i<m_nRows; i++)
    {
      for (int j=0; j<nVals; j++)
      {
        a_[i*m_nFields+3+j] = (T)(d.at(j*m_nRows+i));
      }
      //ASSERT(_CrtCheckMemory());
    }
  }
  catch (std::out_of_range)
  {
    return false;
  }
  return true;
} // ListReaderH5::GetStressData
Exemple #7
0
//------------------------------------------------------------------------------
/// \brief Gets the factor (a multiplier) associated with this BC.
//------------------------------------------------------------------------------
bool ListReaderH5::GetFactor (std::vector<Real> &a_,
                              const int a_sheadFact) const
{
  if (m_fileVersion == 1.0)
    return(GetFactorVer1(a_));

  // factors are now stored with the bcs per stress period

  // set up the indices to read the portion of the boundary conditions that
  // we are going to read

  //m_nFields    - size of array from MODFLOW
  //m_nAuxFields - number of AUX variables
  //3            - k, i, j
  //m_ial        - variable from MODFLOW
  int nVals = m_nFields - m_nAuxFields - 3 - m_ial;
  std::pair<int, int> myPair(0, 1);
  VEC_INT_PAIR indices(3, myPair);
  indices.at(0).first = nVals;
  indices.at(0).second = GetNumFactors();
  indices.at(1).second = m_nRows;
  indices.at(2).first = m_stress - 1;
  indices.at(2).second = 1;

  if (1 == a_sheadFact)
  { // just reading SHEADFACT
    indices.at(0).second = 1;
  }
  else if (2 == a_sheadFact)
  { // just reading EHEADFACT
    indices.at(0).first++;
    indices.at(0).second = 1;
  }

  CStr str(m_path);

  str += "/";
  str += PROPERTY;
  H5DataSetReader r(m_file, str, indices);
  r.AllowTypeConversions(true);
  return (r.GetData(a_));
} // ListReaderH5::GetFactor
Exemple #8
0
//------------------------------------------------------------------------------
/// \brief Reads 3. Data: ITMP
/// \brief Reads 4. Data: WELLID Qdes {CapMult} {Cprime} {xyz}
//------------------------------------------------------------------------------
void ProcessorMNW2::impl::ReadStressPeriods (std::fstream& a_is,
                                             std::fstream& a_os)
{
  CStr str;
  std::string line;
  EReadAsciiFile e;
  e.UseExceptions();
  while (!a_is.bad())
  {
    std::getline(a_is, line);
    if (line.empty())
    {
      return;
    }

    int ITMP;
    a_os << line << "\n";
    e.SetLine(line.c_str());
    e.ReadData(ITMP);
    if (ITMP < 1)
      continue;

    std::getline(a_is, line);
    e.SetLine(line.c_str());
    e.ReadData(str);
    if ("GMS_HDF5_01" == str)
    {
      CStr fname, path;
      int sp;
      e.ReadData(fname);
      e.ReadData(path);
      path += "/07. Property";
      e.ReadData(sp);
      std::pair<int, int> myPair(0,1);
      VEC_INT_PAIR indices(3, myPair);
      indices[0].second = numMnw2Prop();
      indices[1].second = m_MNWMAX;
      indices[2].first = sp - 1;
      H5DataSetReader r(fname, path, indices);
      CAR_DBL2D vals;
      vals.SetSize(MNW2::NPROP, m_MNWMAX, 0);
      if (!r.GetData(&vals[0][0], MNW2::NPROP*m_MNWMAX))
      {
        ErrorStack::Get().PutError("Unable to read MNW2 hdf5 data.");
        throw ioError("");
      }

      for (int i = 0; i<m_MNWMAX; i++)
      {
        if (vals.at(MNW2::ACTIVE, i) != 0)
        { // this well is active
          // 4a. Data: WELLID Qdes {CapMult} {Cprime} {xyz}
          CStr ln;
          ln.Format("'%s' %s", m_wells.at(i).m_WELLID,
                               STR(vals.at(MNW2::QDES, i)));
          if (m_wells.at(i).m_PUMPCAP > 0)
          {
            ln += " ";
            ln += STR(vals.at(MNW2::CAPMULT, i));
          }
          // don't write Cprime

          // get AUX
          for (int j = 0; j<m_nAUX; j++)
          {
            ln += " ";
            ln += STR(vals.at(MNW2::AUX_0+j, i));
          }
          a_os << ln << "\n";

          if (m_wells.at(i).m_Qlimit < 0)
          {
            double QCUT = vals.at(MNW2::QCUT, i);
            ln.Format("%s %s", STR(vals.at(MNW2::HLIM, i)), STR(QCUT));
            if (QCUT != 0)
            {
              CStr ln2;
              ln2.Format(" %s %s", STR(vals.at(MNW2::QFRCMN, i)),
                                   STR(vals.at(MNW2::QFRCMX, i)));
              ln += ln2;
            }
            a_os << ln << "\n";
          }
        }
      }
    }
  }
} // ProcessorMNW2::impl::ReadStressPeriods
Exemple #9
0
void ana(){

//**************************************Preset**************************************************  

  vector<string> vec_tree;
  vector< pair<string,string> > vec_branch_tree;

  TObjArray* list_hist = new TObjArray(0);

//Ignore me! I am just a separator!

  string file_tuple_name = "root.d02kpi.660b.ValidDkpiAlg.root";
  string file_hist_name = "hist_root.d02kpi.660b.ValidDkpiAlg.root";

  vec_tree.push_back( "vxyz" );
  pair<string,string> pair_vxyz_vx0( "vxyz", "vx0" );
  vec_branch_tree.push_back( pair_vxyz_vx0 );
  pair<string,string> pair_vxyz_vy0( "vxyz", "vy0" );
  vec_branch_tree.push_back( pair_vxyz_vy0 );
  pair<string,string> pair_vxyz_vz0( "vxyz", "vz0" );
  vec_branch_tree.push_back( pair_vxyz_vz0 );
  pair<string,string> pair_vxyz_vr0( "vxyz", "vr0" );
  vec_branch_tree.push_back( pair_vxyz_vr0 );
  pair<string,string> pair_vxyz_theta( "vxyz", "theta" );
  vec_branch_tree.push_back( pair_vxyz_theta );
  vec_tree.push_back( "D0tokpi" );
  pair<string,string> pair_D0tokpi_pkmx( "D0tokpi", "pkmx" );
  vec_branch_tree.push_back( pair_D0tokpi_pkmx );
  pair<string,string> pair_D0tokpi_pkmy( "D0tokpi", "pkmy" );
  vec_branch_tree.push_back( pair_D0tokpi_pkmy );
  pair<string,string> pair_D0tokpi_pkmz( "D0tokpi", "pkmz" );
  vec_branch_tree.push_back( pair_D0tokpi_pkmz );
  pair<string,string> pair_D0tokpi_pkme( "D0tokpi", "pkme" );
  vec_branch_tree.push_back( pair_D0tokpi_pkme );
  pair<string,string> pair_D0tokpi_ppipx( "D0tokpi", "ppipx" );
  vec_branch_tree.push_back( pair_D0tokpi_ppipx );
  pair<string,string> pair_D0tokpi_ppipy( "D0tokpi", "ppipy" );
  vec_branch_tree.push_back( pair_D0tokpi_ppipy );
  pair<string,string> pair_D0tokpi_ppipz( "D0tokpi", "ppipz" );
  vec_branch_tree.push_back( pair_D0tokpi_ppipz );
  pair<string,string> pair_D0tokpi_ppipe( "D0tokpi", "ppipe" );
  vec_branch_tree.push_back( pair_D0tokpi_ppipe );
  pair<string,string> pair_D0tokpi_Mbc( "D0tokpi", "Mbc" );
  vec_branch_tree.push_back( pair_D0tokpi_Mbc );
  pair<string,string> pair_D0tokpi_deltE( "D0tokpi", "deltE" );
  vec_branch_tree.push_back( pair_D0tokpi_deltE );
  pair<string,string> pair_D0tokpi_massD0( "D0tokpi", "massD0" );
  vec_branch_tree.push_back( pair_D0tokpi_massD0 );
  vec_tree.push_back( "D0tokpi_af1C" );
  pair<string,string> pair_D0tokpi_af1C_pkmx( "D0tokpi_af1C", "pkmx" );
  vec_branch_tree.push_back( pair_D0tokpi_af1C_pkmx );
  pair<string,string> pair_D0tokpi_af1C_pkmy( "D0tokpi_af1C", "pkmy" );
  vec_branch_tree.push_back( pair_D0tokpi_af1C_pkmy );
  pair<string,string> pair_D0tokpi_af1C_pkmz( "D0tokpi_af1C", "pkmz" );
  vec_branch_tree.push_back( pair_D0tokpi_af1C_pkmz );
  pair<string,string> pair_D0tokpi_af1C_pkme( "D0tokpi_af1C", "pkme" );
  vec_branch_tree.push_back( pair_D0tokpi_af1C_pkme );
  pair<string,string> pair_D0tokpi_af1C_ppipx( "D0tokpi_af1C", "ppipx" );
  vec_branch_tree.push_back( pair_D0tokpi_af1C_ppipx );
  pair<string,string> pair_D0tokpi_af1C_ppipy( "D0tokpi_af1C", "ppipy" );
  vec_branch_tree.push_back( pair_D0tokpi_af1C_ppipy );
  pair<string,string> pair_D0tokpi_af1C_ppipz( "D0tokpi_af1C", "ppipz" );
  vec_branch_tree.push_back( pair_D0tokpi_af1C_ppipz );
  pair<string,string> pair_D0tokpi_af1C_ppipe( "D0tokpi_af1C", "ppipe" );
  vec_branch_tree.push_back( pair_D0tokpi_af1C_ppipe );
  pair<string,string> pair_D0tokpi_af1C_Mbc( "D0tokpi_af1C", "Mbc" );
  vec_branch_tree.push_back( pair_D0tokpi_af1C_Mbc );
  pair<string,string> pair_D0tokpi_af1C_deltE( "D0tokpi_af1C", "deltE" );
  vec_branch_tree.push_back( pair_D0tokpi_af1C_deltE );
  pair<string,string> pair_D0tokpi_af1C_massD0( "D0tokpi_af1C", "massD0" );
  vec_branch_tree.push_back( pair_D0tokpi_af1C_massD0 );
  pair<string,string> pair_D0tokpi_af1C_chi2( "D0tokpi_af1C", "chi2" );
  vec_branch_tree.push_back( pair_D0tokpi_af1C_chi2 );

//Ignore me! I am just a separator!

  TFile* myFile = new TFile ( file_tuple_name.c_str() );
  if ( myFile -> IsZombie() ){
    std::cout<<"Cannot create myFile!!! "<<std::endl;
    std::cout<<"Something is wrong with file :"<<std::endl;
    exit(EXIT_FAILURE);
  }

//**************************************Precheck************************************************

  TCollection* myCol = (TCollection*) myFile -> GetListOfKeys();
  //First of all, make sure every TTree in the card can be found in myFile.
  bool isEveryOneOK = true;
  for ( int i = 0; i < vec_branch_tree.size(); i++ ){
    pair<string,string> myPair = vec_branch_tree[i];
    string name_tree = myPair.first;
    string name_branch = myPair.second;
    TObject* obj_from_key_find = myCol -> FindObject( name_tree.c_str() );
    if ( obj_from_key_find == 0 ){
      std::cout<<"TTree   "<<setiosflags(ios::left)<<setw(20)<<name_tree<<" can not be found in myFile !!!"<<std::endl;
      isEveryOneOK = false;
    }
    else{
      TKey* key_find = dynamic_cast<TKey*> ( obj_from_key_find );
      if ( key_find == NULL ){
        std::cout<<"Cannot convert obj_from_key_find to key_find "<<std::endl;
        exit(EXIT_FAILURE);
      }
      TObject* obj_find = key_find -> ReadObj();
      if ( obj_find -> InheritsFrom("TTree") ){
        TTree* tree_find = dynamic_cast<TTree*> ( obj_find );
        if ( tree_find == NULL ){
          std::cout<<"Cannot convert "<<name_tree<<" to TTree "<<std::endl;
          exit(EXIT_FAILURE);
        }
        TCollection* col_tree_find = dynamic_cast<TCollection*> ( tree_find -> GetListOfBranches() );
        if ( col_tree_find == NULL ){
          std::cout<<"Cannot convert col of "<<name_tree<<" to TCollection "<<std::endl;
          exit(EXIT_FAILURE);
        }
        TObject* it_branch_find = col_tree_find -> FindObject( name_branch.c_str() );
        if ( it_branch_find == 0 ){
          std::cout<<"TBranch   "<<setiosflags(ios::left)<<setw(20)<<name_branch<<" can not be found in "<<name_tree<<" !!!"<<std::endl;
          isEveryOneOK = false;
        }
        else{
          if ( ! it_branch_find -> InheritsFrom("TBranch") ){
            std::cout<<setiosflags(ios::left)<<setw(20)<<name_branch<<" in   "<<setiosflags(ios::left)<<setw(20)<<name_tree<<" is not a TBranch!!!"<<std::endl;
            isEveryOneOK = false;
          }
        }

      }
      else{
        std::cout<<setiosflags(ios::left)<<setw(20)<<name_tree<<" in myFile is not a TTree!!!"<<std::endl;
        obj_find -> Print();
        isEveryOneOK = false;
      }
    }
  }
  if ( !isEveryOneOK ){
    exit(EXIT_FAILURE);
  }

  //Secondly, Check objs within myFile. Output info.
  //Plus, if there is TFolder inside, keep them in new hist_file
  TIter iter_tree( myCol );
  TKey* key_tree;
  while ( key_tree = (TKey*) iter_tree() ){
    TObject* obj_tree = key_tree -> ReadObj();
    string name_obj_tree = obj_tree -> GetName();
    if ( obj_tree -> InheritsFrom("TTree") ){
      vector<string>::iterator result = std::find( vec_tree.begin(), vec_tree.end(), name_obj_tree );
      if ( result == vec_tree.end() ){
        std::cout<<"TTree   "<<setiosflags(ios::left)<<setw(20)<<name_obj_tree<<" in myFile is not included in the card:"<<std::endl;
      }
      else{
        TTree* myTree = dynamic_cast<TTree*> ( obj_tree );
        if ( myTree == NULL ){
          std::cout<<"Cannot convert obj_tree to TTree "<<std::endl;
          exit(EXIT_FAILURE);
        }
        TCollection* col_tree = dynamic_cast<TCollection*> ( myTree -> GetListOfBranches() );
        if ( col_tree == NULL ){
          std::cout<<"Cannot convert list of obj_tree to TCollection "<<std::endl;
          exit(EXIT_FAILURE);
        }
        TIter iter_branch( col_tree );
        TObject* obj_branch;
        while ( obj_branch = iter_branch() ){
          string name_obj_branch = obj_branch -> GetName();
          if ( obj_branch -> InheritsFrom("TBranch") ){
            pair<string,string> myPair( name_obj_tree, name_obj_branch );
            vector< pair<string,string> >::iterator result = std::find( vec_branch_tree.begin(), vec_branch_tree.end(), myPair );
            if ( result == vec_branch_tree.end() ){
              std::cout<<"TBranch   "<<setiosflags(ios::left)<<setw(20)<<name_obj_branch<<" in "<<setiosflags(ios::left)<<setw(20)<<name_obj_tree<<" is not included in the card:"<<std::endl;
            }
          }
          else{
            std::cout<<setiosflags(ios::left)<<setw(20)<<name_obj_branch<<" in "<<setiosflags(ios::left)<<setw(20)<<name_obj_tree<<"is not a TBranch!!!"<<std::endl;
          }
        }
      }
    }
    else if ( obj_tree -> InheritsFrom("TFolder") ){
      std::cout<<setiosflags(ios::left)<<setw(20)<<name_obj_tree<<" in myFile is a TFolder!!!"<<std::endl;
      TFolder* myFolder = dynamic_cast<TFolder*> ( obj_tree );
      list_hist -> Add( myFolder );
    }
    else{
      std::cout<<setiosflags(ios::left)<<setw(20)<<name_obj_tree<<" in myFile does not inherit from a TTree!!!"<<std::endl;
    }
  }
  myFile -> Close();

//*********************************Set hist and branch************************************************

//Ignore me! I am just a separator!

  TChain* chain_vxyz = new TChain( "vxyz" );
  TChain* chain_D0tokpi = new TChain( "D0tokpi" );
  TChain* chain_D0tokpi_af1C = new TChain( "D0tokpi_af1C" );

  chain_vxyz -> Add( file_tuple_name.c_str() );
  chain_D0tokpi -> Add( file_tuple_name.c_str() );
  chain_D0tokpi_af1C -> Add( file_tuple_name.c_str() );

  TFolder* folder_vxyz = new TFolder( "vxyz", "vxyz" );
  TFolder* folder_D0tokpi = new TFolder( "D0tokpi", "D0tokpi" );
  TFolder* folder_D0tokpi_af1C = new TFolder( "D0tokpi_af1C", "D0tokpi_af1C" );

  list_hist -> Add( folder_vxyz );
  list_hist -> Add( folder_D0tokpi );
  list_hist -> Add( folder_D0tokpi_af1C );

  Double_t vxyz_vx0;
  Double_t vxyz_vy0;
  Double_t vxyz_vz0;
  Double_t vxyz_vr0;
  Double_t vxyz_theta;

  chain_vxyz -> SetBranchAddress( "vx0", &vxyz_vx0 );
  chain_vxyz -> SetBranchAddress( "vy0", &vxyz_vy0 );
  chain_vxyz -> SetBranchAddress( "vz0", &vxyz_vz0 );
  chain_vxyz -> SetBranchAddress( "vr0", &vxyz_vr0 );
  chain_vxyz -> SetBranchAddress( "theta", &vxyz_theta );

  TH1D* hist_vxyz_vx0 = new TH1D( "vxyz_vx0", "vxyz_vx0", 5000, -188.197, 79.31 );
  TH1D* hist_vxyz_vy0 = new TH1D( "vxyz_vy0", "vxyz_vy0", 5000, -101.723, 169.299 );
  TH1D* hist_vxyz_vz0 = new TH1D( "vxyz_vz0", "vxyz_vz0", 5000, -5528.16, 1703.5 );
  TH1D* hist_vxyz_vr0 = new TH1D( "vxyz_vr0", "vxyz_vr0", 5000, 1.54311e-06, 253.141 );
  TH1D* hist_vxyz_theta = new TH1D( "vxyz_theta", "vxyz_theta", 5000, 0.00477202, 3.1413 );
  TH2D* hist_vxyz_vx0_vy0 = new TH2D( "vxyz_vx0_vy0", "vxyz_vx0_vy0", 100, -188.197, 79.31, 100, -101.723, 169.299 );

  folder_vxyz -> Add( hist_vxyz_vx0 );
  folder_vxyz -> Add( hist_vxyz_vy0 );
  folder_vxyz -> Add( hist_vxyz_vz0 );
  folder_vxyz -> Add( hist_vxyz_vr0 );
  folder_vxyz -> Add( hist_vxyz_theta );
  folder_vxyz -> Add( hist_vxyz_vx0_vy0 );

  Long64_t nEvent_vxyz = chain_vxyz -> GetEntries();
  for ( Long64_t iEvent = 0; iEvent < nEvent_vxyz; iEvent++ ){

    chain_vxyz -> GetEntry( iEvent );

    hist_vxyz_vx0 -> Fill( vxyz_vx0 );
    hist_vxyz_vy0 -> Fill( vxyz_vy0 );
    hist_vxyz_vz0 -> Fill( vxyz_vz0 );
    hist_vxyz_vr0 -> Fill( vxyz_vr0 );
    hist_vxyz_theta -> Fill( vxyz_theta );
    hist_vxyz_vx0_vy0 -> Fill( vxyz_vx0, vxyz_vy0 );

  }

  Double_t D0tokpi_pkmx;
  Double_t D0tokpi_pkmy;
  Double_t D0tokpi_pkmz;
  Double_t D0tokpi_pkme;
  Double_t D0tokpi_ppipx;
  Double_t D0tokpi_ppipy;
  Double_t D0tokpi_ppipz;
  Double_t D0tokpi_ppipe;
  Double_t D0tokpi_Mbc;
  Double_t D0tokpi_deltE;
  Double_t D0tokpi_massD0;

  chain_D0tokpi -> SetBranchAddress( "pkmx", &D0tokpi_pkmx );
  chain_D0tokpi -> SetBranchAddress( "pkmy", &D0tokpi_pkmy );
  chain_D0tokpi -> SetBranchAddress( "pkmz", &D0tokpi_pkmz );
  chain_D0tokpi -> SetBranchAddress( "pkme", &D0tokpi_pkme );
  chain_D0tokpi -> SetBranchAddress( "ppipx", &D0tokpi_ppipx );
  chain_D0tokpi -> SetBranchAddress( "ppipy", &D0tokpi_ppipy );
  chain_D0tokpi -> SetBranchAddress( "ppipz", &D0tokpi_ppipz );
  chain_D0tokpi -> SetBranchAddress( "ppipe", &D0tokpi_ppipe );
  chain_D0tokpi -> SetBranchAddress( "Mbc", &D0tokpi_Mbc );
  chain_D0tokpi -> SetBranchAddress( "deltE", &D0tokpi_deltE );
  chain_D0tokpi -> SetBranchAddress( "massD0", &D0tokpi_massD0 );

  TH1D* hist_D0tokpi_pkmx = new TH1D( "D0tokpi_pkmx", "D0tokpi_pkmx", 5000, -2.94642, 13.0648 );
  TH1D* hist_D0tokpi_pkmy = new TH1D( "D0tokpi_pkmy", "D0tokpi_pkmy", 5000, -50.7721, 9.92379 );
  TH1D* hist_D0tokpi_pkmz = new TH1D( "D0tokpi_pkmz", "D0tokpi_pkmz", 5000, -7.47541, 7.2599 );
  TH1D* hist_D0tokpi_pkme = new TH1D( "D0tokpi_pkme", "D0tokpi_pkme", 5000, 0.502843, 52.6912 );
  TH1D* hist_D0tokpi_ppipx = new TH1D( "D0tokpi_ppipx", "D0tokpi_ppipx", 5000, -1.1023, 1.15463 );
  TH1D* hist_D0tokpi_ppipy = new TH1D( "D0tokpi_ppipy", "D0tokpi_ppipy", 5000, -2.31096, 1.28847 );
  TH1D* hist_D0tokpi_ppipz = new TH1D( "D0tokpi_ppipz", "D0tokpi_ppipz", 5000, -1.48987, 2.37987 );
  TH1D* hist_D0tokpi_ppipe = new TH1D( "D0tokpi_ppipe", "D0tokpi_ppipe", 5000, 0.151015, 2.66215 );
  TH1D* hist_D0tokpi_Mbc = new TH1D( "D0tokpi_Mbc", "D0tokpi_Mbc", 5000, 0.343962, 1.8856 );
  TH1D* hist_D0tokpi_deltE = new TH1D( "D0tokpi_deltE", "D0tokpi_deltE", 5000, -51.0678, 1.17004 );
  TH1D* hist_D0tokpi_massD0 = new TH1D( "D0tokpi_massD0", "D0tokpi_massD0", 5000, 0.634185, 5.00042 );
  TH2D* hist_D0tokpi_pkmx_pkmy = new TH2D( "D0tokpi_pkmx_pkmy", "D0tokpi_pkmx_pkmy", 100, -2.94642, 13.0648, 100, -50.7721, 9.92379 );
  TH2D* hist_D0tokpi_ppipx_ppipy = new TH2D( "D0tokpi_ppipx_ppipy", "D0tokpi_ppipx_ppipy", 100, -1.1023, 1.15463, 100, -2.31096, 1.28847 );
  TH2D* hist_D0tokpi_pkme_deltE = new TH2D( "D0tokpi_pkme_deltE", "D0tokpi_pkme_deltE", 100, 0.502843, 52.6912, 100, -51.0678, 1.17004 );
  TH2D* hist_D0tokpi_ppipe_deltE = new TH2D( "D0tokpi_ppipe_deltE", "D0tokpi_ppipe_deltE", 100, 0.151015, 2.66215, 100, -51.0678, 1.17004 );

  folder_D0tokpi -> Add( hist_D0tokpi_pkmx );
  folder_D0tokpi -> Add( hist_D0tokpi_pkmy );
  folder_D0tokpi -> Add( hist_D0tokpi_pkmz );
  folder_D0tokpi -> Add( hist_D0tokpi_pkme );
  folder_D0tokpi -> Add( hist_D0tokpi_ppipx );
  folder_D0tokpi -> Add( hist_D0tokpi_ppipy );
  folder_D0tokpi -> Add( hist_D0tokpi_ppipz );
  folder_D0tokpi -> Add( hist_D0tokpi_ppipe );
  folder_D0tokpi -> Add( hist_D0tokpi_Mbc );
  folder_D0tokpi -> Add( hist_D0tokpi_deltE );
  folder_D0tokpi -> Add( hist_D0tokpi_massD0 );
  folder_D0tokpi -> Add( hist_D0tokpi_pkmx_pkmy );
  folder_D0tokpi -> Add( hist_D0tokpi_ppipx_ppipy );
  folder_D0tokpi -> Add( hist_D0tokpi_pkme_deltE );
  folder_D0tokpi -> Add( hist_D0tokpi_ppipe_deltE );

  Long64_t nEvent_D0tokpi = chain_D0tokpi -> GetEntries();
  for ( Long64_t iEvent = 0; iEvent < nEvent_D0tokpi; iEvent++ ){

    chain_D0tokpi -> GetEntry( iEvent );

    hist_D0tokpi_pkmx -> Fill( D0tokpi_pkmx );
    hist_D0tokpi_pkmy -> Fill( D0tokpi_pkmy );
    hist_D0tokpi_pkmz -> Fill( D0tokpi_pkmz );
    hist_D0tokpi_pkme -> Fill( D0tokpi_pkme );
    hist_D0tokpi_ppipx -> Fill( D0tokpi_ppipx );
    hist_D0tokpi_ppipy -> Fill( D0tokpi_ppipy );
    hist_D0tokpi_ppipz -> Fill( D0tokpi_ppipz );
    hist_D0tokpi_ppipe -> Fill( D0tokpi_ppipe );
    hist_D0tokpi_Mbc -> Fill( D0tokpi_Mbc );
    hist_D0tokpi_deltE -> Fill( D0tokpi_deltE );
    hist_D0tokpi_massD0 -> Fill( D0tokpi_massD0 );
    hist_D0tokpi_pkmx_pkmy -> Fill( D0tokpi_pkmx, D0tokpi_pkmy );
    hist_D0tokpi_ppipx_ppipy -> Fill( D0tokpi_ppipx, D0tokpi_ppipy );
    hist_D0tokpi_pkme_deltE -> Fill( D0tokpi_pkme, D0tokpi_deltE );
    hist_D0tokpi_ppipe_deltE -> Fill( D0tokpi_ppipe, D0tokpi_deltE );

  }

  Double_t D0tokpi_af1C_pkmx;
  Double_t D0tokpi_af1C_pkmy;
  Double_t D0tokpi_af1C_pkmz;
  Double_t D0tokpi_af1C_pkme;
  Double_t D0tokpi_af1C_ppipx;
  Double_t D0tokpi_af1C_ppipy;
  Double_t D0tokpi_af1C_ppipz;
  Double_t D0tokpi_af1C_ppipe;
  Double_t D0tokpi_af1C_Mbc;
  Double_t D0tokpi_af1C_deltE;
  Double_t D0tokpi_af1C_massD0;
  Double_t D0tokpi_af1C_chi2;

  chain_D0tokpi_af1C -> SetBranchAddress( "pkmx", &D0tokpi_af1C_pkmx );
  chain_D0tokpi_af1C -> SetBranchAddress( "pkmy", &D0tokpi_af1C_pkmy );
  chain_D0tokpi_af1C -> SetBranchAddress( "pkmz", &D0tokpi_af1C_pkmz );
  chain_D0tokpi_af1C -> SetBranchAddress( "pkme", &D0tokpi_af1C_pkme );
  chain_D0tokpi_af1C -> SetBranchAddress( "ppipx", &D0tokpi_af1C_ppipx );
  chain_D0tokpi_af1C -> SetBranchAddress( "ppipy", &D0tokpi_af1C_ppipy );
  chain_D0tokpi_af1C -> SetBranchAddress( "ppipz", &D0tokpi_af1C_ppipz );
  chain_D0tokpi_af1C -> SetBranchAddress( "ppipe", &D0tokpi_af1C_ppipe );
  chain_D0tokpi_af1C -> SetBranchAddress( "Mbc", &D0tokpi_af1C_Mbc );
  chain_D0tokpi_af1C -> SetBranchAddress( "deltE", &D0tokpi_af1C_deltE );
  chain_D0tokpi_af1C -> SetBranchAddress( "massD0", &D0tokpi_af1C_massD0 );
  chain_D0tokpi_af1C -> SetBranchAddress( "chi2", &D0tokpi_af1C_chi2 );

  TH1D* hist_D0tokpi_af1C_pkmx = new TH1D( "D0tokpi_af1C_pkmx", "D0tokpi_af1C_pkmx", 5000, -4.29693, 4.58405 );
  TH1D* hist_D0tokpi_af1C_pkmy = new TH1D( "D0tokpi_af1C_pkmy", "D0tokpi_af1C_pkmy", 5000, -8.45895, 3.70228 );
  TH1D* hist_D0tokpi_af1C_pkmz = new TH1D( "D0tokpi_af1C_pkmz", "D0tokpi_af1C_pkmz", 5000, -3.91267, 2.07956 );
  TH1D* hist_D0tokpi_af1C_pkme = new TH1D( "D0tokpi_af1C_pkme", "D0tokpi_af1C_pkme", 5000, 0.709383, 8.79569 );
  TH1D* hist_D0tokpi_af1C_ppipx = new TH1D( "D0tokpi_af1C_ppipx", "D0tokpi_af1C_ppipx", 5000, -1.08022, 1.01792 );
  TH1D* hist_D0tokpi_af1C_ppipy = new TH1D( "D0tokpi_af1C_ppipy", "D0tokpi_af1C_ppipy", 5000, -1.09525, 1.05434 );
  TH1D* hist_D0tokpi_af1C_ppipz = new TH1D( "D0tokpi_af1C_ppipz", "D0tokpi_af1C_ppipz", 5000, -1.83448, 1.29498 );
  TH1D* hist_D0tokpi_af1C_ppipe = new TH1D( "D0tokpi_af1C_ppipe", "D0tokpi_af1C_ppipe", 5000, 0.191384, 1.93619 );
  TH1D* hist_D0tokpi_af1C_Mbc = new TH1D( "D0tokpi_af1C_Mbc", "D0tokpi_af1C_Mbc", 5000, 0.241368, 1.8858 );
  TH1D* hist_D0tokpi_af1C_deltE = new TH1D( "D0tokpi_af1C_deltE", "D0tokpi_af1C_deltE", 5000, -7.17389, 0.0209507 );
  TH1D* hist_D0tokpi_af1C_massD0 = new TH1D( "D0tokpi_af1C_massD0", "D0tokpi_af1C_massD0", 5000, 1.86484, 1.86485 );
  TH1D* hist_D0tokpi_af1C_chi2 = new TH1D( "D0tokpi_af1C_chi2", "D0tokpi_af1C_chi2", 5000, 9.11257e-10, 199.496 );
  TH2D* hist_D0tokpi_af1C_pkmx_pkmy = new TH2D( "D0tokpi_af1C_pkmx_pkmy", "D0tokpi_af1C_pkmx_pkmy", 100, -4.29693, 4.58405, 100, -8.45895, 3.70228 );
  TH2D* hist_D0tokpi_af1C_ppipx_ppipy = new TH2D( "D0tokpi_af1C_ppipx_ppipy", "D0tokpi_af1C_ppipx_ppipy", 100, -1.08022, 1.01792, 100, -1.09525, 1.05434 );
  TH2D* hist_D0tokpi_af1C_pkme_deltE = new TH2D( "D0tokpi_af1C_pkme_deltE", "D0tokpi_af1C_pkme_deltE", 100, 0.709383, 8.79569, 100, -7.17389, 0.0209507 );
  TH2D* hist_D0tokpi_af1C_ppipe_deltE = new TH2D( "D0tokpi_af1C_ppipe_deltE", "D0tokpi_af1C_ppipe_deltE", 100, 0.191384, 1.93619, 100, -7.17389, 0.0209507 );

  folder_D0tokpi_af1C -> Add( hist_D0tokpi_af1C_pkmx );
  folder_D0tokpi_af1C -> Add( hist_D0tokpi_af1C_pkmy );
  folder_D0tokpi_af1C -> Add( hist_D0tokpi_af1C_pkmz );
  folder_D0tokpi_af1C -> Add( hist_D0tokpi_af1C_pkme );
  folder_D0tokpi_af1C -> Add( hist_D0tokpi_af1C_ppipx );
  folder_D0tokpi_af1C -> Add( hist_D0tokpi_af1C_ppipy );
  folder_D0tokpi_af1C -> Add( hist_D0tokpi_af1C_ppipz );
  folder_D0tokpi_af1C -> Add( hist_D0tokpi_af1C_ppipe );
  folder_D0tokpi_af1C -> Add( hist_D0tokpi_af1C_Mbc );
  folder_D0tokpi_af1C -> Add( hist_D0tokpi_af1C_deltE );
  folder_D0tokpi_af1C -> Add( hist_D0tokpi_af1C_massD0 );
  folder_D0tokpi_af1C -> Add( hist_D0tokpi_af1C_chi2 );
  folder_D0tokpi_af1C -> Add( hist_D0tokpi_af1C_pkmx_pkmy );
  folder_D0tokpi_af1C -> Add( hist_D0tokpi_af1C_ppipx_ppipy );
  folder_D0tokpi_af1C -> Add( hist_D0tokpi_af1C_pkme_deltE );
  folder_D0tokpi_af1C -> Add( hist_D0tokpi_af1C_ppipe_deltE );

  Long64_t nEvent_D0tokpi_af1C = chain_D0tokpi_af1C -> GetEntries();
  for ( Long64_t iEvent = 0; iEvent < nEvent_D0tokpi_af1C; iEvent++ ){

    chain_D0tokpi_af1C -> GetEntry( iEvent );

    hist_D0tokpi_af1C_pkmx -> Fill( D0tokpi_af1C_pkmx );
    hist_D0tokpi_af1C_pkmy -> Fill( D0tokpi_af1C_pkmy );
    hist_D0tokpi_af1C_pkmz -> Fill( D0tokpi_af1C_pkmz );
    hist_D0tokpi_af1C_pkme -> Fill( D0tokpi_af1C_pkme );
    hist_D0tokpi_af1C_ppipx -> Fill( D0tokpi_af1C_ppipx );
    hist_D0tokpi_af1C_ppipy -> Fill( D0tokpi_af1C_ppipy );
    hist_D0tokpi_af1C_ppipz -> Fill( D0tokpi_af1C_ppipz );
    hist_D0tokpi_af1C_ppipe -> Fill( D0tokpi_af1C_ppipe );
    hist_D0tokpi_af1C_Mbc -> Fill( D0tokpi_af1C_Mbc );
    hist_D0tokpi_af1C_deltE -> Fill( D0tokpi_af1C_deltE );
    hist_D0tokpi_af1C_massD0 -> Fill( D0tokpi_af1C_massD0 );
    hist_D0tokpi_af1C_chi2 -> Fill( D0tokpi_af1C_chi2 );
    hist_D0tokpi_af1C_pkmx_pkmy -> Fill( D0tokpi_af1C_pkmx, D0tokpi_af1C_pkmy );
    hist_D0tokpi_af1C_ppipx_ppipy -> Fill( D0tokpi_af1C_ppipx, D0tokpi_af1C_ppipy );
    hist_D0tokpi_af1C_pkme_deltE -> Fill( D0tokpi_af1C_pkme, D0tokpi_af1C_deltE );
    hist_D0tokpi_af1C_ppipe_deltE -> Fill( D0tokpi_af1C_ppipe, D0tokpi_af1C_deltE );

  }
//Ignore me! I am just a separator!

  std::cout<<__LINE__<<std::endl;
  TFile file_hist( file_hist_name.c_str(), "RECREATE" );
  std::cout<<__LINE__<<std::endl;
  list_hist -> Write();
  std::cout<<__LINE__<<std::endl;
  file_hist.Close();
  std::cout<<__LINE__<<std::endl;

}