private void SetMode(ModeFormat setMode) {
            Mode = setMode;
            switch (setMode) {
                case ModeFormat.Maize:   
                    numOfOffsetPairs = 2000;
                    uMin = 500;
                    uMax = 50 * 2000;
                    sampledNumberPerClass = 2000;
                    UpperBound = 10000;
                    kinect_mode_ = KinectModeFormat.Near;
                    traningFilename = "Maize";
                    RandomGenerationMode = RandomGenerationModeFormat.Default;
                    break;                
                case ModeFormat.Blue:
                    numOfOffsetPairs = 2000;
                    uMin = 500;
                    uMax = 40 * 2000;
                    sampledNumberPerClass = 1000;
                    UpperBound = 10000;
                    kinect_mode_ = KinectModeFormat.Near;
                    traningFilename = "Blue";
                    RandomGenerationMode = RandomGenerationModeFormat.Circular;
                    RF_model_file_path_ = directory + "\\FeatureVectureBlue149.rf.model";
                    //RF_model_file_path_ = directory + "\\FeatureVectureBlue149.rf.model.prune.model";                    
                    num_classes_ = 3;
                    break;
                /*
                case ModeFormat.Blue149:
                    numOfOffsetPairs = 2000;
                    uMin = 500;
                    uMax = 40 * 2000;
                    sampledNumberPerClass = 1000;
                    UpperBound = 10000;
                    KinectMode = KinectModeFormat.Near;
                    traningFilename = "Blue";
                    RandomGenerationMode = RandomGenerationModeFormat.Circular;
                    // 149 imgs
                    break;
                 */
                case ModeFormat.BlueDefault:
                    numOfOffsetPairs = 2000;
                    uMin = 500;
                    uMax = 40 * 2000;
                    sampledNumberPerClass = 1000;
                    UpperBound = 10000;
                    kinect_mode_ = KinectModeFormat.Default;
                    traningFilename = "BlueDefault";
                    RandomGenerationMode = RandomGenerationModeFormat.Circular;
                    RF_model_file_path_ = directory + "\\FeatureVectorBlueDefault.400.rf.model";
                    num_classes_ = 5;
                    break;
                case ModeFormat.Abstraction: // Operate in default Kinect mode, use a large box and a large number of offset
                    numOfOffsetPairs = 2000;
                    uMin = 2000;
                    uMax = 300 * 2000;
                    sampledNumberPerClass = 2000;
                    UpperBound = 10000;
                    kinect_mode_ = KinectModeFormat.Default;
                    traningFilename = "Abstraction";
                    RandomGenerationMode = RandomGenerationModeFormat.Default;
                    break;



                case ModeFormat.Demo1000:
                    numOfOffsetPairs = 1000;
                    uMin = 500;
                    uMax = 40 * 2000;
                    sampledNumberPerClass = 1000;
                    UpperBound = 10000;
                    kinect_mode_ = KinectModeFormat.Near;
                    traningFilename = "Demo1000";
                    RandomGenerationMode = RandomGenerationModeFormat.Circular;
                    //RFModelFilePath = directory + "\\FeatureVectorF1000.400.rf.model";
                    //RFModelFilePath = directory + "\\RF.1000.100.3.model";
                    //RF_model_file_path_ = directory + "\\RF.1000.10.2.model";
                    num_classes_ = 3;
                    break;

                case ModeFormat.Demo2000:
                    numOfOffsetPairs = 2000;
                    uMin = 500;
                    uMax = 40 * 2000;
                    sampledNumberPerClass = 1000;
                    UpperBound = 10000;
                    kinect_mode_ = KinectModeFormat.Near;
                    traningFilename = "Demo2000";
                    RandomGenerationMode = RandomGenerationModeFormat.Circular;
                    //RF_model_file_path_ = directory + "\\FeatureVectorF2000.400.rf.model";
                    //RF_model_file_path_ = directory + "\\RF.2000.350.3.model";
                    num_classes_ = 3;
                    break;


                case ModeFormat.F1000:
                    numOfOffsetPairs = 1000;
                    uMin = 500;
                    uMax = 40 * 2000;
                    sampledNumberPerClass = 1000;
                    UpperBound = 10000;
                    kinect_mode_ = KinectModeFormat.Default;
                    traningFilename = "F1000";
                    RandomGenerationMode = RandomGenerationModeFormat.Circular;
                    //RFModelFilePath = directory + "\\FeatureVectorF1000.400.rf.model";
                    //RFModelFilePath = directory + "\\RF.1000.100.3.model";
                    RF_model_file_path_ = directory + "\\RF.1000.10.2.model";
                    num_classes_ = 2;
                    break;
                case ModeFormat.F2000:
                    numOfOffsetPairs = 2000;
                    uMin = 500;
                    uMax = 40 * 2000;
                    sampledNumberPerClass = 1000;
                    UpperBound = 10000;
                    kinect_mode_ = KinectModeFormat.Default;
                    traningFilename = "F2000";
                    RandomGenerationMode = RandomGenerationModeFormat.Circular;
                    //RF_model_file_path_ = directory + "\\FeatureVectorF2000.400.rf.model";
                    RF_model_file_path_ = directory + "\\RF.2000.350.3.model"; 
                    num_classes_ = 5;
                    break;
                case ModeFormat.F3000:
                    numOfOffsetPairs = 3000;
                    uMin = 500;
                    uMax = 40 * 2000;
                    sampledNumberPerClass = 1000;
                    UpperBound = 10000;
                    kinect_mode_ = KinectModeFormat.Default;
                    traningFilename = "F3000";
                    RandomGenerationMode = RandomGenerationModeFormat.Circular;
                    //RFModelFilePath = directory + "\\FeatureVectorF3000.400.rf.model";
                    RF_model_file_path_ = directory + "\\RF.2000.350.3.model"; 
                    num_classes_ = 5; 
                    break;


                case ModeFormat.Range05:
                    numOfOffsetPairs = 2000;
                    uMin = 500;
                    uMax = 2000/2;
                    sampledNumberPerClass = 1000;
                    UpperBound = 10000;
                    kinect_mode_ = KinectModeFormat.Default;
                    traningFilename = "Range05";
                    RandomGenerationMode = RandomGenerationModeFormat.Circular;
                    //RF_model_file_path_ = directory + "\\FeatureVectorF2000.400.rf.model";
                    RF_model_file_path_ = directory + "\\RF.2000.350.3.model";
                    num_classes_ = 5;
                    break;
                case ModeFormat.Range1:
                    numOfOffsetPairs = 2000;
                    uMin = 500;
                    uMax = 1 * 2000;
                    sampledNumberPerClass = 1000;
                    UpperBound = 10000;
                    kinect_mode_ = KinectModeFormat.Default;
                    traningFilename = "Range1";
                    RandomGenerationMode = RandomGenerationModeFormat.Circular;
                    //RF_model_file_path_ = directory + "\\FeatureVectorF2000.400.rf.model";
                    RF_model_file_path_ = directory + "\\RF.2000.350.3.model";
                    num_classes_ = 5;
                    break;
                case ModeFormat.Range10:
                    numOfOffsetPairs = 2000;
                    uMin = 500;
                    uMax = 10 * 2000;
                    sampledNumberPerClass = 1000;
                    UpperBound = 10000;
                    kinect_mode_ = KinectModeFormat.Default;
                    traningFilename = "Range10";
                    RandomGenerationMode = RandomGenerationModeFormat.Circular;
                    //RF_model_file_path_ = directory + "\\FeatureVectorF2000.400.rf.model";
                    RF_model_file_path_ = directory + "\\RF.2000.350.3.model";
                    num_classes_ = 5;
                    break;
                case ModeFormat.Range20:
                    numOfOffsetPairs = 2000;
                    uMin = 500;
                    uMax = 20 * 2000;
                    sampledNumberPerClass = 1000;
                    UpperBound = 10000;
                    kinect_mode_ = KinectModeFormat.Default;
                    traningFilename = "Range20";
                    RandomGenerationMode = RandomGenerationModeFormat.Circular;
                    //RF_model_file_path_ = directory + "\\FeatureVectorF2000.400.rf.model";
                    RF_model_file_path_ = directory + "\\RF.2000.350.3.model";
                    num_classes_ = 5;
                    break;
                case ModeFormat.Range40:
                    numOfOffsetPairs = 2000;
                    uMin = 500;
                    uMax = 40 * 2000;
                    sampledNumberPerClass = 1000;
                    UpperBound = 10000;
                    kinect_mode_ = KinectModeFormat.Default;
                    traningFilename = "Range40";
                    RandomGenerationMode = RandomGenerationModeFormat.Circular;
                    //RF_model_file_path_ = directory + "\\FeatureVectorF2000.400.rf.model";
                    RF_model_file_path_ = directory + "\\RF.2000.350.3.model";
                    num_classes_ = 5;
                    break;
                case ModeFormat.Range60:
                    numOfOffsetPairs = 2000;
                    uMin = 500;
                    uMax = 60 * 2000;
                    sampledNumberPerClass = 1000;
                    UpperBound = 10000;
                    kinect_mode_ = KinectModeFormat.Default;
                    traningFilename = "Range60";
                    RandomGenerationMode = RandomGenerationModeFormat.Circular;
                    //RF_model_file_path_ = directory + "\\FeatureVectorF2000.400.rf.model";
                    RF_model_file_path_ = directory + "\\RF.2000.350.3.model";
                    num_classes_ = 5;
                    break;
                case ModeFormat.Range100:
                    numOfOffsetPairs = 2000;
                    uMin = 500;
                    uMax = 100 * 2000;
                    sampledNumberPerClass = 1000;
                    UpperBound = 10000;
                    kinect_mode_ = KinectModeFormat.Default;
                    traningFilename = "Range100";
                    RandomGenerationMode = RandomGenerationModeFormat.Circular;
                    //RF_model_file_path_ = directory + "\\FeatureVectorF2000.400.rf.model";
                    RF_model_file_path_ = directory + "\\RF.2000.350.3.model";
                    num_classes_ = 5;
                    break;
                case ModeFormat.Range200:
                    numOfOffsetPairs = 2000;
                    uMin = 500;
                    uMax = 200 * 2000;
                    sampledNumberPerClass = 1000;
                    UpperBound = 10000;
                    kinect_mode_ = KinectModeFormat.Default;
                    traningFilename = "Range200";
                    RandomGenerationMode = RandomGenerationModeFormat.Circular;
                    //RF_model_file_path_ = directory + "\\FeatureVectorF2000.400.rf.model";
                    RF_model_file_path_ = directory + "\\RF.2000.350.3.model";
                    num_classes_ = 5;
                    break;
            }
        }
 // Construct fiunction
 public FeatureExtraction(ModeFormat setMode= ModeFormat.Maize, string varDirectory = defaultDirectory, CPUorGPUFormat to_set_xPU_mode=CPUorGPUFormat.GPU)        
 {
     depth = new short[width * height];
     label = new byte[width * height];
     listOfTargetPosition = new List<int>();
     listOfBackgroundPosition = new List<int>();
     offset_pair_list_ = new List<int[]>();
     // used for random number generator                        
     _r= new Random(); 
     SetDirectory(varDirectory);
     SetMode(setMode);
     
      
     //LoadRFModel();
     RFfeatureVector = new double[numOfOffsetPairs];
     RFfeatureVectorShort = new short[numOfOffsetPairs];
     xPU_mode_ = to_set_xPU_mode;
     if (xPU_mode_ == CPUorGPUFormat.GPU) {
         //InitGPU();
     }
     
 }