]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - EMCAL/AliEMCALJetFinder.cxx
MC-dependent part of AliRun extracted in AliMC (F.Carminati)
[u/mrichter/AliRoot.git] / EMCAL / AliEMCALJetFinder.cxx
index 9e60107c2c5cdf155c2f126cc103f5ae4dccf726..eab4ee982b782dff8f25025a88ccd9cdd090d8bd 100644 (file)
  * provided "as is" without express or implied warranty.                  *
  **************************************************************************/
 
-/*
-$Log$
-Revision 1.37  2003/01/23 11:50:04  morsch
-- option for adding energy of all particles (ich == 2)
-- provisions for principle component analysis
-(M. Horner)
-
-Revision 1.36  2003/01/15 19:05:44  morsch
-Updated selection in ReadFromTracks()
-
-Revision 1.35  2003/01/15 04:59:38  morsch
-- TPC eff. from AliEMCALFast
-- Correction in PropagatePhi()
-
-Revision 1.34  2003/01/14 10:50:18  alibrary
-Cleanup of STEER coding conventions
-
-Revision 1.33  2003/01/10 10:48:19  morsch
-SetSamplingFraction() removed from constructor.
-
-Revision 1.32  2003/01/10 10:26:40  morsch
-Sampling fraction initialized from geometry class.
-
-Revision 1.31  2003/01/08 17:13:41  schutz
-added the HCAL section
-
-Revision 1.30  2002/12/09 16:26:28  morsch
-- Nummber of particles per jet increased to 1000
-- Warning removed.
-
-Revision 1.29  2002/11/21 17:01:40  alibrary
-Removing AliMCProcess and AliMC
-
-Revision 1.28  2002/11/20 14:13:16  morsch
-- FindChargedJets() added.
-- Destructor corrected.
-- Geometry cuts taken from AliEMCALGeometry.
-
-Revision 1.27  2002/11/15 17:39:10  morsch
-GetPythiaParticleName removed.
-
-Revision 1.26  2002/10/14 14:55:35  hristov
-Merging the VirtualMC branch to the main development branch (HEAD)
-
-Revision 1.20.4.3  2002/10/10 15:07:49  hristov
-Updating VirtualMC to v3-09-02
-
-Revision 1.25  2002/09/13 10:24:57  morsch
-idem
-
-Revision 1.24  2002/09/13 10:21:13  morsch
-No cast to AliMagFCM.
-
-Revision 1.23  2002/06/27 09:24:26  morsch
-Uncomment the TH1::AddDirectory statement.
-
-Revision 1.22  2002/05/22 13:48:43  morsch
-Pdg code added to track list.
-
-Revision 1.21  2002/04/27 07:43:08  morsch
-Calculation of fDphi corrected (Renan Cabrera)
-
-Revision 1.20  2002/03/12 01:06:23  pavlinov
-Testin output from generator
-
-Revision 1.19  2002/02/27 00:46:33  pavlinov
-Added method FillFromParticles()
-
-Revision 1.18  2002/02/21 08:48:59  morsch
-Correction in FillFromHitFlaggedTrack. (Jennifer Klay)
-
-Revision 1.17  2002/02/14 08:52:53  morsch
-Major updates by Aleksei Pavlinov:
-FillFromPartons, FillFromTracks, jetfinder configuration.
-
-Revision 1.16  2002/02/08 11:43:05  morsch
-SetOutputFileName(..) allows to specify an output file to which the
-reconstructed jets are written. If not set output goes to input file.
-Attention call Init() before processing.
-
-Revision 1.15  2002/02/02 08:37:18  morsch
-Formula for rB corrected.
-
-Revision 1.14  2002/02/01 08:55:30  morsch
-Fill map with Et and pT.
-
-Revision 1.13  2002/01/31 09:37:36  morsch
-Geometry parameters in constructor and call of SetCellSize()
-
-Revision 1.12  2002/01/23 13:40:23  morsch
-Fastidious debug print statement removed.
-
-Revision 1.11  2002/01/22 17:25:47  morsch
-Some corrections for event mixing and bg event handling.
-
-Revision 1.10  2002/01/22 10:31:44  morsch
-Some correction for bg mixing.
-
-Revision 1.9  2002/01/21 16:28:42  morsch
-Correct sign of dphi.
-
-Revision 1.8  2002/01/21 16:05:31  morsch
-- different phi-bin for hadron correction
-- provisions for background mixing.
-
-Revision 1.7  2002/01/21 15:47:18  morsch
-Bending radius correctly in cm.
-
-Revision 1.6  2002/01/21 12:53:50  morsch
-authors
-
-Revision 1.5  2002/01/21 12:47:47  morsch
-Possibility to include K0long and neutrons.
-
-Revision 1.4  2002/01/21 11:03:21  morsch
-Phi propagation introduced in FillFromTracks.
-
-Revision 1.3  2002/01/18 05:07:56  morsch
-- hadronic correction
-- filling of digits
-- track selection upon EMCAL information
-
-*/
+/* $Id$ */
 
 //*-- Authors: Andreas Morsch   (CERN)
 //*            J.L. Klay        (LBL)
