ROOT logo
/**************************************************************************
 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/

/* $Id$ */

//--------------------------------------------------
// Method implementation for background studies and background subtraction with UA1 algorithms
//
// Author: magali.estienne@subatech.in2p3.fr
//-------------------------------------------------

#include <Riostream.h> 
#include <TList.h>
#include <TClonesArray.h>
#include <TH1F.h>
#include <TH2F.h>

#include "AliAODJetEventBackground.h"
#include "AliUA1JetHeaderV1.h"
#include "AliJetCalTrk.h"
#include "AliJetBkg.h"


using namespace std;

ClassImp(AliJetBkg)

////////////////////////////////////////////////////////////////////////

AliJetBkg::AliJetBkg():
  TObject(),
  fEvent(0x0),
  fHeader(0x0),
  fDebug(0),
  fhEtBackg(0x0),
  fhAreaBackg(0x0)
{
  // Default constructor
  for(int i = 0;i < kMaxJets;i++){
    fhAreaJet[i] = fhEtJet[i] = 0;
  }
}

//----------------------------------------------------------------
AliJetBkg::AliJetBkg(const AliJetBkg& input):
  TObject(input),
  fEvent(input.fEvent),
  fHeader(input.fHeader),
  fDebug(input.fDebug),
  fhEtBackg(input.fhEtBackg),
  fhAreaBackg(input.fhAreaBackg)
{
  // copy constructor
  for(int i = 0;i < kMaxJets;i++){
    fhAreaJet[i] = input.fhAreaJet[i];
    fhEtJet[i] = input.fhEtJet[i];
  }

}

//----------------------------------------------------------------
AliJetBkg::~AliJetBkg()
{
  // Destructor
  if(fhEtBackg) delete  fhEtBackg;
  if(fhAreaBackg) delete  fhAreaBackg;
   for(int i = 0;i < kMaxJets;i++){
     if(fhAreaJet[i]) delete fhAreaJet[i];
     if(fhEtJet[i])  delete fhEtJet[i];
   }

}

//----------------------------------------------------------------
Bool_t AliJetBkg::PtCutPass(Int_t id, Int_t nTracks)
{
  // Check if track or cell passes the cut flag
  if(id < nTracks && fEvent->GetCalTrkTrack(id)->GetCutFlag() == 1) 
   return kTRUE;
  else return kFALSE;

}

//----------------------------------------------------------------
Bool_t AliJetBkg::SignalCutPass(Int_t id, Int_t nTracks)
{
  // Check if track or cell passes the cut flag
  if(id < nTracks && fEvent->GetCalTrkTrack(id)->GetSignalFlag() == 1)
    return kTRUE;
  else return kFALSE;

}

//----------------------------------------------------------------
Float_t AliJetBkg::CalcJetAreaEtaCut(Float_t radius, Float_t etaJet)
{
  // Calculate jet area taking into account an acceptance cut in eta
  AliUA1JetHeader* header = (AliUA1JetHeader*) fHeader;
  Float_t detamax = etaJet + radius;
  Float_t detamin = etaJet - radius;
  Float_t accmax = 0.0; Float_t accmin = 0.0;
  if(detamax > header->GetLegoEtaMax()){ // sector outside etamax
    Float_t h = header->GetLegoEtaMax() - etaJet;
    accmax = radius*radius*TMath::ACos(h/radius) - h*TMath::Sqrt(radius*radius - h*h);
  }
  if(detamin < header->GetLegoEtaMin()){ // sector outside etamin
    Float_t h = header->GetLegoEtaMax() + etaJet;
    accmin = radius*radius*TMath::ACos(h/radius) - h*TMath::Sqrt(radius*radius - h*h);
  }
  
  return radius*radius*TMath::Pi() - accmax - accmin;

}

//----------------------------------------------------------------
void AliJetBkg::CalcJetAndBckgAreaEtaCut(Bool_t calcOutsideArea, Float_t radius, Int_t nJets, const Float_t* etaJet, Float_t* &areaJet, Float_t &areaOut)
{
  // Calculate jet and bacground areas taking into account an acceptance cut in eta

  AliUA1JetHeader* header = (AliUA1JetHeader*) fHeader;
  areaOut = (header->GetLegoEtaMax()-header->GetLegoEtaMin())*(header->GetLegoPhiMax() - header->GetLegoPhiMin());
  for(Int_t k=0; k<nJets; k++){
    areaJet[k] = CalcJetAreaEtaCut(radius, etaJet[k]);
    if(calcOutsideArea) areaOut = areaOut - areaJet[k];
  }

}

