Exemple #1
0
MultiPackedWord::MultiPackedWord(const size_t numBits,
                                 const FieldType& fieldType,
                                 const ::std::string& name)
        : VariableArray(), numBits_(numBits), fieldType_(fieldType) {
    size_t packedSize = getMultipackedSize();
    VariableArray varArray(packedSize, name);
    VariableArray::swap(varArray);
}
Bool_t KernelDensity::readTuple(TTree* tree, std::vector<TString> &vars, UInt_t maxEvents) {

  if (vars.size() != m_phaseSpace->dimensionality() ) {
    printf("%20.20s ERROR: Number of TTree variables (%d) in tree \"%s\" does not correspond to phase space dimensionality (%d)\n", 
           m_name, (UInt_t)vars.size(), tree->GetName(), m_phaseSpace->dimensionality() ); 
    abort(); 
  }  
  
  UInt_t nvars = vars.size(); 

  tree->ResetBranchAddresses();
  
  Long64_t nentries = tree->GetEntries();
  
  if (maxEvents > 0 && maxEvents < nentries) nentries = maxEvents; 
  
  Long64_t i;

  std::vector<Float_t> varArray(nvars); 

  UInt_t n; 
  for (n=0; n < nvars; n++) {
    printf("%20.20s INFO: Will read branch \"%s\" from tree \"%s\"\n", m_name, vars[n].Data(), tree->GetName()); 
    Int_t status = tree->SetBranchAddress(vars[n], &( varArray[n] ));
    if (status < 0) {
      printf("%20.20s WARNING: Error setting branch, status=%d\n", m_name, status); 
      abort(); 
    }
  }

  std::vector<Double_t> point(nvars); 

  UInt_t cells = numCells(); 

  m_dataVector.resize(cells); 
  
  Int_t cell; 
  for (cell = 0; cell < (Int_t)cells; cell++) {
    m_dataVector[cell].reserve(nentries/cells); 
  }

  UInt_t nout = 0;
  for(i=0; i<nentries; i++) {
//    printf("DEBUG: before: %f\n", varArray[0]);
    tree->GetEntry(i);
//    printf("DEBUG: after: %f\n", varArray[0]);
    
    for (n=0; n<nvars; n++) {
      point[n] = varArray[n]; 
    }
    
    if (!m_phaseSpace->withinLimits( point )) {
      nout ++; 
      printf("%20.20s WARNING: Ntuple point (", m_name); 
      for (n=0; n<nvars; n++) {
        printf("%f ", point[n]);
      }
      printf(", %f%%) outside phase space\n", 100.*float(nout)/float(i));
    } else {
      cell = cellIndex( point ); 
      if (cell>=0) m_dataVector[cell].push_back(point); 
    }
    
    if (i % 10000 == 0) {
      printf("%20.20s INFO: Read %lld/%lld events (%f%%)\n", m_name, i, nentries, 100.*float(i)/float(nentries));
    }
  }
  
  printf("%20.20s INFO: %lld events read in from \"%s\"\n", m_name, nentries-nout, tree->GetName() ); 

  return 1;
}