@@ -161,6 +39,7 @@ Revision 1.3  2002/01/18 05:07:56  morsch
 #include <TROOT.h>
 #include <TStyle.h>
 #include <TTree.h>
+#include <TBrowser.h>
 
 // From AliRoot ...
 #include "AliEMCAL.h"
@@ -177,8 +56,10 @@ Revision 1.3  2002/01/18 05:07:56  morsch
 #include "AliMagFCM.h"
 #include "AliRun.h"
 #include "AliGenerator.h"
+#include "AliEMCALGetter.h"
 // Interface to FORTRAN
 #include "Ecommon.h"
+#include "AliMC.h"
 
 
 ClassImp(AliEMCALJetFinder)
@@ -345,9 +226,11 @@ void AliEMCALJetFinder::Init()
 //
 //
 //  Geometry 
-    AliEMCAL* pEMCAL = (AliEMCAL*) gAlice->GetModule("EMCAL");
-    AliEMCALGeometry* geom = 
-    AliEMCALGeometry::GetInstance(pEMCAL->GetTitle(), "");
+  //AliEMCAL* pEMCAL = (AliEMCAL*) gAlice->GetModule("EMCAL");
+  //  AliEMCALGeometry* geom = 
+  //  AliEMCALGeometry::GetInstance(pEMCAL->GetTitle(), "");
+  AliEMCALGetter * gime = AliEMCALGetter::Instance() ; 
+  AliEMCALGeometry* geom = gime->EMCALGeometry() ;  
 
 //    SetSamplingFraction(geom->GetSampling());
 
@@ -668,43 +551,52 @@ void AliEMCALJetFinder::WriteJets()
     }
 
 // I/O
