float GetWeightFLminusFR(float x,float var,LorentzVector p4W, bool Wplus ){
  // variable x is cos(theta) here

  //  TH1F* h_polarization_Wplus[4][3];
  //  TH1F* h_polarization_Wminus[4][3];
  
  float pt_bins[5] = {50,100,300,500,10000};
  float eta_bins[4] = {0,1,2,5};

  //  TString bin_names_pt[4] = {"pt_50_100_","pt_100_300_","pt_300_500_","pt_500_up_"};
  //  TString bin_names_eta[3] = {"eta_0_1","eta_1_2","eta_2_5"};

  float fl_plus = 0;
  float fr_plus = 0;
  float f0_plus = 0;
  
  float fl_minus = 0;  
  float fr_minus = 0; 
  float f0_minus = 0;
  
  if ( H_polarization_Wplus[0]==0 || H_polarization_Wminus[0]==0 ) 
    LoadPolarizationHistograms();

  for(int i=0;i<4;i++){
    for(int ii=0;ii<3;ii++){
      if(p4W.Pt()>pt_bins[i]&&p4W.Pt()<pt_bins[i+1]&&fabs(p4W.Rapidity())>eta_bins[ii]&&fabs(p4W.Rapidity())<eta_bins[ii+1]){

	if(i==3&&ii==2){
	  //in highest rapidity and highest ptW bin do nothing because the statistics is lousy
	}
	else{
	  
	  if(Wplus){
	    fl_plus = H_polarization_Wplus[0]->GetBinContent(i,ii);
	    fr_plus = H_polarization_Wplus[1]->GetBinContent(i,ii);
	    //	    f0_plus = H_polarization_Wplus[2]->GetBinContent(i,ii);
	    f0_plus = 1-fl_plus-fr_plus;
	  }//end of Wplus
	  if(!Wplus){
	    fl_minus = H_polarization_Wminus[0]->GetBinContent(i,ii);
	    fr_minus = H_polarization_Wminus[1]->GetBinContent(i,ii);
	    //	    f0_minus = H_polarization_Wminus[2]->GetBinContent(i,ii);
	    f0_minus = 1-fl_minus-fr_minus;
	  }//end of Wminus
	}//end of requiring that last bin in helicity not be used 
      }//end of if statement for W pt and helicity
    }}//end of for loop




  float f0=0;
  float fl=0;
  float fr=0;
  float fl_variation = 0;
  float fr_variation = 0;
  float original_value = 0;
  float new_value = 0;
  if(Wplus){f0=f0_plus;fl=fl_plus;fr=fr_plus;    
    fl_variation = fl+(fl-fr)*var*0.01;
    fr_variation = fr-(fl-fr)*var*0.01;
    if(fl_variation>1||fr_variation<0){fl_variation=1-f0;fr_variation=0;}
    /*
    cout<<"W plus event"<<endl;
    cout<<"W pt: "<<p4W.Pt()<<endl;
    cout<<"W y:  "<<fabs(p4W.Rapidity())<<endl;
    cout<<"fl original: "<<fl<<", fl vary: "<<fl_variation<<endl;
    cout<<"fr original: "<<fr<<", fr vary: "<<fr_variation<<endl;
    cout<<"fo original: "<<f0<<endl;
    */
    original_value = f0*(1-x*x)+0.5*fl*(1-x)*(1-x)+0.5*fr*(1+x)*(1+x);
    new_value = f0*(1-x*x)+0.5*fl_variation*(1-x)*(1-x)+0.5*fr_variation*(1+x)*(1+x);
  }
  if(!Wplus){f0=f0_minus;fl=fl_minus;fr=fr_minus;
    fl_variation = fl+(fl-fr)*var*0.01;
    fr_variation = fr-(fl-fr)*var*0.01;    
    if(fl_variation>1||fr_variation<0){fl_variation=1-f0;fr_variation=0;}
    /*
    cout<<"W minus event"<<endl;
    cout<<"W pt: "<<p4W.Pt()<<endl;
    cout<<"W y:  "<<fabs(p4W.Rapidity())<<endl;
    cout<<"fl original: "<<fl<<", fl vary: "<<fl_variation<<endl;
    cout<<"fr original: "<<fr<<", fr vary: "<<fr_variation<<endl;
    cout<<"fo original: "<<f0<<endl;
    */
    original_value = f0*(1-x*x)+0.5*fr*(1-x)*(1-x)+0.5*fl*(1+x)*(1+x);
    new_value = f0*(1-x*x)+0.5*fr_variation*(1-x)*(1-x)+0.5*fl_variation*(1+x)*(1+x);
  }

  float w = 1;

  //  cout<<"original_value: "<<original_value<<endl;
  //  cout<<"new_value: "<<new_value<<endl;

  if((f0+fl+fr)!=0){
    if(original_value!=0){
      w = new_value/original_value; }
    else{cout<< "ERROR"<< endl; exit(1);}
  }

  //  cout<<"Weight is: "<<w<<endl;
  return w;

}