//----------------------------------------------------------------
void AliJetBkg::SubtractBackg(const Int_t& nIn, const Int_t&nJ, Float_t&etbgTotalN, Float_t&sigmaN,
                              const Float_t* ptT, const Float_t* etaT, const Float_t* phiT,
                              Float_t* etJet, const Float_t* etaJet, const Float_t* phiJet,
                              Float_t* etsigJet, Int_t* multJetT, Int_t* multJetC, Int_t* multJet,
                              Int_t* injet, Float_t* &areaJet)
{
  //
  // Background subtraction using cone method but without correction in dE/deta distribution
  // Cases to take into account the EMCal geometry are included
  //
  
  AliUA1JetHeader* header = (AliUA1JetHeader*) fHeader;
  //calculate energy inside and outside cones
  fDebug = header->GetDebug();
  Float_t rc = header->GetRadius();
  Float_t etOut = 0;
  // Get number of tracks from EventCalTrk
  Int_t nTracks = fEvent->GetNCalTrkTracks();

  Float_t etIn[kMaxJets] = {0};
  Float_t areaOut = 0.;

  for(Int_t jpart = 0; jpart < nIn; jpart++){ // loop for all particles in array

    for(Int_t ijet=0; ijet<nJ; ijet++){
      Float_t deta = etaT[jpart] - etaJet[ijet];
      Float_t dphi = phiT[jpart] - phiJet[ijet];
      if (dphi < -TMath::Pi()) dphi= -dphi - 2.0 * TMath::Pi();
      if (dphi > TMath::Pi()) dphi = 2.0 * TMath::Pi() - dphi;
      Float_t dr = TMath::Sqrt(deta * deta + dphi * dphi);
      if(dr <= rc){ // particles inside this cone
        if(jpart < nTracks) multJetT[ijet]++;
        else multJetC[ijet]++;
        multJet[ijet]++;
        injet[jpart] = ijet;
        if(PtCutPass(jpart,nTracks)){ // pt cut
          etIn[ijet] += ptT[jpart];
          if(SignalCutPass(jpart,nTracks))
            etsigJet[ijet]+= ptT[jpart];
        }
        break;
      }
    }// end jets loop

    if((injet[jpart] == -1) &&
       (PtCutPass(jpart,nTracks))){
      etOut += ptT[jpart]; // particle outside cones and pt cut
    }
  } //end particle loop

  // Calculate jet and background areas
  Bool_t calcAreaOut = kTRUE;
  CalcJetAndBckgAreaEtaCut(calcAreaOut,rc, nJ, etaJet, areaJet, areaOut);

  //subtract background using area method
  for(Int_t ljet=0; ljet<nJ; ljet++){
    Float_t areaRatio = areaJet[ljet]/areaOut;
    etJet[ljet] = etIn[ljet]-etOut*areaRatio; // subtraction
  }

  // estimate new total background
  Float_t areaT = 0;
  areaT = (header->GetLegoEtaMax()-header->GetLegoEtaMin())*(header->GetLegoPhiMax()-header->GetLegoPhiMin());
  etbgTotalN = etOut*areaT/areaOut;

  // estimate standard deviation of background
  Int_t count = 0;
  for(Int_t jpart = 0; jpart < nIn; jpart++){ // loop for all particles in array
    if((injet[jpart] == -1) &&
       (PtCutPass(jpart,nTracks))){
      sigmaN += etbgTotalN/areaT - ptT[jpart];
      // To be checked (Division by jet area to obtain standard deviation of rho ?)

      count=count+1;
    }
  }
  if (count>0)
    sigmaN=TMath::Sqrt(TMath::Abs(sigmaN)/count);

}

//----------------------------------------------------------------
void AliJetBkg::SubtractBackgStat(const Int_t& nIn, const Int_t&nJ,Float_t&etbgTotalN, Float_t&sigmaN,
                                  const Float_t* ptT, const Float_t* etaT, const Float_t* phiT,
                                  Float_t* etJet, const Float_t* etaJet, const Float_t* phiJet,
                                  Float_t* etsigJet, Int_t* multJetT, Int_t* multJetC, Int_t* multJet,
                                  Int_t* injet, Float_t* &areaJet)
{
  //
  //background subtraction using statistical method
  // Cases to take into account the EMCal geometry are included
  //

  AliUA1JetHeader* header = (AliUA1JetHeader*) fHeader;
  Float_t etbgStat = header->GetBackgStat(); // pre-calculated background
  
  //calculate energy inside
  Float_t rc= header->GetRadius();
  Float_t etIn[kMaxJets] = {0.0};
  // Get number of tracks from EventCalTrk
  Int_t nTracks = fEvent->GetNCalTrkTracks();
  Float_t areaOut = 0.;

  for(Int_t jpart = 0; jpart < nIn; jpart++)
    { // loop for all particles in array
      
      for(Int_t ijet=0; ijet<nJ; ijet++)
	{
	  Float_t deta = etaT[jpart] - etaJet[ijet];
	  Float_t dphi = phiT[jpart] - phiJet[ijet];
	  if (dphi < -TMath::Pi()) dphi= -dphi - 2.0 * TMath::Pi();
	  if (dphi > TMath::Pi()) dphi = 2.0 * TMath::Pi() - dphi;
	  Float_t dr = TMath::Sqrt(deta * deta + dphi * dphi);
          if(dr <= rc){ // particles inside this cone
            if(jpart < nTracks) multJetT[ijet]++;
            else multJetC[ijet]++;
            multJet[ijet]++;
            injet[jpart] = ijet;

            if(PtCutPass(jpart,nTracks)){ // pt cut
              etIn[ijet] += ptT[jpart];
	      if(SignalCutPass(jpart,nTracks))
		etsigJet[ijet]+= ptT[jpart];
            }
            break;
          }
	}// end jets loop
    } //end particle loop
  
  // Calculate jet and background areas
  Bool_t calcAreaOut = kFALSE;
  CalcJetAndBckgAreaEtaCut(calcAreaOut,rc, nJ, etaJet, areaJet, areaOut);

  //subtract background using area method
  for(Int_t ljet=0; ljet<nJ; ljet++){
    Float_t areaRatio = areaJet[ljet]/areaOut;
    etJet[ljet] = etIn[ljet]-etbgStat*areaRatio; // subtraction
  }
  Int_t count=0;
  etbgTotalN = etbgStat;

  // estimate standard deviation of background
  Float_t areaT = 0;
  areaT = (header->GetLegoEtaMax()-header->GetLegoEtaMin())*(header->GetLegoPhiMax()-header->GetLegoPhiMin());
  for(Int_t jpart = 0; jpart < nIn; jpart++){ // loop for all particles in array
    if((injet[jpart] == -1) &&
       (PtCutPass(jpart,nTracks))){
      sigmaN += etbgTotalN/areaT - ptT[jpart];
      count=count+1;
    }
  }
  if(count>0)sigmaN=TMath::Sqrt(TMath::Abs(sigmaN)/count);

}

