public boolean pass(int[] bowl, int bowlId, int round,
                      boolean canPick,
                      boolean musTake) {
	  
   bowlSize=sumOfArray(bowl);
	  
   if (musTake || !canPick) {
     modifyDistribution(bowl);
     roundInit(1);
     return true;
   }
   
   double expectedScore=getExpectedScore();
   double bowlScore=getBowlScore(bowl);
   double deviation=getDeviation();
   
   
   
   double meanPlus;
   if(useLogisticFunctionDeviationFraction) //Chop off using logistic function 
   {
	   meanPlus=calculateDeviationThreshold()*scaledSigmoid(timesCanPass*1.0/timesCanPassInitial);
   }
   else //Linearly chop off
   {
	   meanPlus=deviation*timesCanPass/(timesCanPassInitial-1);
   }
   
   if(debug)
   {
	   print(String.format("timesCanPass %d timesCanPassInitial %d expected %f deviation %f deviationfraction %f", timesCanPass, timesCanPassInitial, expectedScore, deviation,calculateDeviationThreshold()));
	   print(String.format("Old expected=%f // bowlscore=%f ", (expectedScore+deviation*timesCanPass/(timesCanPassInitial-1)), bowlScore));
	   print(String.format("New expected=%f // bowlscore=%f ", (expectedScore+calculateDeviationThreshold()*scaledSigmoid(1.0*timesCanPass/timesCanPassInitial)), bowlScore));
	   print(String.format("stoppingthreshold=%d // passnumber=%d ", stoppingThreshold, passNumber));
   }
   
   boolean take = ((expectedScore+meanPlus) <= bowlScore || (takeReallyGoodBowl && bowlScore>=9*NFRUIT));
   modifyDistribution(bowl);
   
   
   if(useStopping && passNumber<=stoppingThreshold)
   {
	   take=false;
   }
   
   if(!take)
 	  timesCanPass--;
   else
 	  roundInit(1);
   
   passNumber++;
   return take;
  }