 			 	 	10000, 1e-2, 1e6));*/
 
 	
-/*        printf("Maximum: %lf\n", find_min_using_approximate_derivatives(cg_search_strategy(),
+/*        printf("Maximum: %lf\n", find_min_using_approximate_derivatives(newton_search_strategy(),
                                                gradient_norm_stop_strategy(1e-7).be_verbose(),
                                                eval, guess, -1e30));*/
 

		cudaMalloc((void**) &d_truePattern, sizeof(int) * SIDE * SIDE);
		data = (cufftComplex*) calloc(SIDE * SIDE, sizeof(cufftComplex));

		printf("Memset: %d\n", cudaMemset(d_data, 0, sizeof(cufftComplex) * SIDE * SIDE));
		cufftPlan2d(&plan, SIDE, SIDE, CUFFT_C2C);
	}

	double calc(const column_vector& shortData)
	{
		 column_vector::const_iterator i = shortData.begin();
		 column_vector::const_iterator iorig = i;
		 double sum = 0;

	int* d_mask;
	cufftHandle plan;

  thrust::device_ptr<int> t_mask;
  thrust::device_ptr<int> t_truePattern;
  thrust::device_ptr<cufftComplex> t_pattern;

	evaluator()
	{
		cudaMalloc((void**) &d_data, sizeof(cufftComplex) * SIDE * SIDE);