//----------------------------------------------------------------
void AliJetBkg::SubtractBackgCone(const Int_t& nIn, const Int_t&nJ,Float_t& etbgTotalN, Float_t&sigmaN,
                                  const Float_t* ptT, const Float_t* etaT, const Float_t* phiT, Float_t* etJet,
                                  const Float_t* etaJet, const Float_t* phiJet, Float_t* etsigJet,
                                  Int_t* multJetT, Int_t* multJetC, Int_t* multJet, Int_t* injet, Float_t* &/*areaJet*/)
{
  //
  // Cone background subtraction method taking into acount dEt/deta distribution
  // Cases to take into account the EMCal geometry are not included
  //

  AliUA1JetHeader* header = (AliUA1JetHeader*) fHeader;
  //general
  Float_t rc= header->GetRadius();
  Float_t etamax = header->GetLegoEtaMax();
  Float_t etamin = header->GetLegoEtaMin();
  Int_t ndiv = 100;
  // Get number of tracks from EventCalTrk
  Int_t nTracks = fEvent->GetNCalTrkTracks();
 
  // jet energy and area arrays
  Bool_t oldStatus = TH1::AddDirectoryStatus();
  TH1::AddDirectory(kFALSE);

  for(Int_t mjet=0; mjet<nJ; mjet++){
    if(!fhEtJet[mjet]){
      fhEtJet[mjet] = new TH1F(Form("hEtJet%d", mjet),"et dist in eta ",ndiv,etamin,etamax);
    }
    if(!fhAreaJet[mjet]){
      fhAreaJet[mjet] = new TH1F(Form("hEtJet%d", mjet),"area dist in eta ",ndiv,etamin,etamax);
    }
    fhEtJet[mjet]->Reset();
    fhAreaJet[mjet]->Reset();
  }
  // background energy and area
  if(!fhEtBackg)fhEtBackg = new TH1F("hEtBackg"," backg et dist in eta ",ndiv,etamin,etamax);
  fhEtBackg->Reset();
  if(!fhAreaBackg) fhAreaBackg = new TH1F("hAreaBackg","backg area dist in eta ",ndiv,etamin,etamax);
  fhAreaBackg->Reset();
  TH1::AddDirectory(oldStatus);

  //fill energies
  for(Int_t jpart = 0; jpart < nIn; jpart++){ // loop for all particles in array
    for(Int_t ijet=0; ijet<nJ; ijet++){  // loop for all jets
      Float_t deta = etaT[jpart] - etaJet[ijet];
      Float_t dphi = phiT[jpart] - phiJet[ijet];
      if (dphi < -TMath::Pi()) dphi= -dphi - 2.0 * TMath::Pi();
      if (dphi > TMath::Pi()) dphi = 2.0 * TMath::Pi() - dphi;
      Float_t dr = TMath::Sqrt(deta * deta + dphi * dphi);
      if(dr <= rc){ // particles inside this cone
        if(jpart < nTracks) multJetT[ijet]++;
        else multJetC[ijet]++;
        multJet[ijet]++;
        injet[jpart] = ijet;

        if(PtCutPass(jpart,nTracks)){ // pt cut
          fhEtJet[ijet]->Fill(etaT[jpart],ptT[jpart]); //particle inside cone
          if(SignalCutPass(jpart,nTracks))
            etsigJet[ijet]+= ptT[jpart];
        }
        break;
      }
    }// end jets loop

    if((injet[jpart] == -1)  &&
       (PtCutPass(jpart,nTracks) == 1))
      fhEtBackg->Fill(etaT[jpart],ptT[jpart]); // particle outside cones
  } //end particle loop

  //calc areas
  Float_t eta0 = etamin;
  Float_t etaw = (etamax - etamin)/((Float_t)ndiv);
  Float_t eta1 = eta0 + etaw;
  for(Int_t etabin = 0; etabin< ndiv; etabin++){ // loop for all eta bins
    Float_t etac = eta0 + etaw/2.0;
    Float_t areabg = etaw*2.0*TMath::Pi();
    for(Int_t ijet=0; ijet<nJ; ijet++){  // loop for all jets
      Float_t deta0 = TMath::Abs(eta0 - etaJet[ijet]);
      Float_t deta1 = TMath::Abs(eta1 - etaJet[ijet]);
      Float_t acc0 = 0.0; Float_t acc1 = 0.0;
      Float_t areaj = 0.0;
      if(deta0 > rc && deta1 < rc){
	acc1 = rc*rc*TMath::ACos(deta1/rc) - deta1*TMath::Sqrt(rc*rc - deta1*deta1);
	areaj = acc1;
      }
      if(deta0 < rc && deta1 > rc){
	acc0 = rc*rc*TMath::ACos(deta0/rc) - deta0*TMath::Sqrt(rc*rc - deta0*deta0);
	areaj = acc0;
      }
      if(deta0 < rc && deta1 < rc){
	acc0 = rc*rc*TMath::ACos(deta0/rc) - deta0*TMath::Sqrt(rc*rc - deta0*deta0);
	acc1 = rc*rc*TMath::ACos(deta1/rc) - deta1*TMath::Sqrt(rc*rc - deta1*deta1);
	if(eta1<etaJet[ijet]) areaj = acc1-acc0;  // case 1
	if((eta0 < etaJet[ijet]) && (etaJet[ijet]<eta1)) areaj = rc*rc*TMath::Pi() - acc1 -acc0; // case 2
	if(etaJet[ijet] < eta0) areaj = acc0 -acc1; // case 3
      }
      fhAreaJet[ijet]->Fill(etac,areaj);
      areabg = areabg - areaj;
    } // end jets loop
    fhAreaBackg->Fill(etac,areabg);
    eta0 = eta1;
    eta1 = eta1 + etaw;
  } // end loop for all eta bins

  //subtract background
  for(Int_t kjet=0; kjet<nJ; kjet++){
    etJet[kjet] = 0.0; // first  clear etJet for this jet
    for(Int_t bin = 0; bin< ndiv; bin++){
      if(fhAreaJet[kjet]->GetBinContent(bin)){
	Float_t areab = fhAreaBackg->GetBinContent(bin);
	Float_t etb = fhEtBackg->GetBinContent(bin);
	Float_t areaR = (fhAreaJet[kjet]->GetBinContent(bin))/areab;
	etJet[kjet] = etJet[kjet] + ((fhEtJet[kjet]->GetBinContent(bin)) - etb*areaR); //subtraction
      }
    }
  }

  // calc background total
  Double_t etOut = fhEtBackg->Integral();
  Double_t areaOut = fhAreaBackg->Integral();
  Float_t areaT = (header->GetLegoEtaMax()-header->GetLegoEtaMin())*(header->GetLegoPhiMax()-header->GetLegoPhiMin());
  etbgTotalN = etOut*areaT/areaOut;

  Int_t count=0;
  for(Int_t jpart = 0; jpart < nIn; jpart++){ // loop for all particles in array
    if((injet[jpart] == -1) &&
       (PtCutPass(jpart,nTracks))){
      sigmaN += etbgTotalN/areaT - ptT[jpart];
      count=count+1;
    }
  }
  sigmaN=TMath::Sqrt(TMath::Abs(sigmaN)/count);
  
}

