/************************************************************************** * 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. * **************************************************************************/ #include #include #include #include #include #include #include #include #include "AliJetHeader.h" #include "AliJetReader.h" #include "AliJetReaderHeader.h" #include "AliFastJetFinder.h" #include "AliFastJetHeaderV1.h" #include "AliJetReaderHeader.h" #include "AliJetReader.h" #include "AliJetUnitArray.h" #include "AliFastJetInput.h" #include "AliESDEvent.h" #include "fastjet/PseudoJet.hh" #include "fastjet/ClusterSequenceArea.hh" #include "fastjet/AreaDefinition.hh" #include "fastjet/JetDefinition.hh" // get info on how fastjet was configured #include "fastjet/config.h" #ifdef ENABLE_PLUGIN_SISCONE #include "fastjet/SISConePlugin.hh" #endif #include // needed for internal io #include #include using namespace std; #include "AliJetBkg.h" ClassImp(AliJetBkg) //////////////////////////////////////////////////////////////////////// AliJetBkg::AliJetBkg(): TObject(), fReader(0), fHeader(0), fInputFJ(0) { // Default constructor } //______________________________________________________________________ AliJetBkg::AliJetBkg(const AliJetBkg& input): TObject(input), fReader(input.fReader), fHeader(input.fHeader), fInputFJ(input.fInputFJ) { // copy constructor } //______________________________________________________________________ AliJetBkg& AliJetBkg::operator=(const AliJetBkg& source){ // Assignment operator. this->~AliJetBkg(); new(this) AliJetBkg(source); return *this; } //___________________________________________________________________ Float_t AliJetBkg::BkgFastJet(){ cout<<"=============== AliJetBkg::BkgFastJet() =========== "< inputParticles=fInputFJ->GetInputParticles(); cout<<"printing inputParticles for BKG "<GetRparamBkg(); //Radius for background calculation Double_t rho=CalcRho(inputParticles,rParamBkg,"All"); cout<<"-------- rho (from all part)="< inputParticlesCharged=fInputFJ->GetInputParticlesCh(); cout<<"printing CHARGED inputParticles for BKG "<GetRparam(); Double_t rho=CalcRho(inputParticlesCharged,rParam,"Charg"); cout<<"-------- rho (from CHARGED part)="<GetESD()->GetNumberOfTracks(); Int_t nTracks= 0; TF1 fun("fun",BkgFunction,0,800,1); Double_t enTot=fun.Eval(nTracks); Double_t accEMCal=2*0.7*110./180*TMath::Pi();//2.68 area of EMCal return enTot/accEMCal; } ///////////////////////////////// Float_t AliJetBkg::BkgRemoveJetLeading(TClonesArray* fAODJets) { // Remove the particles of the // two largest jets using the track references stored in the AODJet from the estimation of new rho. cout<<"==============AliJetBkg::BkgRemoveJetLeading()============="<ClassName(),"AliJetESDReader"); if (fromAod) { refs = fReader->GetReferences(); } //Hard wired Calorimeter area (get it later from the AliJetReaderHeader.h) Double_t accEMCal=2*0.7*110./180*TMath::Pi();//2.68 area of EMCal Int_t nJ=fAODJets->GetEntries(); //this must be the # of jets... cout<<"nJets: "<GetUnitArray(); if(fUnit == 0) { cout << "Could not get the momentum array" << endl; return -99; } Int_t nIn = fUnit->GetEntries(); if(nIn == 0) { cout << "entries = 0 ; Event empty !!!" << endl ; return -99; } Float_t rhoback=0.0; Float_t jetarea1=0.0,jetarea2=0.0; Int_t particlejet1=-99; Int_t particlejet2=-99; TRefArray *refarray1 = 0; TRefArray *refarray2 = 0; Int_t nJettracks1 = 0, nJettracks2 = 0; Int_t acc=0,acc1=0; AliAODJet *jet1; AliAODJet *jet2; if(nJ==1){ jet1 = dynamic_cast(fAODJets->At(0)); jetarea1=jet1->EffectiveAreaCharged(); Float_t jetPhi=jet1->Phi(); Float_t jetEta=jet1->Eta(); if(jetPhi>1.396 && jetPhi<3.316 && jetEta>-0.7 && jetEta<0.7)acc=1; refarray1=jet1->GetRefTracks(); nJettracks1=refarray1->GetEntries(); cout<<"nJ = 1, acc="<0) rhoback=sumPt/areasum; else rhoback=0.; cout<<" rho from leading jet paricle array removed "<GetRparam(); //Hard wired Calorimeter area (get it later from the AliJetReaderHeader.h) Double_t accEMCal=2*0.7*110./180*TMath::Pi();//2.68 area of EMCal Int_t nJ=fAODJets->GetEntries(); //this must be the # of jets... cout<<"nJets: "<GetUnitArray(); if(fUnit == 0) { cout << "Could not get the momentum array" << endl; return -99; } Int_t nIn = fUnit->GetEntries(); if(nIn == 0) { cout << "entries = 0 ; Event empty !!!" << endl ; return -99; } // Information extracted from fUnitArray // load input vectors and calculate total energy in array Float_t pt,eta,phi; Float_t jeteta = 0,jetphi = 0,jeteta1 = 0, jetphi1 = 0; Float_t rhoback=0.0; Float_t ptallback=0.0; //particles without the jet Float_t restarea=accEMCal; //initial area set Bool_t acc=0; Bool_t acc1=0; Float_t rCone=0.4; if(nJ==1) { AliAODJet *jettmp = dynamic_cast(fAODJets->At(0)); jeteta=jettmp->Eta(); jetphi=jettmp->Phi(); acc=EmcalAcceptance(jeteta,jetphi,rCone); if(acc==1)restarea= accEMCal-TMath::Pi()*rc*rc; cout<<" acc "<=2) { AliAODJet *jettmp = dynamic_cast(fAODJets->At(0)); AliAODJet *jettmp1 = dynamic_cast(fAODJets->At(1)); jeteta=jettmp->Eta(); jetphi=jettmp->Phi(); jeteta1=jettmp1->Eta(); jetphi1=jettmp1->Phi(); acc=EmcalAcceptance(jeteta,jetphi,rCone); acc1=EmcalAcceptance(jeteta1,jetphi1,rCone); if(acc1==1 && acc==1)restarea= accEMCal-2*TMath::Pi()*rc*rc; if(acc1==1 && acc==0)restarea= accEMCal-TMath::Pi()*rc*rc; if(acc1==0 && acc==1)restarea= accEMCal-TMath::Pi()*rc*rc; cout<<" acc1="< inputParticles,Double_t rParamBkg,TString method){ //calculate rho using the fastjet method AliFastJetHeaderV1 *header = (AliFastJetHeaderV1*)fHeader; Bool_t debug = header->GetDebug(); // debug option fastjet::Strategy strategy = header->GetStrategy(); fastjet::RecombinationScheme recombScheme = header->GetRecombScheme(); fastjet::JetAlgorithm algorithm = header->GetAlgorithm(); fastjet::JetDefinition jetDef(algorithm, rParamBkg, recombScheme, strategy); // create an object that specifies how we to define the area fastjet::AreaDefinition areaDef; double ghostEtamax = header->GetGhostEtaMax(); double ghostArea = header->GetGhostArea(); int activeAreaRepeats = header->GetActiveAreaRepeats(); // now create the object that holds info about ghosts if (method.Contains("Charg"))ghostEtamax=0.9; fastjet::GhostedAreaSpec ghost_spec(ghostEtamax, activeAreaRepeats, ghostArea); // and from that get an area definition fastjet::AreaType areaType = header->GetAreaType(); areaDef = fastjet::AreaDefinition(areaType,ghost_spec); cout<<"rParamBkg="<SetComment(comment); if(debug){ cout << "--------------------------------------------------------" << endl; cout << comment << endl; cout << "--------------------------------------------------------" << endl; } double ptmin = header->GetPtMin(); vector inclusiveJets = clust_seq.inclusive_jets(ptmin); vector jets = sorted_by_pt(inclusiveJets); cout<<"# of BKG jets = "<GetPhiMax(); //double phiMin = header->GetPhiMin(); double phiMin = 0, phiMax = 0, rapMin = 0, rapMax = 0; if (method.Contains("All")){ phiMin = 80.*TMath::Pi()/180+rParamBkg; phiMax = 190.*TMath::Pi()/180-rParamBkg; //phiMin = 0; //phiMax = 2*TMath::Pi(); } if (method.Contains("Charg")){ phiMin = 0; phiMax = 2*TMath::Pi(); } rapMax = ghostEtamax - rParamBkg; rapMin = - ghostEtamax + rParamBkg; fastjet::RangeDefinition range(rapMin, rapMax, phiMin, phiMax); Double_t rho=clust_seq.median_pt_per_unit_area(range); // double median, sigma, meanArea; //clust_seq.get_median_rho_and_sigma(inclusiveJets, range, false, median, sigma, meanArea, true); //fastjet::ActiveAreaSpec area_spec(ghostEtamax,activeAreaRepeats,ghostArea); // fastjet::ClusterSequenceActiveArea clust_seq_bkg(inputParticles, jetDef,area_spec); cout<<"bkg in R="<