+    AliEMCALGetter * gime = AliEMCALGetter::Instance() ; 
     if (!fOutFileName) {
 //
 // output written to input file
 //
-       AliEMCAL* pEMCAL = (AliEMCAL* )gAlice->GetModule("EMCAL");
-       TTree* pK = gAlice->TreeK();
-       file = (pK->GetCurrentFile())->GetName();
+      AliEMCAL* pEMCAL = (AliEMCAL* )gAlice->GetModule("EMCAL");
+      TTree* pK = gAlice->TreeK();
+      file = (pK->GetCurrentFile())->GetName();
+      TBranch * jetBranch ;  
        if (fDebug > 1)
            printf("Make Branch - TreeR address %p %p\n",gAlice->TreeR(), pEMCAL);
-       if (fJets && gAlice->TreeR()) {
-           pEMCAL->MakeBranchInTree(gAlice->TreeR(), 
-                                    "EMCALJets", 
-                                    &fJets, 
-                                    kBufferSize, 
-                                    file);
+       //if (fJets && gAlice->TreeR()) {
+       if (fJets && gime->TreeR()) {
+         // pEMCAL->MakeBranchInTree(gAlice->TreeR(), 
+          jetBranch = gime->TreeR()->Branch("EMCALJets", &fJets, kBufferSize, 0) ; 
+         //pEMCAL->MakeBranchInTree(gime->TreeR(), 
+         //                         "EMCALJets", 
+         //                         &fJets, 
+         //                         kBufferSize, 
+         //                         file);
+         
+         //Int_t nev = gAlice->GetHeader()->GetEvent();
+         //gAlice->TreeR()->Fill();
+         jetBranch->Fill();
+         //char hname[30];
+         //sprintf(hname,"TreeR%d", nev);
+         //gAlice->TreeR()->Write(hname);
+         //gAlice->TreeR()->Reset();
+         gime->WriteRecPoints("OVERWRITE");
        }
-       Int_t nev = gAlice->GetHeader()->GetEvent();
-       gAlice->TreeR()->Fill();
-       char hname[30];
-       sprintf(hname,"TreeR%d", nev);
-       gAlice->TreeR()->Write(hname);
-       gAlice->TreeR()->Reset();
     } else {
 //
 // Output written to user specified output file
 //
-       TTree* pK = gAlice->TreeK();
-       fInFile  = pK->GetCurrentFile();
-
-       fOutFile->cd();
-       char hname[30];
-       sprintf(hname,"TreeR%d", fEvent);
-       TTree* treeJ = new TTree(hname, "EMCALJets");
-       treeJ->Branch("EMCALJets", &fJets, kBufferSize);
-       treeJ->Fill();
-       treeJ->Write(hname);
-       fInFile->cd();
+      //TTree* pK = gAlice->TreeK();
+      TTree* pK = gAlice->TreeK();
+      fInFile  = pK->GetCurrentFile();
+
+      fOutFile->cd();
+      char hname[30];
+      sprintf(hname,"TreeR%d", fEvent);
+      TTree* treeJ = new TTree(hname, "EMCALJets");
+      treeJ->Branch("EMCALJets", &fJets, kBufferSize);
+      treeJ->Fill();
+      treeJ->Write(hname);
+      fInFile->cd();
     }
     ResetJets();        
 }
@@ -712,15 +604,15 @@ void AliEMCALJetFinder::WriteJets()
 void AliEMCALJetFinder::BookLego()
 {
 //
-//  Book histo for discretisation
+//  Book histo for discretization
 //
 
 //
 //  Don't add histos to the current directory
     if(fDebug) printf("\n AliEMCALJetFinder::BookLego() \n");
  
-    TH2::AddDirectory(0);
-    TH1::AddDirectory(0);
+    //    TH2::AddDirectory(0); // hists wil be put to the list from gROOT
+    //    TH1::AddDirectory(0);
     gROOT->cd();
 //    
 //  Signal map
@@ -762,8 +654,15 @@ void AliEMCALJetFinder::BookLego()
     fhChPartMultInTpc = new TH1F("hChPartMultInTpc",
     "Charge partilcle multiplicity in |%eta|<0.9", 2000, 0, 20000);
 
-            //! first canvas for drawing
-    fHistsList=AliEMCALJetMicroDst::MoveHistsToList("Hists from AliEMCALJetFinder", kTRUE);
+    fhSinTheta = new TH1F("fhSinTheta","sin(theta)", fNbinEta, fEtaMin, fEtaMax);
+    TAxis *xax = fhSinTheta->GetXaxis();
+    for(Int_t i=1; i<=fNbinEta; i++) {
+      Double_t eta = xax->GetBinCenter(i);
+      fhSinTheta->Fill(eta, 1./TMath::CosH(eta)); // cosh(eta) = 1./sin(theta)
+    }
+    
+    //! first canvas for drawing
+    fHistsList=AliEMCALJetMicroDst::MoveHistsToList("Hists from AliEMCALJetFinder", kFALSE);
 }
 
 void AliEMCALJetFinder::DumpLego()
@@ -854,7 +753,8 @@ void AliEMCALJetFinder::FillFromTracks(Int_t flag, Int_t ich)
 // Access particle information    
     Int_t npart = (gAlice->GetHeader())->GetNprimary();
     Int_t ntr   = (gAlice->GetHeader())->GetNtrack();
-    printf(" : #primary particles %i # tracks %i \n", npart, ntr);
+    printf(" : #primary particles %i # tracks %i : (before) Sum.Et %f\n", 
+    npart, ntr, fLego->Integral());
  
 // Create track list
 //
