docs: private void buildHeader(){
          ArrayList<Attribute> attributes = new ArrayList<>();
  
          // copies the original attributes
          InstancesHeader originalHeader = originalStream.getHeader();
          for(int i = 0; i < originalHeader.numAttributes(); i++){
              Attribute att = originalHeader.attribute(i);
              if(att != originalHeader.classAttribute()) {
                  attributes.add(att);
              }
          }
  
          // appends the new numeric features
          for(int i = 0; i < numNumericFeaturesOption.getValue(); i++){
              Attribute att = new Attribute(("irrelNum" + i));
              attributes.add(att);
          }
  
          // creates the values for categorical features
          ArrayList<String> catVals = new ArrayList<>();
          for(int i = 0; i < numValuesCategoricalFeatureOption.getValue(); i++) catVals.add("v" + i);
  
          // appends the new categorical features
          for(int i = 0; i < numCategoricalFeaturesOption.getValue(); i++){
              Attribute att = new Attribute(("irrelCat" + i), catVals);
              attributes.add(att);
          }
  
          // appends the class attribute
          if(originalHeader.classIndex() != -1){
              attributes.add(originalHeader.attribute(originalHeader.classIndex()));
          }
  
          // builds the new header
          Instances format = new Instances(getCLICreationString(InstanceStream.class), attributes, 0);
          format.setClassIndex(attributes.size() - 1);
          newHeader = new InstancesHeader(format);
      }