//----------------------------------------------------------------
void AliJetBkg::SubtractBackgRatio(const Int_t& nIn, const Int_t&nJ,Float_t& etbgTotalN, Float_t&sigmaN,
                                   const Float_t* ptT,const Float_t* etaT, const Float_t* phiT,
                                   Float_t* etJet, const Float_t* etaJet, const Float_t* phiJet,
                                   Float_t* etsigJet, Int_t* multJetT, Int_t* multJetC, Int_t* multJet,
                                   Int_t* injet,  Float_t* &/*areaJet*/)
{
  // Ratio background subtraction method taking into acount dEt/deta distribution
  // Cases to take into account the EMCal geometry are not included

  AliUA1JetHeader* header = (AliUA1JetHeader*) fHeader;
  //factor F calc before
  Float_t bgRatioCut = header->GetBackgCutRatio();
  
  //general
  Float_t rc= header->GetRadius();
  Float_t etamax = header->GetLegoEtaMax();
  Float_t etamin = header->GetLegoEtaMin();
  Int_t ndiv = 100;
  // Get number of tracks from EventCalTrk
  Int_t nTracks = fEvent->GetNCalTrkTracks();
  
  // jet energy and area arrays
  Bool_t oldStatus = TH1::AddDirectoryStatus();
  TH1::AddDirectory(kFALSE);
  for(Int_t mjet=0; mjet<nJ; mjet++){
    if(!fhEtJet[mjet]){
      fhEtJet[mjet] = new TH1F(Form("hEtJet%d", mjet),"et dist in eta ",ndiv,etamin,etamax);
    }
    if(!fhAreaJet[mjet]){
      fhAreaJet[mjet] = new TH1F(Form("hAreaJet%d", mjet),"area dist in eta ",ndiv,etamin,etamax);
    }
    fhEtJet[mjet]->Reset();
    fhAreaJet[mjet]->Reset();
  }
  // background energy and area
  if(!fhEtBackg)fhEtBackg = new TH1F("hEtBackg"," backg et dist in eta ",ndiv,etamin,etamax);
  fhEtBackg->Reset();
  if(!fhAreaBackg) fhAreaBackg = new TH1F("hAreaBackg","backg area dist in eta ",ndiv,etamin,etamax);
  fhAreaBackg->Reset();
  TH1::AddDirectory(oldStatus);

  //fill energies
  for(Int_t jpart = 0; jpart < nIn; jpart++){ // loop for all particles in array
    for(Int_t ijet=0; ijet<nJ; ijet++){  // loop for all jets
      Float_t deta = etaT[jpart] - etaJet[ijet];
      Float_t dphi = phiT[jpart] - phiJet[ijet];
      if (dphi < -TMath::Pi()) dphi= -dphi - 2.0 * TMath::Pi();
      if (dphi > TMath::Pi()) dphi = 2.0 * TMath::Pi() - dphi;
      Float_t dr = TMath::Sqrt(deta * deta + dphi * dphi);
      if(dr <= rc){ // particles inside this cone
        if(jpart < nTracks) multJetT[ijet]++;
        else multJetC[ijet]++;
        multJet[ijet]++;
        injet[jpart] = ijet;

        if(PtCutPass(jpart,nTracks)){ // pt cut
          fhEtJet[ijet]->Fill(etaT[jpart],ptT[jpart]); //particle inside cone
	  if(SignalCutPass(jpart,nTracks))
	    etsigJet[ijet]+= ptT[jpart];
        }
        break;
      }
    }// end jets loop
    if(injet[jpart] == -1) fhEtBackg->Fill(etaT[jpart],ptT[jpart]); // particle outside cones
  } //end particle loop

  //calc areas
  Float_t eta0 = etamin;
  Float_t etaw = (etamax - etamin)/((Float_t)ndiv);
  Float_t eta1 = eta0 + etaw;
  for(Int_t etabin = 0; etabin< ndiv; etabin++){ // loop for all eta bins
    Float_t etac = eta0 + etaw/2.0;
    Float_t areabg = etaw*2.0*TMath::Pi();
    for(Int_t ijet=0; ijet<nJ; ijet++){  // loop for all jets
      Float_t deta0 = TMath::Abs(eta0 - etaJet[ijet]);
      Float_t deta1 = TMath::Abs(eta1 - etaJet[ijet]);
      Float_t acc0 = 0.0; Float_t acc1 = 0.0;
      Float_t areaj = 0.0;
      if(deta0 > rc && deta1 < rc){
	acc1 = rc*rc*TMath::ACos(deta1/rc) - deta1*TMath::Sqrt(rc*rc - deta1*deta1);
	areaj = acc1;
      }
      if(deta0 < rc && deta1 > rc){
	acc0 = rc*rc*TMath::ACos(deta0/rc) - deta0*TMath::Sqrt(rc*rc - deta0*deta0);
	areaj = acc0;
      }
      if(deta0 < rc && deta1 < rc){
	acc0 = rc*rc*TMath::ACos(deta0/rc) - deta0*TMath::Sqrt(rc*rc - deta0*deta0);
	acc1 = rc*rc*TMath::ACos(deta1/rc) - deta1*TMath::Sqrt(rc*rc - deta1*deta1);
	if(eta1<etaJet[ijet]) areaj = acc1-acc0;  // case 1
	if((eta0 < etaJet[ijet]) && (etaJet[ijet]<eta1)) areaj = rc*rc*TMath::Pi() - acc1 -acc0; // case 2
	if(etaJet[ijet] < eta0) areaj = acc0 -acc1; // case 3
      }
      fhAreaJet[ijet]->Fill(etac,areaj);
      areabg = areabg - areaj;
    } // end jets loop
    fhAreaBackg->Fill(etac,areabg);
    eta0 = eta1;
    eta1 = eta1 + etaw;
  } // end loop for all eta bins

  //subtract background
  for(Int_t kjet=0; kjet<nJ; kjet++){
    etJet[kjet] = 0.0; // first  clear etJet for this jet
    for(Int_t bin = 0; bin< ndiv; bin++){
      if(fhAreaJet[kjet]->GetBinContent(bin)){
	Float_t areab = fhAreaBackg->GetBinContent(bin);
	Float_t etb = fhEtBackg->GetBinContent(bin);
	Float_t areaR = (fhAreaJet[kjet]->GetBinContent(bin))/areab;
	etJet[kjet] = etJet[kjet] + ((fhEtJet[kjet]->GetBinContent(bin)) - etb*areaR*bgRatioCut); //subtraction
      }
    }
  }

  // calc background total
  Double_t etOut = fhEtBackg->Integral();
  Double_t areaOut = fhAreaBackg->Integral();
  Float_t areaT = (header->GetLegoEtaMax()-header->GetLegoEtaMin())*(header->GetLegoPhiMax()-header->GetLegoPhiMin());
  etbgTotalN = etOut*areaT/areaOut;
 
  Int_t count=0;
    
  for(Int_t jpart = 0; jpart < nIn; jpart++){ // loop for all particles in array
    if((injet[jpart] == -1) &&
       (PtCutPass(jpart,nTracks))){
      sigmaN += etbgTotalN/areaT - ptT[jpart];
      count=count+1;
    }
  }
  sigmaN=TMath::Sqrt(TMath::Abs(sigmaN)/count);

}

 AliJetBkg.cxx:1
 AliJetBkg.cxx:2
 AliJetBkg.cxx:3
 AliJetBkg.cxx:4
 AliJetBkg.cxx:5
 AliJetBkg.cxx:6
 AliJetBkg.cxx:7
 AliJetBkg.cxx:8
 AliJetBkg.cxx:9
 AliJetBkg.cxx:10
 AliJetBkg.cxx:11
 AliJetBkg.cxx:12
 AliJetBkg.cxx:13
 AliJetBkg.cxx:14
 AliJetBkg.cxx:15
 AliJetBkg.cxx:16
 AliJetBkg.cxx:17
 AliJetBkg.cxx:18
 AliJetBkg.cxx:19
 AliJetBkg.cxx:20
 AliJetBkg.cxx:21
 AliJetBkg.cxx:22
 AliJetBkg.cxx:23
 AliJetBkg.cxx:24
 AliJetBkg.cxx:25
 AliJetBkg.cxx:26
 AliJetBkg.cxx:27
 AliJetBkg.cxx:28
 AliJetBkg.cxx:29
 AliJetBkg.cxx:30
 AliJetBkg.cxx:31
 AliJetBkg.cxx:32
 AliJetBkg.cxx:33
 AliJetBkg.cxx:34
 AliJetBkg.cxx:35
 AliJetBkg.cxx:36
 AliJetBkg.cxx:37
 AliJetBkg.cxx:38
 AliJetBkg.cxx:39
 AliJetBkg.cxx:40
 AliJetBkg.cxx:41
 AliJetBkg.cxx:42
 AliJetBkg.cxx:43
 AliJetBkg.cxx:44
 AliJetBkg.cxx:45
 AliJetBkg.cxx:46
 AliJetBkg.cxx:47
 AliJetBkg.cxx:48
 AliJetBkg.cxx:49
 AliJetBkg.cxx:50
 AliJetBkg.cxx:51
 AliJetBkg.cxx:52
 AliJetBkg.cxx:53
 AliJetBkg.cxx:54
 AliJetBkg.cxx:55
 AliJetBkg.cxx:56
 AliJetBkg.cxx:57
 AliJetBkg.cxx:58
 AliJetBkg.cxx:59
 AliJetBkg.cxx:60
 AliJetBkg.cxx:61
 AliJetBkg.cxx:62
 AliJetBkg.cxx:63
 AliJetBkg.cxx:64
 AliJetBkg.cxx:65
 AliJetBkg.cxx:66
 AliJetBkg.cxx:67
 AliJetBkg.cxx:68
 AliJetBkg.cxx:69
 AliJetBkg.cxx:70
 AliJetBkg.cxx:71
 AliJetBkg.cxx:72
 AliJetBkg.cxx:73
 AliJetBkg.cxx:74
 AliJetBkg.cxx:75
 AliJetBkg.cxx:76
 AliJetBkg.cxx:77
 AliJetBkg.cxx:78
 AliJetBkg.cxx:79
 AliJetBkg.cxx:80
 AliJetBkg.cxx:81
 AliJetBkg.cxx:82
 AliJetBkg.cxx:83
 AliJetBkg.cxx:84
 AliJetBkg.cxx:85
 AliJetBkg.cxx:86
 AliJetBkg.cxx:87
 AliJetBkg.cxx:88
 AliJetBkg.cxx:89
 AliJetBkg.cxx:90
 AliJetBkg.cxx:91
 AliJetBkg.cxx:92
 AliJetBkg.cxx:93
 AliJetBkg.cxx:94
 AliJetBkg.cxx:95
 AliJetBkg.cxx:96
 AliJetBkg.cxx:97
 AliJetBkg.cxx:98
 AliJetBkg.cxx:99
 AliJetBkg.cxx:100
 AliJetBkg.cxx:101
 AliJetBkg.cxx:102
 AliJetBkg.cxx:103
 AliJetBkg.cxx:104
 AliJetBkg.cxx:105
 AliJetBkg.cxx:106
 AliJetBkg.cxx:107
 AliJetBkg.cxx:108
 AliJetBkg.cxx:109
 AliJetBkg.cxx:110
 AliJetBkg.cxx:111
 AliJetBkg.cxx:112
 AliJetBkg.cxx:113
 AliJetBkg.cxx:114
 AliJetBkg.cxx:115
 AliJetBkg.cxx:116
 AliJetBkg.cxx:117
 AliJetBkg.cxx:118
 AliJetBkg.cxx:119
 AliJetBkg.cxx:120
 AliJetBkg.cxx:121
 AliJetBkg.cxx:122
 AliJetBkg.cxx:123
 AliJetBkg.cxx:124
 AliJetBkg.cxx:125
 AliJetBkg.cxx:126
 AliJetBkg.cxx:127
 AliJetBkg.cxx:128
 AliJetBkg.cxx:129
 AliJetBkg.cxx:130
 AliJetBkg.cxx:131
 AliJetBkg.cxx:132
 AliJetBkg.cxx:133
 AliJetBkg.cxx:134
 AliJetBkg.cxx:135
 AliJetBkg.cxx:136
 AliJetBkg.cxx:137
 AliJetBkg.cxx:138
 AliJetBkg.cxx:139
 AliJetBkg.cxx:140
 AliJetBkg.cxx:141
 AliJetBkg.cxx:142
 AliJetBkg.cxx:143
 AliJetBkg.cxx:144
 AliJetBkg.cxx:145
 AliJetBkg.cxx:146
 AliJetBkg.cxx:147
 AliJetBkg.cxx:148
 AliJetBkg.cxx:149
 AliJetBkg.cxx:150
 AliJetBkg.cxx:151
 AliJetBkg.cxx:152
 AliJetBkg.cxx:153
 AliJetBkg.cxx:154
 AliJetBkg.cxx:155
 AliJetBkg.cxx:156
 AliJetBkg.cxx:157
 AliJetBkg.cxx:158
 AliJetBkg.cxx:159
 AliJetBkg.cxx:160
 AliJetBkg.cxx:161
 AliJetBkg.cxx:162
 AliJetBkg.cxx:163
 AliJetBkg.cxx:164
 AliJetBkg.cxx:165
 AliJetBkg.cxx:166
 AliJetBkg.cxx:167
 AliJetBkg.cxx:168
 AliJetBkg.cxx:169
 AliJetBkg.cxx:170
 AliJetBkg.cxx:171
 AliJetBkg.cxx:172
 AliJetBkg.cxx:173
 AliJetBkg.cxx:174
 AliJetBkg.cxx:175
 AliJetBkg.cxx:176
 AliJetBkg.cxx:177
 AliJetBkg.cxx:178
 AliJetBkg.cxx:179
 AliJetBkg.cxx:180
 AliJetBkg.cxx:181
 AliJetBkg.cxx:182
 AliJetBkg.cxx:183
 AliJetBkg.cxx:184
 AliJetBkg.cxx:185
 AliJetBkg.cxx:186
 AliJetBkg.cxx:187
 AliJetBkg.cxx:188
 AliJetBkg.cxx:189
 AliJetBkg.cxx:190
 AliJetBkg.cxx:191
 AliJetBkg.cxx:192
 AliJetBkg.cxx:193
 AliJetBkg.cxx:194
 AliJetBkg.cxx:195
 AliJetBkg.cxx:196
 AliJetBkg.cxx:197
 AliJetBkg.cxx:198
 AliJetBkg.cxx:199
 AliJetBkg.cxx:200
 AliJetBkg.cxx:201
 AliJetBkg.cxx:202
 AliJetBkg.cxx:203
 AliJetBkg.cxx:204
 AliJetBkg.cxx:205
 AliJetBkg.cxx:206
 AliJetBkg.cxx:207
 AliJetBkg.cxx:208
 AliJetBkg.cxx:209
 AliJetBkg.cxx:210
 AliJetBkg.cxx:211
 AliJetBkg.cxx:212
 AliJetBkg.cxx:213
 AliJetBkg.cxx:214
 AliJetBkg.cxx:215
 AliJetBkg.cxx:216
 AliJetBkg.cxx:217
 AliJetBkg.cxx:218
 AliJetBkg.cxx:219
 AliJetBkg.cxx:220
 AliJetBkg.cxx:221
 AliJetBkg.cxx:222
 AliJetBkg.cxx:223
 AliJetBkg.cxx:224
 AliJetBkg.cxx:225
 AliJetBkg.cxx:226
 AliJetBkg.cxx:227
 AliJetBkg.cxx:228
 AliJetBkg.cxx:229
 AliJetBkg.cxx:230
 AliJetBkg.cxx:231
 AliJetBkg.cxx:232
 AliJetBkg.cxx:233
 AliJetBkg.cxx:234
 AliJetBkg.cxx:235
 AliJetBkg.cxx:236
 AliJetBkg.cxx:237
 AliJetBkg.cxx:238
 AliJetBkg.cxx:239
 AliJetBkg.cxx:240
 AliJetBkg.cxx:241
 AliJetBkg.cxx:242
 AliJetBkg.cxx:243
 AliJetBkg.cxx:244
 AliJetBkg.cxx:245
 AliJetBkg.cxx:246
 AliJetBkg.cxx:247
 AliJetBkg.cxx:248
 AliJetBkg.cxx:249
 AliJetBkg.cxx:250
 AliJetBkg.cxx:251
 AliJetBkg.cxx:252
 AliJetBkg.cxx:253
 AliJetBkg.cxx:254
 AliJetBkg.cxx:255
 AliJetBkg.cxx:256
 AliJetBkg.cxx:257
 AliJetBkg.cxx:258
 AliJetBkg.cxx:259
 AliJetBkg.cxx:260
 AliJetBkg.cxx:261
 AliJetBkg.cxx:262
 AliJetBkg.cxx:263
 AliJetBkg.cxx:264
 AliJetBkg.cxx:265
 AliJetBkg.cxx:266
 AliJetBkg.cxx:267
 AliJetBkg.cxx:268
 AliJetBkg.cxx:269
 AliJetBkg.cxx:270
 AliJetBkg.cxx:271
 AliJetBkg.cxx:272
 AliJetBkg.cxx:273
 AliJetBkg.cxx:274
 AliJetBkg.cxx:275
 AliJetBkg.cxx:276
 AliJetBkg.cxx:277
 AliJetBkg.cxx:278
 AliJetBkg.cxx:279
 AliJetBkg.cxx:280
 AliJetBkg.cxx:281
 AliJetBkg.cxx:282
 AliJetBkg.cxx:283
 AliJetBkg.cxx:284
 AliJetBkg.cxx:285
 AliJetBkg.cxx:286
 AliJetBkg.cxx:287
 AliJetBkg.cxx:288
 AliJetBkg.cxx:289
 AliJetBkg.cxx:290
 AliJetBkg.cxx:291
 AliJetBkg.cxx:292
 AliJetBkg.cxx:293
 AliJetBkg.cxx:294
 AliJetBkg.cxx:295
 AliJetBkg.cxx:296
 AliJetBkg.cxx:297
 AliJetBkg.cxx:298
 AliJetBkg.cxx:299
 AliJetBkg.cxx:300
 AliJetBkg.cxx:301
 AliJetBkg.cxx:302
 AliJetBkg.cxx:303
 AliJetBkg.cxx:304
 AliJetBkg.cxx:305
 AliJetBkg.cxx:306
 AliJetBkg.cxx:307
 AliJetBkg.cxx:308
 AliJetBkg.cxx:309
 AliJetBkg.cxx:310
 AliJetBkg.cxx:311
 AliJetBkg.cxx:312
 AliJetBkg.cxx:313
 AliJetBkg.cxx:314
 AliJetBkg.cxx:315
 AliJetBkg.cxx:316
 AliJetBkg.cxx:317
 AliJetBkg.cxx:318
 AliJetBkg.cxx:319
 AliJetBkg.cxx:320
 AliJetBkg.cxx:321
 AliJetBkg.cxx:322
 AliJetBkg.cxx:323
 AliJetBkg.cxx:324
 AliJetBkg.cxx:325
 AliJetBkg.cxx:326
 AliJetBkg.cxx:327
 AliJetBkg.cxx:328
 AliJetBkg.cxx:329
 AliJetBkg.cxx:330
 AliJetBkg.cxx:331
 AliJetBkg.cxx:332
 AliJetBkg.cxx:333
 AliJetBkg.cxx:334
 AliJetBkg.cxx:335
 AliJetBkg.cxx:336
 AliJetBkg.cxx:337
 AliJetBkg.cxx:338
 AliJetBkg.cxx:339
 AliJetBkg.cxx:340
 AliJetBkg.cxx:341
 AliJetBkg.cxx:342
 AliJetBkg.cxx:343
 AliJetBkg.cxx:344
 AliJetBkg.cxx:345
 AliJetBkg.cxx:346
 AliJetBkg.cxx:347
 AliJetBkg.cxx:348
 AliJetBkg.cxx:349
 AliJetBkg.cxx:350
 AliJetBkg.cxx:351
 AliJetBkg.cxx:352
 AliJetBkg.cxx:353
 AliJetBkg.cxx:354
 AliJetBkg.cxx:355
 AliJetBkg.cxx:356
 AliJetBkg.cxx:357
 AliJetBkg.cxx:358
 AliJetBkg.cxx:359
 AliJetBkg.cxx:360
 AliJetBkg.cxx:361
 AliJetBkg.cxx:362
 AliJetBkg.cxx:363
 AliJetBkg.cxx:364
 AliJetBkg.cxx:365
 AliJetBkg.cxx:366
 AliJetBkg.cxx:367
 AliJetBkg.cxx:368
 AliJetBkg.cxx:369
 AliJetBkg.cxx:370
 AliJetBkg.cxx:371
 AliJetBkg.cxx:372
 AliJetBkg.cxx:373
 AliJetBkg.cxx:374
 AliJetBkg.cxx:375
 AliJetBkg.cxx:376
 AliJetBkg.cxx:377
 AliJetBkg.cxx:378
 AliJetBkg.cxx:379
 AliJetBkg.cxx:380
 AliJetBkg.cxx:381
 AliJetBkg.cxx:382
 AliJetBkg.cxx:383
 AliJetBkg.cxx:384
 AliJetBkg.cxx:385
 AliJetBkg.cxx:386
 AliJetBkg.cxx:387
 AliJetBkg.cxx:388
 AliJetBkg.cxx:389
 AliJetBkg.cxx:390
 AliJetBkg.cxx:391
 AliJetBkg.cxx:392
 AliJetBkg.cxx:393
 AliJetBkg.cxx:394
 AliJetBkg.cxx:395
 AliJetBkg.cxx:396
 AliJetBkg.cxx:397
 AliJetBkg.cxx:398
 AliJetBkg.cxx:399
 AliJetBkg.cxx:400
 AliJetBkg.cxx:401
 AliJetBkg.cxx:402
 AliJetBkg.cxx:403
 AliJetBkg.cxx:404
 AliJetBkg.cxx:405
 AliJetBkg.cxx:406
 AliJetBkg.cxx:407
 AliJetBkg.cxx:408
 AliJetBkg.cxx:409
 AliJetBkg.cxx:410
 AliJetBkg.cxx:411
 AliJetBkg.cxx:412
 AliJetBkg.cxx:413
 AliJetBkg.cxx:414
 AliJetBkg.cxx:415
 AliJetBkg.cxx:416
 AliJetBkg.cxx:417
 AliJetBkg.cxx:418
 AliJetBkg.cxx:419
 AliJetBkg.cxx:420
 AliJetBkg.cxx:421
 AliJetBkg.cxx:422
 AliJetBkg.cxx:423
 AliJetBkg.cxx:424
 AliJetBkg.cxx:425
 AliJetBkg.cxx:426
 AliJetBkg.cxx:427
 AliJetBkg.cxx:428
 AliJetBkg.cxx:429
 AliJetBkg.cxx:430
 AliJetBkg.cxx:431
 AliJetBkg.cxx:432
 AliJetBkg.cxx:433
 AliJetBkg.cxx:434
 AliJetBkg.cxx:435
 AliJetBkg.cxx:436
 AliJetBkg.cxx:437
 AliJetBkg.cxx:438
 AliJetBkg.cxx:439
 AliJetBkg.cxx:440
 AliJetBkg.cxx:441
 AliJetBkg.cxx:442
 AliJetBkg.cxx:443
 AliJetBkg.cxx:444
 AliJetBkg.cxx:445
 AliJetBkg.cxx:446
 AliJetBkg.cxx:447
 AliJetBkg.cxx:448
 AliJetBkg.cxx:449
 AliJetBkg.cxx:450
 AliJetBkg.cxx:451
 AliJetBkg.cxx:452
 AliJetBkg.cxx:453
 AliJetBkg.cxx:454
 AliJetBkg.cxx:455
 AliJetBkg.cxx:456
 AliJetBkg.cxx:457
 AliJetBkg.cxx:458
 AliJetBkg.cxx:459
 AliJetBkg.cxx:460
 AliJetBkg.cxx:461
 AliJetBkg.cxx:462
 AliJetBkg.cxx:463
 AliJetBkg.cxx:464
 AliJetBkg.cxx:465
 AliJetBkg.cxx:466
 AliJetBkg.cxx:467
 AliJetBkg.cxx:468
 AliJetBkg.cxx:469
 AliJetBkg.cxx:470
 AliJetBkg.cxx:471
 AliJetBkg.cxx:472
 AliJetBkg.cxx:473
 AliJetBkg.cxx:474
 AliJetBkg.cxx:475
 AliJetBkg.cxx:476
 AliJetBkg.cxx:477
 AliJetBkg.cxx:478
 AliJetBkg.cxx:479
 AliJetBkg.cxx:480
 AliJetBkg.cxx:481
 AliJetBkg.cxx:482
 AliJetBkg.cxx:483
 AliJetBkg.cxx:484
 AliJetBkg.cxx:485
 AliJetBkg.cxx:486
 AliJetBkg.cxx:487
 AliJetBkg.cxx:488
 AliJetBkg.cxx:489
 AliJetBkg.cxx:490
 AliJetBkg.cxx:491
 AliJetBkg.cxx:492
 AliJetBkg.cxx:493
 AliJetBkg.cxx:494
 AliJetBkg.cxx:495
 AliJetBkg.cxx:496
 AliJetBkg.cxx:497
 AliJetBkg.cxx:498
 AliJetBkg.cxx:499
 AliJetBkg.cxx:500
 AliJetBkg.cxx:501
 AliJetBkg.cxx:502
 AliJetBkg.cxx:503
 AliJetBkg.cxx:504
 AliJetBkg.cxx:505
 AliJetBkg.cxx:506
 AliJetBkg.cxx:507
 AliJetBkg.cxx:508
 AliJetBkg.cxx:509
 AliJetBkg.cxx:510
 AliJetBkg.cxx:511
 AliJetBkg.cxx:512
 AliJetBkg.cxx:513
 AliJetBkg.cxx:514
 AliJetBkg.cxx:515
 AliJetBkg.cxx:516
 AliJetBkg.cxx:517
 AliJetBkg.cxx:518
 AliJetBkg.cxx:519
 AliJetBkg.cxx:520
 AliJetBkg.cxx:521
 AliJetBkg.cxx:522
 AliJetBkg.cxx:523
 AliJetBkg.cxx:524
 AliJetBkg.cxx:525
 AliJetBkg.cxx:526
 AliJetBkg.cxx:527
 AliJetBkg.cxx:528
 AliJetBkg.cxx:529
 AliJetBkg.cxx:530
 AliJetBkg.cxx:531
 AliJetBkg.cxx:532
 AliJetBkg.cxx:533
 AliJetBkg.cxx:534
 AliJetBkg.cxx:535
 AliJetBkg.cxx:536
 AliJetBkg.cxx:537
 AliJetBkg.cxx:538
 AliJetBkg.cxx:539
 AliJetBkg.cxx:540
 AliJetBkg.cxx:541
 AliJetBkg.cxx:542
 AliJetBkg.cxx:543
 AliJetBkg.cxx:544
 AliJetBkg.cxx:545
 AliJetBkg.cxx:546
 AliJetBkg.cxx:547
 AliJetBkg.cxx:548
 AliJetBkg.cxx:549
 AliJetBkg.cxx:550
 AliJetBkg.cxx:551
 AliJetBkg.cxx:552
 AliJetBkg.cxx:553
 AliJetBkg.cxx:554
 AliJetBkg.cxx:555
 AliJetBkg.cxx:556
 AliJetBkg.cxx:557
 AliJetBkg.cxx:558
 AliJetBkg.cxx:559
 AliJetBkg.cxx:560
 AliJetBkg.cxx:561
 AliJetBkg.cxx:562
 AliJetBkg.cxx:563
 AliJetBkg.cxx:564
 AliJetBkg.cxx:565