@@ -881,7 +781,7 @@ void AliEMCALJetFinder::FillFromTracks(Int_t flag, Int_t ich)
 
     // this is for Pythia ??
     for (Int_t part = 0; part < npart; part++) {
-       TParticle *MPart = gAlice->Particle(part);
+       TParticle *MPart = gAlice->GetMCApp()->Particle(part);
        Int_t mpart   = MPart->GetPdgCode();
        Int_t child1  = MPart->GetFirstDaughter();
        Float_t pT    = MPart->Pt();
@@ -890,7 +790,7 @@ void AliEMCALJetFinder::FillFromTracks(Int_t flag, Int_t ich)
        Float_t eta   = -100.;
        if(pT > 0.001) eta   = MPart->Eta();
        Float_t theta = MPart->Theta(); 
-        if  (fDebug>=2) { 
+        if  (fDebug>=2 && MPart->GetStatusCode()==1) { 
           printf("ind %7i part %7i -> child1 %5i child2 %5i Status %5i\n", 
            part, mpart, child1, MPart->GetLastDaughter(), MPart->GetStatusCode());
         }
@@ -1040,7 +940,8 @@ void AliEMCALJetFinder::FillFromTracks(Int_t flag, Int_t ich)
        if (etc > fMinCellEt) etsum += etc;
     }
     
-    printf("\nFillFromTracks: Sum above threshold %f %f \n \n", fMinCellEt, etsum);
+    printf("FillFromTracks: Sum above threshold %f -> %f (%f)\n", fMinCellEt, etsum, fLego->Integral());
+    printf("                Track selected(fNtS) %i \n", fNtS);
 
     DumpLego();
 }
@@ -1068,13 +969,14 @@ void AliEMCALJetFinder::FillFromHits(Int_t flag)
 //
 // Access hit information    
     AliEMCAL* pEMCAL = (AliEMCAL*) gAlice->GetModule("EMCAL");
-    TTree *treeH = gAlice->TreeH();
+    AliEMCALGetter * gime = AliEMCALGetter::Instance() ; 
+    TTree *treeH = gime->TreeH();
     Int_t ntracks = (Int_t) treeH->GetEntries();
 //
 //   Loop over tracks
 //
     Int_t nbytes = 0;
-    Double_t etH = 0.0;
+    //    Double_t etH = 0.0;
 
     for (Int_t track=0; track<ntracks;track++) {
        gAlice->ResetHits();
@@ -1096,27 +998,34 @@ void AliEMCALJetFinder::FillFromHits(Int_t flag)
            Float_t eta    =   -TMath::Log(TMath::Tan(theta/2.));
            Float_t phi    =    TMath::ATan2(y,x);
 
-           if (fDebug >= 11) printf("\n Hit %f %f %f %f %f %f %f %f", x, y, z, eloss, r, eta, phi, fSamplingF);
-//         printf("\n Hit %f %f %f %f", x, y, z, eloss);
+           if (fDebug >= 21) printf("\n Hit %f %f %f %f %f %f %f %f", x, y, z, eloss, r, eta, phi, fSamplingF);
            
-            etH = fSamplingF*eloss*TMath::Sin(theta);
-           fLego->Fill(eta, phi, etH);
-           //      fhLegoEMCAL->Fill(eta, phi, etH);
+           //            etH = fSamplingF*eloss*TMath::Sin(theta);
+           fLego->Fill(eta, phi, eloss);
        } // Hit Loop
     } // Track Loop
