/** Configure the template
	 *
	 *  \return SUCCESSFUL_RETURN
	 */
	virtual returnValue configure(  )
	{
		return fillTemplate( );
	}
void makeTemplate(int updown, bool debug){

  TString jes;
  if (updown==1){
    jes="_up";
  }
  else if(updown==-1){
    jes="_down";
  }
  else if(updown==2){
    jes="_alt";
  }
  else if(updown==3){
    jes="_alt2";
  }

  TString debugname;
  if (debug) debugname="_unnormalized";

  if(updown==0 || updown==1 || updown==-1){
    fqqH = new TFile(destDir + "qqH_vbfMELA_old"+jes+debugname+".root","RECREATE");
    fggH = new TFile(destDir + "ggH_vbfMELA_old"+jes+debugname+".root","RECREATE");
    fqqZZ = new TFile(destDir + "qqZZ_vbfMELA_old"+jes+debugname+".root","RECREATE");
    fggZZ = new TFile(destDir + "ggZZ_vbfMELA_old"+jes+debugname+".root","RECREATE");
    fZX = new TFile(destDir + "Z+X_vbfMELA_old"+jes+debugname+".root","RECREATE");
    fZH = new TFile(destDir + "ZH_vbfMELA_old"+jes+debugname+".root","RECREATE");
    fWH = new TFile(destDir + "WH_vbfMELA_old"+jes+debugname+".root","RECREATE");
    fttH = new TFile(destDir + "ttH_vbfMELA_old"+jes+debugname+".root","RECREATE");
  } else{
    fqqH = new TFile(destDir + "qqH_vbfMELA_old"+jes+debugname+".root","RECREATE");
    fggH = new TFile(destDir + "ggH_vbfMELA_old"+jes+debugname+".root","RECREATE");
    fqqZZ = new TFile(destDir + "qqZZ_vbfMELA_old"+jes+debugname+".root","RECREATE");
  }

  TH2F* low,*high,*H_Djet; 
  
  // =========================
  // ggH
  
  
  low = fillTemplate(0,true,updown);
  high = fillTemplate(0,false,updown);
  H_Djet = mergeTemplates(low,high);

  if (!debug && updown<2) smoothtemplates(H_Djet,0);
  if (!debug && updown==2) smoothtemplates(H_Djet,-1);
  if (!debug && updown==3) smoothtemplates(H_Djet,-2);


  fggH->cd();
  H_Djet->Write("H_Djet");
  fggH->Close();
  
  // ==========================
  // qqH
  
  low = fillTemplate(1,true,updown);
  high = fillTemplate(1,false,updown);
  H_Djet = mergeTemplates(low,high);  

  if (!debug && updown<2) smoothtemplates(H_Djet,1);
  if (!debug && updown==2) smoothtemplates(H_Djet,-3);
  //Test for p-values <- Go to smoothtemplates to change
  if (!debug && updown==3) smoothtemplates(H_Djet,-4);

  fqqH->cd();
  H_Djet->Write("H_Djet");
  fqqH->Close();
  

  // ==========================
  // qqZZ

  //if(updown<2){
    low = fillTemplate(2,true,updown);
    high = fillTemplate(2,false,updown);
    H_Djet = mergeTemplates(low,high);
    /*  }
  if(updown==2){
    low = fillTemplate(-8,true,updown);
    high = fillTemplate(-8,false,updown);
    H_Djet = mergeTemplates(low,high);
    }*/

  if (!debug) smoothtemplates(H_Djet,2);
  if (!debug && updown==2) altshapes(H_Djet,2,1);
  if (!debug && updown==3) altshapes(H_Djet,2,2);
  if (!debug && updown>1){
    TH1F* tempProj;
    for(int i=1; i<=H_Djet->GetNbinsX(); i++){
      tempProj = (TH1F*) H_Djet->ProjectionY("tempProj",i,i);
      float norm=tempProj->Integral();
      if (norm>0) { // Avoid introducing NaNs in the histogram
	for(int j=1; j<=H_Djet->GetNbinsY(); j++){
	  H_Djet->SetBinContent(i,j, H_Djet->GetBinContent(i,j)/norm);
	}
      }
    }
  }
  //Test for p-values
  //if (!debug && updown<3) smoothtemplates(H_Djet,2);
  //if (!debug && updown==3) mirrortemplates(2);

  fqqZZ->cd();
  H_Djet->Write("H_Djet");
  fqqZZ->Close();
  
  
  if (updown==0 || updown==1 || updown==-1){
    // ==========================
    // ggZZ
    
    low = fillTemplate(3,true,updown);
    high = fillTemplate(3,false,updown);
    H_Djet = mergeTemplates(low,high);
    
    if (!debug) smoothtemplates(H_Djet,3);
    
    fggZZ->cd();
    H_Djet->Write("H_Djet");
    fggZZ->Close();
    
    // ==========================
    // Z+X
    
    //if(updown==0){
    low = fillTemplate(4,true,updown);
    high = fillTemplate(4,false,updown);
    H_Djet = mergeTemplates(low,high);
    
    if(!debug) smoothtemplates(H_Djet,4);
    
    fZX->cd();
    H_Djet->Write("H_Djet");
    fZX->Close();
      //}
    
    // ==========================
    // ZH

    low = fillTemplate(5,true,updown);
    high = fillTemplate(5,false,updown);
    H_Djet = mergeTemplates(low,high);
    
    if (!debug) smoothtemplates(H_Djet,5);
    
    fZH->cd();
    H_Djet->Write("H_Djet");
    fZH->Close();
    
    // ==========================
    // WH
    
    low = fillTemplate(6,true,updown);
    high = fillTemplate(6,false,updown);
    H_Djet = mergeTemplates(low,high);
    
    if (!debug) smoothtemplates(H_Djet,6);
    
    fWH->cd();
    H_Djet->Write("H_Djet");
    fWH->Close();
    
    // ==========================
    // ttH
    
    low = fillTemplate(7,true,updown);
    high = fillTemplate(7,false,updown);
    H_Djet = mergeTemplates(low,high);
    
    if (!debug) smoothtemplates(H_Djet,7);

    fttH->cd();
    H_Djet->Write("H_Djet");
    fttH->Close();
  }
}