-    // copy content of fLego to fhLegoEMCAL (fLego and fhLegoEMCAL are identical)
-    Float_t etsum = 0;
-    
-    for(Int_t i=0; i<fLego->GetSize(); i++) {
-       (*fhLegoEMCAL)[i] = (*fLego)[i];
-       Float_t etc =  (*fLego)[i];
-       if (etc > fMinCellEt) etsum += etc;
+
+    // Transition from deposit energy to eT (eT = de*SF*sin(theta))
+    Double_t etsum = 0;    
+    for(Int_t i=1; i<=fLego->GetNbinsX(); i++){   // eta
+       Double_t sinTheta = fhSinTheta->GetBinContent(i), eT=0;
+       for(Int_t j=1; j<=fLego->GetNbinsY(); j++){ // phi
+         eT = fLego->GetBinContent(i,j)*fSamplingF*sinTheta;
+         fLego->SetBinContent(i,j,eT);
+    // copy content of fLego to fhLegoEMCAL (fLego and fhLegoEMCAL are identical)    
+          fhLegoEMCAL->SetBinContent(i,j,eT);
+         if (eT > fMinCellEt) etsum += eT;
+       }
     }
+
+    //    for(Int_t i=0; i<fLego->GetSize(); i++) {
+    // (*fhLegoEMCAL)[i] = (*fLego)[i];
+    // Float_t etc =  (*fLego)[i];
+    // if (etc > fMinCellEt) etsum += etc;
+    //    }
     
-    printf("\nFillFromHits: Sum above threshold %f %f \n \n", fMinCellEt, etsum);
-    
+    printf("FillFromHits: Sum above threshold %f -> %f \n ", fMinCellEt, etsum);
     //    DumpLego(); ??
-    
 }
 
 void AliEMCALJetFinder::FillFromDigits(Int_t flag)
@@ -1129,7 +1038,7 @@ void AliEMCALJetFinder::FillFromDigits(Int_t flag)
     
     if (!fLego) BookLego();
     if (flag == 0) fLego->Reset();
-    Int_t nbytes;
+    Int_t nbytes=0;
     
 
 //
@@ -1160,10 +1069,10 @@ void AliEMCALJetFinder::FillFromDigits(Int_t flag)
 //  Get digitizer parameters
     Float_t preADCped = digr->GetPREpedestal();
     Float_t preADCcha = digr->GetPREchannel();
-    Float_t ecADCped  = digr->GetECpedestal();
-    Float_t ecADCcha  = digr->GetECchannel();
-    Float_t hcADCped  = digr->GetHCpedestal();
-    Float_t hcADCcha  = digr->GetHCchannel();
+    Float_t ecADCped  = digr->GetECApedestal();
+    Float_t ecADCcha  = digr->GetECAchannel();
+    Float_t hcADCped  = digr->GetHCApedestal();
+    Float_t hcADCcha  = digr->GetHCAchannel();
 
     AliEMCAL* pEMCAL = (AliEMCAL*) gAlice->GetModule("EMCAL");
     AliEMCALGeometry* geom = 
@@ -1187,11 +1096,11 @@ void AliEMCALJetFinder::FillFromDigits(Int_t flag)
          pedestal = preADCped;
          channel  = preADCcha; 
        } 
-       else if (geom->IsInECAL(sdg->GetId()))  {
+       else if (geom->IsInECA(sdg->GetId()))  {
          pedestal = ecADCped;
          channel  = ecADCcha; 
        }
-       else if (geom->IsInHCAL(sdg->GetId()))  {
+       else if (geom->IsInHCA(sdg->GetId()))  {
          pedestal = hcADCped;
          channel  = hcADCcha; 
        }
@@ -1249,7 +1158,7 @@ void AliEMCALJetFinder::FillFromHitFlaggedTracks(Int_t flag)
     fNtS  = 0;
     
     for (Int_t track = 0; track < ntracks; track++) {
-         TParticle *MPart = gAlice->Particle(track);
+         TParticle *MPart = gAlice->GetMCApp()->Particle(track);
          Float_t pT    = MPart->Pt();
          Float_t phi   = MPart->Phi();
          Float_t eta   = MPart->Eta();
@@ -1299,7 +1208,7 @@ void AliEMCALJetFinder::FillFromParticles()
 
        fTrackList[part] = 0;
 
-       MPart   = gAlice->Particle(part);
+       MPart   = gAlice->GetMCApp()->Particle(part);
        mpart   = MPart->GetPdgCode();
        child1  = MPart->GetFirstDaughter();
        child2  = MPart->GetLastDaughter();
@@ -1383,7 +1292,7 @@ void AliEMCALJetFinder::FillFromPartons()
 //  Go through the partons
     Int_t statusCode=0;
     for (Int_t part = 8; part < npart; part++) {
-       TParticle *MPart = gAlice->Particle(part);
+       TParticle *MPart = gAlice->GetMCApp()->Particle(part);
        Int_t mpart   = MPart->GetPdgCode();
        //      Int_t child1  = MPart->GetFirstDaughter();
        Float_t pT    = MPart->Pt();
@@ -1434,8 +1343,10 @@ void AliEMCALJetFinder::BuildTrackFlagTable() {
        fTrackList[i] = 0;
     }
     
-    TTree *treeH = gAlice->TreeH();
-    Int_t ntracks = (Int_t) treeH->GetEntries();
+    AliEMCALGetter * gime = AliEMCALGetter::Instance() ; 
+    // TTree *treeH = gAlice->TreeH();
+    TTree *treeH = gime->TreeH();
+   Int_t ntracks = (Int_t) treeH->GetEntries();
 //
 //   Loop over tracks
 //
@@ -1457,7 +1368,7 @@ void AliEMCALJetFinder::BuildTrackFlagTable() {
                Int_t   idprim =    mHit->GetPrimary();  // primary particle
                
                //Determine the origin point of this particle - it made a hit in the EMCAL
-               TParticle         *trkPart = gAlice->Particle(iTrk);
+               TParticle         *trkPart = gAlice->GetMCApp()->Particle(iTrk);
                TParticlePDG  *trkPdg  = trkPart->GetPDG();
                Int_t      trkCode = trkPart->GetPdgCode();
                Double_t           trkChg;
@@ -1474,7 +1385,7 @@ void AliEMCALJetFinder::BuildTrackFlagTable() {
                //Loop through the ancestry of the EMCAL entrance particles
                Int_t ancestor = trkPart->GetFirstMother();  //Get track's Mother
                while (ancestor != -1) {
-                   TParticle     *ancPart = gAlice->Particle(ancestor);  //get particle info on ancestor
+                   TParticle     *ancPart = gAlice->GetMCApp()->Particle(ancestor);  //get particle info on ancestor
                    TParticlePDG  *ancPdg  = ancPart->GetPDG();
                    Int_t             ancCode = ancPart->GetPdgCode();
                    Double_t       ancChg;
@@ -1491,7 +1402,7 @@ void AliEMCALJetFinder::BuildTrackFlagTable() {
                }
                
                //Determine the origin point of the primary particle associated with the hit
-               TParticle     *primPart = gAlice->Particle(idprim);
+               TParticle     *primPart = gAlice->GetMCApp()->Particle(idprim);
                TParticlePDG  *primPdg  = primPart->GetPDG();
                Int_t      primCode = primPart->GetPdgCode();
                Double_t           primChg;
@@ -1530,14 +1441,14 @@ Int_t AliEMCALJetFinder
 
 
 
-void AliEMCALJetFinder::SaveBackgroundEvent()
+void AliEMCALJetFinder::SaveBackgroundEvent(Char_t *name)
 {
-// Saves the eta-phi lego and the tracklist
+// Saves the eta-phi lego and the tracklist and name of file with BG events
 //
     if (fLegoB) {
        fLegoB->Reset();
        (*fLegoB) = (*fLegoB) + (*fLego); 
-       if(fDebug) 
+       //       if(fDebug) 
        printf("\n AliEMCALJetFinder::SaveBackgroundEvent() (fLegoB) %f = %f(fLego) \n", 
        fLegoB->Integral(), fLego->Integral()); 
     }
@@ -1566,7 +1477,20 @@ void AliEMCALJetFinder::SaveBackgroundEvent()
        fNtB++;
     }
     fBackground = 1;
-    printf(" fNtB %i => fNtS %i #particles %i \n", fNtB, fNtS, fNt); 
+    printf(" fNtB %i => fNtS %i #particles %i \n", fNtB, fNtS, fNt);
+
+    if(strlen(name) == 0) {
+       TSeqCollection *li = gROOT->GetListOfFiles();
+       TString nf;
+       for(Int_t i=0; i<li->GetSize(); i++) {
+          nf = ((TFile*)li->At(i))->GetName();
+          if(nf.Contains("backgorund")) break;
+       }
+       fBGFileName = nf;
+    } else {
+       fBGFileName = name;
+    }
+    printf("BG file name is \n %s\n", fBGFileName.Data());
 }
 
 void AliEMCALJetFinder::InitFromBackground()
@@ -1579,7 +1503,7 @@ void AliEMCALJetFinder::InitFromBackground()
        fLego->Reset(); 
        (*fLego) = (*fLego) + (*fLegoB);
        if(fDebug) 
-           printf("\n AliEMCALJetFinder::SaveBackgroundEvent() (fLego) %f = %f(fLegoB) \n", 
+           printf("\n AliEMCALJetFinder::InitBackgroundEvent() (fLego) %f = %f(fLegoB) \n", 
                   fLego->Integral(), fLegoB->Integral()); 
     } else {
        printf(" => fLego undefined \n");
@@ -1742,10 +1666,13 @@ void hf1(Int_t& id, Float_t& x, Float_t& wgt)
 }
 
 void AliEMCALJetFinder::DrawLego(Char_t *opt) 
-{fLego->Draw(opt);}
+{if(fLego) fLego->Draw(opt);}
+
+void  AliEMCALJetFinder::DrawLegoBackground(Char_t *opt) 
+{if(fLegoB) fLegoB->Draw(opt);}
 
 void AliEMCALJetFinder::DrawLegoEMCAL(Char_t *opt) 
-{fhLegoEMCAL->Draw(opt);}
+{if(fhLegoEMCAL) fhLegoEMCAL->Draw(opt);}
 
 void AliEMCALJetFinder::DrawHistsForTuning(Int_t mode)
 { 
@@ -1796,6 +1723,7 @@ void AliEMCALJetFinder::PrintParameters(Int_t mode)
     if(file==0) file = stdout; 
   }
   fprintf(file,"====   Filling lego   ==== \n");
+  fprintf(file,"Sampling fraction %6.3f  ", fSamplingF);
   fprintf(file,"Smearing          %6i  ", fSmear);
   fprintf(file,"Efficiency        %6i\n", fEffic);
   fprintf(file,"Hadr.Correct.     %6i  ", fHCorrection);
@@ -1813,6 +1741,8 @@ void AliEMCALJetFinder::PrintParameters(Int_t mode)
     fprintf(file,"%% change for BG %6.4f\n", fPrecBg);
   } else
   fprintf(file,"==== No Bg subtraction     ==== \n");
+  // 
+  printf("BG file name is %s \n", fBGFileName.Data());
   if(file != stdout) fclose(file); 
 }
 
@@ -2024,3 +1954,33 @@ void AliEMCALJetFinder::FindChargedJet()
     if (fWrite) WriteJets();
     fEvent++;
 }
+// 16-jan-2003 - just for convenience
+void AliEMCALJetFinder::Browse(TBrowser* b)
+{
+   if(fHistsList)  b->Add((TObject*)fHistsList);
+}
+
+Bool_t AliEMCALJetFinder::IsFolder() const
+{
+  if(fHistsList) return kTRUE;
+  else           return kFALSE;
+}
+
+const Char_t* AliEMCALJetFinder::GetNameOfVariant()
+{// generate the literal string with info about jet finder
+  Char_t name[200];
+  sprintf(name, "jF_R%3.2fMinCell%4.1fPtCut%4.1fEtSeed%4.1fMinEt%4.1fBGSubtr%iSF%4.1f",
+         fConeRadius,fMinCellEt,fPtCut,fEtSeed,fMinJetEt, fMode, fSamplingF);
+  TString nt(name);
+  nt.ReplaceAll(" ","");
+  if(fBGFileName.Length()) {
+     Int_t i1 = fBGFileName.Index("kBackground");
+     Int_t i2 = fBGFileName.Index("/0000") - 1;
+     if(i1>=0 && i2>=0) {
+        TString bg(fBGFileName(i1,i2-i1+1));
+        nt += bg;
+     }
+  }
+  printf("<I> Name of variant %s \n", nt.Data());
+  return nt.Data();
+}