]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
embedding (salvatore)
authorloizides <loizides@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 4 Feb 2013 08:05:48 +0000 (08:05 +0000)
committerloizides <loizides@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 4 Feb 2013 08:05:48 +0000 (08:05 +0000)
PWGJE/EMCALJetTasks/AliEmcalJet.cxx
PWGJE/EMCALJetTasks/AliEmcalJet.h
PWGJE/EMCALJetTasks/AliJetModelBaseTask.cxx
PWGJE/EMCALJetTasks/AliJetResponseMaker.cxx
PWGJE/EMCALJetTasks/AliJetResponseMaker.h
PWGJE/EMCALJetTasks/macros/AddTaskJetRespPtHard.C
PWGJE/EMCALJetTasks/macros/AddTaskJetResponseMaker.C

index d03acebc2448d3f17df429d9dd6f4d2f0dd88f18..d3316b5c7acad9bcd3469b7646f428dbea3bd1e9 100644 (file)
@@ -31,6 +31,7 @@ AliEmcalJet::AliEmcalJet() :
   fClusterIDs(),
   fTrackIDs(),
   fMatched(2),
+  fMatchingType(0),
   fPtSub(0),
   fPtVectSub(0)
 {
@@ -65,6 +66,7 @@ AliEmcalJet::AliEmcalJet(Double_t px, Double_t py, Double_t pz) :
   fClusterIDs(), 
   fTrackIDs(),
   fMatched(2),
+  fMatchingType(0),
   fPtSub(0),
   fPtVectSub(0)
 {    
@@ -105,6 +107,7 @@ AliEmcalJet::AliEmcalJet(Double_t pt, Double_t eta, Double_t phi, Double_t m) :
   fClusterIDs(), 
   fTrackIDs(),
   fMatched(2),
+  fMatchingType(0),
   fPtSub(0),
   fPtVectSub(0)
 {
@@ -142,6 +145,7 @@ AliEmcalJet::AliEmcalJet(const AliEmcalJet &jet) :
   fClusterIDs(jet.fClusterIDs), 
   fTrackIDs(jet.fTrackIDs),
   fMatched(jet.fMatched),
+  fMatchingType(jet.fMatchingType),
   fPtSub(jet.fPtSub),
   fPtVectSub(jet.fPtVectSub)
 {
index fb50bb724134152cde3100ddec7a75a1c4303a33..89588acb0c371313cc66bdb85c8357de9c67099f 100644 (file)
@@ -51,8 +51,6 @@ class AliEmcalJet : public AliVParticle
   Double_t          AreaEmc()                    const { return fAreaEmc;                  }
   Bool_t            AxisInEmcal()                const { return fAxisInEmcal;              }
   Int_t             Compare(const TObject* obj)  const;
-  AliEmcalJet*      ClosestJet()                 const { return fClosestJets[0];           }
-  Double_t          ClosestJetDistance()         const { return fClosestJetsDist[0];       }
   Short_t           ClusterAt(Int_t idx)         const { return fClusterIDs.At(idx);       }
   AliVCluster      *ClusterAt(Int_t idx, TClonesArray *ca)  const { if (!ca) return 0; return dynamic_cast<AliVCluster*>(ca->At(ClusterAt(idx))); }
   UShort_t          GetNumberOfClusters()        const { return fClusterIDs.GetSize();     }
@@ -71,7 +69,6 @@ class AliEmcalJet : public AliVParticle
   UShort_t          N()                          const { return Nch()+Nn();                }
   Int_t             NEmc()                       const { return fNEmc;                     }
   Double_t          MCPt()                       const { return fMCPt;                     }
-  AliEmcalJet*      MatchedJet()                 const { return fMatched < 2 ? fClosestJets[fMatched] : 0; }
   Double_t          MaxClusterPt()               const { return MaxNeutralPt();            }
   Double_t          MaxTrackPt()                 const { return MaxChargedPt();            }
   Double_t          MaxPartPt()                  const { return fMaxCPt < fMaxNPt ? fMaxNPt : fMaxCPt;     }
@@ -79,8 +76,6 @@ class AliEmcalJet : public AliVParticle
   Double_t          PtSub()                      const { return fPtSub;                    }
   Double_t          PtSub(Double_t rho)          const { return fPt - fArea*rho;           }
   Double_t          PtSubVect(Double_t rho)      const;
-  AliEmcalJet*      SecondClosestJet()           const { return fClosestJets[1];           }
-  Double_t          SecondClosestJetDistance()   const { return fClosestJetsDist[1];       }
   Short_t           TrackAt(Int_t idx)           const { return fTrackIDs.At(idx);         }
   AliVParticle     *TrackAt(Int_t idx, TClonesArray *ta)   const { if (!ta) return 0; return dynamic_cast<AliVParticle*>(ta->At(TrackAt(idx))); } 
 
@@ -102,14 +97,22 @@ class AliEmcalJet : public AliVParticle
   void              SetNumberOfNeutrals(Int_t n)       { fNn = n;                          }
   void              SetMCPt(Double_t p)                { fMCPt = p;                        }
   void              SortConstituents();
-  void              SetClosestJet(AliEmcalJet *j, Double_t d)       { fClosestJets[0] = j; fClosestJetsDist[0] = d; }
-  void              SetSecondClosestJet(AliEmcalJet *j, Double_t d) { fClosestJets[1] = j; fClosestJetsDist[1] = d; }
-  void              SetMatchedToClosest()                           { fMatched   = 0;      }
-  void              SetMatchedToSecondClosest()                     { fMatched   = 1;      }
-  void              SetNEmc(Int_t n)                                { fNEmc      = n;      }
-  void              SetPtEmc(Double_t pt)                           { fPtEmc     = pt;     }
-  void              SetPtSub(Double_t ps)                           { fPtSub     = ps;     } 
-  void              SetPtSubVect(Double_t ps)                       { fPtVectSub = ps;     } 
+  void              SetNEmc(Int_t n)                                { fNEmc           = n;      }
+  void              SetPtEmc(Double_t pt)                           { fPtEmc          = pt;     }
+  void              SetPtSub(Double_t ps)                           { fPtSub          = ps;     } 
+  void              SetPtSubVect(Double_t ps)                       { fPtVectSub      = ps;     } 
+
+  // Matching
+  void              SetClosestJet(AliEmcalJet *j, Double_t d)       { fClosestJets[0] = j; fClosestJetsDist[0] = d     ; }
+  void              SetSecondClosestJet(AliEmcalJet *j, Double_t d) { fClosestJets[1] = j; fClosestJetsDist[1] = d    ; }
+  void              SetMatchedToClosest(UShort_t m)                 { fMatched        = 0; fMatchingType       = m    ; }
+  void              SetMatchedToSecondClosest(UShort_t m)           { fMatched        = 1; fMatchingType       = m    ; }
+  AliEmcalJet*      ClosestJet()                              const { return fClosestJets[0]                          ; }
+  Double_t          ClosestJetDistance()                      const { return fClosestJetsDist[0]                      ; }
+  AliEmcalJet*      SecondClosestJet()                        const { return fClosestJets[1]                          ; }
+  Double_t          SecondClosestJetDistance()                const { return fClosestJetsDist[1]                      ; }
+  AliEmcalJet*      MatchedJet()                              const { return fMatched < 2 ? fClosestJets[fMatched] : 0; }
+  UShort_t          GetMatchingType()                         const { return fMatchingType                            ; }
 
  protected:
   Double32_t        fPt;                  //[0,0,12]   pt 
@@ -134,6 +137,7 @@ class AliEmcalJet : public AliVParticle
   AliEmcalJet      *fClosestJets[2];      //!          if this is MC it contains the two closest detector level jets in order of distance and viceversa
   Double32_t        fClosestJetsDist[2];  //!          distance to closest jets (see above)
   UShort_t          fMatched;             //!          0,1 if it is matched with one of the closest jets; 2 if it is not matched
+  UShort_t          fMatchingType;        //!          matching type
   Double_t          fPtSub;               //!          background subtracted pt (not stored set from outside) 
   Double_t          fPtVectSub;           //!          background vector subtracted pt (not stored set from outside) 
 
index e9a2139b388ef3b5643000af9b1bb43ad2b7a11c..822fe362c2a88b3f29bfe3ec4f85381c2bf66e56 100644 (file)
@@ -294,32 +294,34 @@ Bool_t AliJetModelBaseTask::ExecOnce()
     }
   }
 
-  if (!fGeom && (fClusters || fCaloCells)) {
-    if (fGeomName.Length() > 0) {
-      fGeom = AliEMCALGeometry::GetInstance(fGeomName);
-      if (!fGeom)
-       AliError(Form("Could not get geometry with name %s!", fGeomName.Data()));
-    } else {
-      fGeom = AliEMCALGeometry::GetInstance();
-      if (!fGeom) 
-       AliError("Could not get default geometry!");
+  if (!fCaloName.IsNull() || !fCellsName.IsNull()) {
+    if (!fGeom) {
+      if (fGeomName.Length() > 0) {
+       fGeom = AliEMCALGeometry::GetInstance(fGeomName);
+       if (!fGeom)
+         AliError(Form("Could not get geometry with name %s!", fGeomName.Data()));
+      } else {
+       fGeom = AliEMCALGeometry::GetInstance();
+       if (!fGeom) 
+         AliError("Could not get default geometry!");
+      }
     }
-  }
-  
-  const Double_t EmcalMinEta = fGeom->GetArm1EtaMin();
-  const Double_t EmcalMaxEta = fGeom->GetArm1EtaMax();
-  const Double_t EmcalMinPhi = fGeom->GetArm1PhiMin() * TMath::DegToRad();
-  const Double_t EmcalMaxPhi = fGeom->GetArm1PhiMax() * TMath::DegToRad();
-  
-  if (fEtaMax > EmcalMaxEta) fEtaMax = EmcalMaxEta;
-  if (fEtaMax < EmcalMinEta) fEtaMax = EmcalMinEta;
-  if (fEtaMin > EmcalMaxEta) fEtaMin = EmcalMaxEta;
-  if (fEtaMin < EmcalMinEta) fEtaMin = EmcalMinEta;
   
-  if (fPhiMax > EmcalMaxPhi) fPhiMax = EmcalMaxPhi;
-  if (fPhiMax < EmcalMinPhi) fPhiMax = EmcalMinPhi;
-  if (fPhiMin > EmcalMaxPhi) fPhiMin = EmcalMaxPhi;
-  if (fPhiMin < EmcalMinPhi) fPhiMin = EmcalMinPhi;
+    const Double_t EmcalMinEta = fGeom->GetArm1EtaMin();
+    const Double_t EmcalMaxEta = fGeom->GetArm1EtaMax();
+    const Double_t EmcalMinPhi = fGeom->GetArm1PhiMin() * TMath::DegToRad();
+    const Double_t EmcalMaxPhi = fGeom->GetArm1PhiMax() * TMath::DegToRad();
+    
+    if (fEtaMax > EmcalMaxEta) fEtaMax = EmcalMaxEta;
+    if (fEtaMax < EmcalMinEta) fEtaMax = EmcalMinEta;
+    if (fEtaMin > EmcalMaxEta) fEtaMin = EmcalMaxEta;
+    if (fEtaMin < EmcalMinEta) fEtaMin = EmcalMinEta;
+    
+    if (fPhiMax > EmcalMaxPhi) fPhiMax = EmcalMaxPhi;
+    if (fPhiMax < EmcalMinPhi) fPhiMax = EmcalMinPhi;
+    if (fPhiMin > EmcalMaxPhi) fPhiMin = EmcalMaxPhi;
+    if (fPhiMin < EmcalMinPhi) fPhiMin = EmcalMinPhi;
+  }
 
   return kTRUE;
 }
index d0b5e8d34b3913f7f53bd8d9c7cc97e7ce31bad6..6c440c9daa3ae259f90dd98a6bc3fd365faa7bba 100644 (file)
@@ -48,6 +48,7 @@ AliJetResponseMaker::AliJetResponseMaker() :
   fJets2(0),
   fRho2(0),
   fRho2Val(0),
+  fTracks2Map(0),
   fHistNTrials(0),
   fHistEvents(0),
   fHistJets1PhiEta(0),
@@ -56,10 +57,16 @@ AliJetResponseMaker::AliJetResponseMaker() :
   fHistJets2PhiEta(0),
   fHistJets2PtArea(0),
   fHistJets2CorrPtArea(0),
+  fHistJets2PhiEtaAcceptance(0),
+  fHistJets2PtAreaAcceptance(0),
+  fHistJets2CorrPtAreaAcceptance(0),
   fHistMatchingLevelvsJet2Pt(0),
-  fHistClosestDeltaEtaPhivsJet2Pt(0),
-  fHistClosestDeltaPtvsJet2Pt(0),
-  fHistClosestDeltaCorrPtvsJet2Pt(0),
+  fHistDistancevsCommonEnergy(0),
+  fHistDeltaEtaPhivsJet2Pt(0),
+  fHistDeltaPtvsJet2Pt(0),
+  fHistDeltaPtvsMatchingLevel(0),
+  fHistDeltaCorrPtvsJet2Pt(0),
+  fHistDeltaCorrPtvsMatchingLevel(0),
   fHistNonMatchedJets1PtArea(0),
   fHistNonMatchedJets2PtArea(0),
   fHistNonMatchedJets1CorrPtArea(0),
@@ -99,6 +106,7 @@ AliJetResponseMaker::AliJetResponseMaker(const char *name) :
   fJets2(0),
   fRho2(0),
   fRho2Val(0),
+  fTracks2Map(0),
   fHistNTrials(0),
   fHistEvents(0),
   fHistJets1PhiEta(0),
@@ -107,10 +115,16 @@ AliJetResponseMaker::AliJetResponseMaker(const char *name) :
   fHistJets2PhiEta(0),
   fHistJets2PtArea(0),
   fHistJets2CorrPtArea(0),
+  fHistJets2PhiEtaAcceptance(0),
+  fHistJets2PtAreaAcceptance(0),
+  fHistJets2CorrPtAreaAcceptance(0),
   fHistMatchingLevelvsJet2Pt(0),
-  fHistClosestDeltaEtaPhivsJet2Pt(0),
-  fHistClosestDeltaPtvsJet2Pt(0),
-  fHistClosestDeltaCorrPtvsJet2Pt(0),
+  fHistDistancevsCommonEnergy(0),
+  fHistDeltaEtaPhivsJet2Pt(0),
+  fHistDeltaPtvsJet2Pt(0),
+  fHistDeltaPtvsMatchingLevel(0),
+  fHistDeltaCorrPtvsJet2Pt(0),
+  fHistDeltaCorrPtvsMatchingLevel(0),
   fHistNonMatchedJets1PtArea(0),
   fHistNonMatchedJets2PtArea(0),
   fHistNonMatchedJets1CorrPtArea(0),
@@ -155,7 +169,7 @@ void AliJetResponseMaker::UserCreateOutputObjects()
     fHistEvents->GetXaxis()->SetBinLabel(i, Form("%d-%d",ptHardLo[i-1],ptHardHi[i-1]));
   }
 
-  fHistJets1PhiEta = new TH2F("fHistJets1PhiEta", "fHistJets1PhiEta", 20, -2, 2, 32, 0, 6.4);
+  fHistJets1PhiEta = new TH2F("fHistJets1PhiEta", "fHistJets1PhiEta", 40, -1, 1, 40, 0, TMath::Pi()*2);
   fHistJets1PhiEta->GetXaxis()->SetTitle("#eta");
   fHistJets1PhiEta->GetYaxis()->SetTitle("#phi");
   fOutput->Add(fHistJets1PhiEta);
@@ -174,10 +188,15 @@ void AliJetResponseMaker::UserCreateOutputObjects()
     fOutput->Add(fHistJets1CorrPtArea);
   }
 
-  fHistJets2PhiEta = new TH2F("fHistJets2PhiEta", "fHistJets2PhiEta", 20, -2, 2, 32, 0, 6.4);
+  fHistJets2PhiEta = new TH2F("fHistJets2PhiEta", "fHistJets2PhiEta", 40, -1, 1, 40, 0, TMath::Pi()*2);
   fHistJets2PhiEta->GetXaxis()->SetTitle("#eta");
   fHistJets2PhiEta->GetYaxis()->SetTitle("#phi");
   fOutput->Add(fHistJets2PhiEta);
+
+  fHistJets2PhiEtaAcceptance = new TH2F("fHistJets2PhiEtaAcceptance", "fHistJets2PhiEtaAcceptance", 40, -1, 1, 40, 0, TMath::Pi()*2);
+  fHistJets2PhiEtaAcceptance->GetXaxis()->SetTitle("#eta");
+  fHistJets2PhiEtaAcceptance->GetYaxis()->SetTitle("#phi");
+  fOutput->Add(fHistJets2PhiEtaAcceptance);
   
   fHistJets2PtArea = new TH2F("fHistJets2PtArea", "fHistJets2PtArea", 40, 0, fJetRadius * fJetRadius * TMath::Pi() * 3, fNbins, fMinBinPt, fMaxBinPt);
   fHistJets2PtArea->GetXaxis()->SetTitle("area");
@@ -185,12 +204,24 @@ void AliJetResponseMaker::UserCreateOutputObjects()
   fHistJets2PtArea->GetZaxis()->SetTitle("counts");
   fOutput->Add(fHistJets2PtArea);
 
+  fHistJets2PtAreaAcceptance = new TH2F("fHistJets2PtAreaAcceptance", "fHistJets2PtAreaAcceptance", 40, 0, fJetRadius * fJetRadius * TMath::Pi() * 3, fNbins, fMinBinPt, fMaxBinPt);
+  fHistJets2PtAreaAcceptance->GetXaxis()->SetTitle("area");
+  fHistJets2PtAreaAcceptance->GetYaxis()->SetTitle("p_{T,2} (GeV/c)");
+  fHistJets2PtAreaAcceptance->GetZaxis()->SetTitle("counts");
+  fOutput->Add(fHistJets2PtAreaAcceptance);
+
   if (!fRho2Name.IsNull()) {
     fHistJets2CorrPtArea = new TH2F("fHistJets2CorrPtArea", "fHistJets2CorrPtArea", 40, 0, fJetRadius * fJetRadius * TMath::Pi() * 3, 2*fNbins, -fMaxBinPt, fMaxBinPt);
     fHistJets2CorrPtArea->GetXaxis()->SetTitle("area");
     fHistJets2CorrPtArea->GetYaxis()->SetTitle("p_{T,2}^{corr} (GeV/c)");
     fHistJets2CorrPtArea->GetZaxis()->SetTitle("counts");
     fOutput->Add(fHistJets2CorrPtArea);
+
+    fHistJets2CorrPtAreaAcceptance = new TH2F("fHistJets2CorrPtAreaAcceptance", "fHistJets2CorrPtAreaAcceptance", 40, 0, fJetRadius * fJetRadius * TMath::Pi() * 3, 2*fNbins, -fMaxBinPt, fMaxBinPt);
+    fHistJets2CorrPtAreaAcceptance->GetXaxis()->SetTitle("area");
+    fHistJets2CorrPtAreaAcceptance->GetYaxis()->SetTitle("p_{T,2}^{corr} (GeV/c)");
+    fHistJets2CorrPtAreaAcceptance->GetZaxis()->SetTitle("counts");
+    fOutput->Add(fHistJets2CorrPtAreaAcceptance);
   }
 
   fHistMatchingLevelvsJet2Pt = new TH2F("fHistMatchingLevelvsJet2Pt", "fHistMatchingLevelvsJet2Pt", fNbins/2, 0, 1.2, fNbins/2, fMinBinPt, fMaxBinPt);
@@ -199,24 +230,42 @@ void AliJetResponseMaker::UserCreateOutputObjects()
   fHistMatchingLevelvsJet2Pt->GetZaxis()->SetTitle("counts");
   fOutput->Add(fHistMatchingLevelvsJet2Pt);
 
-  fHistClosestDeltaEtaPhivsJet2Pt = new TH3F("fHistClosestDeltaEtaPhivsJet2Pt", "fHistClosestDeltaEtaPhivsJet2Pt", 40, -1, 1, 128, -1.6, 4.8, fNbins/2, fMinBinPt, fMaxBinPt);
-  fHistClosestDeltaEtaPhivsJet2Pt->GetXaxis()->SetTitle("#Delta#eta");
-  fHistClosestDeltaEtaPhivsJet2Pt->GetYaxis()->SetTitle("#Delta#phi");
-  fHistClosestDeltaEtaPhivsJet2Pt->GetZaxis()->SetTitle("p_{T,2}");
-  fOutput->Add(fHistClosestDeltaEtaPhivsJet2Pt);
-
-  fHistClosestDeltaPtvsJet2Pt = new TH2F("fHistClosestDeltaPtvsJet2Pt", "fHistClosestDeltaPtvsJet2Pt", fNbins/2, fMinBinPt, fMaxBinPt, 2*fNbins, -fMaxBinPt, fMaxBinPt);
-  fHistClosestDeltaPtvsJet2Pt->GetXaxis()->SetTitle("p_{T,2}");  
-  fHistClosestDeltaPtvsJet2Pt->GetYaxis()->SetTitle("#deltap_{T} (GeV/c)");
-  fHistClosestDeltaPtvsJet2Pt->GetZaxis()->SetTitle("counts");
-  fOutput->Add(fHistClosestDeltaPtvsJet2Pt);
+  fHistDistancevsCommonEnergy = new TH2F("fHistDistancevsCommonEnergy", "fHistDistancevsCommonEnergy", fNbins/2, 0, 1.2, fNbins/2, 0, 1.2);
+  fHistDistancevsCommonEnergy->GetXaxis()->SetTitle("Distance");
+  fHistDistancevsCommonEnergy->GetYaxis()->SetTitle("Common energy (%)");  
+  fHistDistancevsCommonEnergy->GetZaxis()->SetTitle("counts");
+  fOutput->Add(fHistDistancevsCommonEnergy);
+
+  fHistDeltaEtaPhivsJet2Pt = new TH3F("fHistDeltaEtaPhivsJet2Pt", "fHistDeltaEtaPhivsJet2Pt", 40, -1, 1, 128, -1.6, 4.8, fNbins/2, fMinBinPt, fMaxBinPt);
+  fHistDeltaEtaPhivsJet2Pt->GetXaxis()->SetTitle("#Delta#eta");
+  fHistDeltaEtaPhivsJet2Pt->GetYaxis()->SetTitle("#Delta#phi");
+  fHistDeltaEtaPhivsJet2Pt->GetZaxis()->SetTitle("p_{T,2}");
+  fOutput->Add(fHistDeltaEtaPhivsJet2Pt);
+
+  fHistDeltaPtvsJet2Pt = new TH2F("fHistDeltaPtvsJet2Pt", "fHistDeltaPtvsJet2Pt", fNbins/2, fMinBinPt, fMaxBinPt, 2*fNbins, -fMaxBinPt, fMaxBinPt);
+  fHistDeltaPtvsJet2Pt->GetXaxis()->SetTitle("p_{T,2}");  
+  fHistDeltaPtvsJet2Pt->GetYaxis()->SetTitle("#deltap_{T} (GeV/c)");
+  fHistDeltaPtvsJet2Pt->GetZaxis()->SetTitle("counts");
+  fOutput->Add(fHistDeltaPtvsJet2Pt);
+
+  fHistDeltaPtvsMatchingLevel = new TH2F("fHistDeltaPtvsMatchingLevel", "fHistDeltaPtvsMatchingLevel", fNbins/2, 0, 1.2, 2*fNbins, -fMaxBinPt, fMaxBinPt);
+  fHistDeltaPtvsMatchingLevel->GetXaxis()->SetTitle("Matching level");  
+  fHistDeltaPtvsMatchingLevel->GetYaxis()->SetTitle("#Deltap_{T} (GeV/c)");
+  fHistDeltaPtvsMatchingLevel->GetZaxis()->SetTitle("counts");
+  fOutput->Add(fHistDeltaPtvsMatchingLevel);
 
   if (!fRhoName.IsNull() || !fRho2Name.IsNull()) {  
-    fHistClosestDeltaCorrPtvsJet2Pt = new TH2F("fHistClosestDeltaCorrPtvsJet2Pt", "fHistClosestDeltaCorrPtvsJet2Pt", fNbins/2, fMinBinPt, fMaxBinPt, 2*fNbins, -fMaxBinPt, fMaxBinPt);
-    fHistClosestDeltaCorrPtvsJet2Pt->GetXaxis()->SetTitle("p_{T,2}");  
-    fHistClosestDeltaCorrPtvsJet2Pt->GetYaxis()->SetTitle("#Deltap_{T}^{corr} (GeV/c)");
-    fHistClosestDeltaCorrPtvsJet2Pt->GetZaxis()->SetTitle("counts");
-    fOutput->Add(fHistClosestDeltaCorrPtvsJet2Pt);
+    fHistDeltaCorrPtvsJet2Pt = new TH2F("fHistDeltaCorrPtvsJet2Pt", "fHistDeltaCorrPtvsJet2Pt", fNbins/2, fMinBinPt, fMaxBinPt, 2*fNbins, -fMaxBinPt, fMaxBinPt);
+    fHistDeltaCorrPtvsJet2Pt->GetXaxis()->SetTitle("p_{T,2}");  
+    fHistDeltaCorrPtvsJet2Pt->GetYaxis()->SetTitle("#Deltap_{T}^{corr} (GeV/c)");
+    fHistDeltaCorrPtvsJet2Pt->GetZaxis()->SetTitle("counts");
+    fOutput->Add(fHistDeltaCorrPtvsJet2Pt);
+
+    fHistDeltaCorrPtvsMatchingLevel = new TH2F("fHistDeltaCorrPtvsMatchingLevel", "fHistDeltaCorrPtvsMatchingLevel", fNbins/2, 0, 1.2, 2*fNbins, -fMaxBinPt, fMaxBinPt);
+    fHistDeltaCorrPtvsMatchingLevel->GetXaxis()->SetTitle("Matching level");  
+    fHistDeltaCorrPtvsMatchingLevel->GetYaxis()->SetTitle("#Deltap_{T}^{corr} (GeV/c)");
+    fHistDeltaCorrPtvsMatchingLevel->GetZaxis()->SetTitle("counts");
+    fOutput->Add(fHistDeltaCorrPtvsJet2Pt);
   }
 
   fHistNonMatchedJets1PtArea = new TH2F("fHistNonMatchedJets1PtArea", "fHistNonMatchedJets1PtArea", 40, 0, fJetRadius * fJetRadius * TMath::Pi() * 3, fNbins, fMinBinPt, fMaxBinPt);
@@ -338,6 +387,14 @@ void AliJetResponseMaker::ExecOnce()
        return;
       }
     }
+
+    if (fAreCollections2MC) {
+      fTracks2Map = dynamic_cast<TH1*>(InputEvent()->FindListObject(fTracks2Name + "_Map"));
+      if (!fTracks2Map) {
+       AliError(Form("%s: Could not retrieve map for tracks2 %s!", GetName(), fTracks2Name.Data())); 
+       return;
+      }
+    }
   }
 
   if (!fCalo2Name.IsNull() && !fCaloClusters2) {
@@ -422,12 +479,22 @@ Bool_t AliJetResponseMaker::RetrieveEventObjects()
 Bool_t AliJetResponseMaker::Run()
 {
   // Find the closest jets
-  
-  if (fMatching == kNoMatching)
+
+  switch (fMatching) {
+  case kGeometrical:
+    return GeometricalMatching();
+  case kMCLabel: 
+    return MCLabelMatching();
+  default:
     return kTRUE;
+  }
+}
 
-  DoJetLoop(fJets, fJets2, kFALSE);
-  DoJetLoop(fJets2, fJets, kTRUE);
+//________________________________________________________________________
+Bool_t AliJetResponseMaker::GeometricalMatching()
+{
+  DoJetLoop(kFALSE);
+  DoJetLoop(kTRUE);
 
   const Int_t nJets2 = fJets2->GetEntriesFast();
 
@@ -451,8 +518,8 @@ Bool_t AliJetResponseMaker::Run()
 
     if (jet2->ClosestJet() && jet2->ClosestJet()->ClosestJet() == jet2 && 
         jet2->ClosestJetDistance() < fMatchingPar) {    // Matched jet found
-      jet2->SetMatchedToClosest();
-      jet2->ClosestJet()->SetMatchedToClosest();
+      jet2->SetMatchedToClosest(fMatching);
+      jet2->ClosestJet()->SetMatchedToClosest(fMatching);
     }
   }
 
@@ -460,10 +527,57 @@ Bool_t AliJetResponseMaker::Run()
 }
 
 //________________________________________________________________________
-void AliJetResponseMaker::DoJetLoop(TClonesArray *jets1, TClonesArray *jets2, Bool_t first)
+Bool_t AliJetResponseMaker::MCLabelMatching()
+{
+  DoJetLoop(kFALSE);
+
+  const Int_t nJets1 = fJets->GetEntriesFast();
+
+  for (Int_t i = 0; i < nJets1; i++) {
+
+    AliEmcalJet* jet1 = static_cast<AliEmcalJet*>(fJets->At(i));
+
+    if (!jet1) {
+      AliError(Form("Could not receive jet %d", i));
+      continue;
+    }  
+
+    if (!AcceptJet(jet1))
+      continue;
+
+    if (jet1->Eta() < fJetMinEta || jet1->Eta() > fJetMaxEta || jet1->Phi() < fJetMinPhi || jet1->Phi() > fJetMaxPhi)
+      continue;
+
+    if (jet1->Pt() > fMaxBinPt)
+      continue;
+
+    if (jet1->ClosestJet() && jet1->ClosestJetDistance() < fMatchingPar) {    // Matched jet found
+      jet1->SetMatchedToClosest(fMatching);
+      jet1->ClosestJet()->SetClosestJet(jet1, jet1->ClosestJetDistance());
+      jet1->ClosestJet()->SetMatchedToClosest(fMatching);
+    }
+  }
+
+  return kTRUE;
+}
+
+//________________________________________________________________________
+void AliJetResponseMaker::DoJetLoop(Bool_t order)
 {
   // Do the jet loop.
 
+  TClonesArray *jets1 = 0;
+  TClonesArray *jets2 = 0;
+
+  if (order) {
+    jets1 = fJets2;
+    jets2 = fJets;
+  }
+  else {
+    jets1 = fJets;
+    jets2 = fJets2;
+  }
+
   Int_t nJets1 = jets1->GetEntriesFast();
   Int_t nJets2 = jets2->GetEntriesFast();
 
@@ -479,7 +593,7 @@ void AliJetResponseMaker::DoJetLoop(TClonesArray *jets1, TClonesArray *jets2, Bo
     if (!AcceptJet(jet1))
       continue;
 
-    if (first) {
+    if (order) {
      if (jet1->Eta() < fJet2MinEta || jet1->Eta() > fJet2MaxEta || jet1->Phi() < fJet2MinPhi || jet1->Phi() > fJet2MaxPhi)
        continue;
     }
@@ -500,7 +614,7 @@ void AliJetResponseMaker::DoJetLoop(TClonesArray *jets1, TClonesArray *jets2, Bo
       if (!AcceptJet(jet2))
        continue;
 
-      if (first) {
+      if (order) {
        if (jet2->Eta() < fJetMinEta || jet2->Eta() > fJetMaxEta || jet2->Phi() < fJetMinPhi || jet2->Phi() > fJetMaxPhi)
          continue;
       }
@@ -509,7 +623,7 @@ void AliJetResponseMaker::DoJetLoop(TClonesArray *jets1, TClonesArray *jets2, Bo
          continue;
       }
 
-      Double_t d = GetMatchingLevel(jet1, jet2);
+      Double_t d = GetMatchingLevel(jet1, jet2, fMatching);
 
       if (d < 0)
        continue;
@@ -526,11 +640,11 @@ void AliJetResponseMaker::DoJetLoop(TClonesArray *jets1, TClonesArray *jets2, Bo
 }
 
 //________________________________________________________________________
-Double_t AliJetResponseMaker::GetMatchingLevel(AliEmcalJet *jet1, AliEmcalJet *jet2) const
+Double_t AliJetResponseMaker::GetMatchingLevel(AliEmcalJet *jet1, AliEmcalJet *jet2, MatchingType matching) 
 {
   Double_t r = -1;
 
-  switch (fMatching) {
+  switch (matching) {
   case kGeometrical:
     {
       Double_t deta = jet2->Eta() - jet1->Eta();
@@ -538,8 +652,65 @@ Double_t AliJetResponseMaker::GetMatchingLevel(AliEmcalJet *jet1, AliEmcalJet *j
       r = TMath::Sqrt(deta * deta + dphi * dphi);
     }
     break;
-  case kMCLabel:
-    AliError("MC label matching not implemented!");
+  case kMCLabel: // jet1 should be detector level and jet2 particle level!
+    { 
+      if (!fTracks2Map) {
+       fTracks2Map = new TH1I("tracksMap","tracksMap",1000,0,1);
+       for (Int_t i = 0; i < 1000; i++) {
+         fTracks2Map->SetBinContent(i,i);
+       }
+      }
+      r = jet1->Pt();
+      for (Int_t iTrack = 0; iTrack < jet1->GetNumberOfTracks(); iTrack++) {
+       AliVParticle *track = jet1->TrackAt(iTrack,fTracks);
+       if (!track) {
+         AliWarning(Form("Could not find track %d!", iTrack));
+         continue;
+       }
+       Int_t MClabel = track->GetLabel();
+       Int_t index = fTracks2Map->GetBinContent(MClabel);
+       if (index < 0) {
+         AliDebug(2,Form("Track %d (pT = %f) does not have an associated MC particle (MClabel = %d)!",iTrack,track->Pt(),MClabel));
+         continue;
+       }
+       for (Int_t iTrack2 = 0; iTrack2 < jet2->GetNumberOfTracks(); iTrack2++) {
+         Int_t index2 = jet2->TrackAt(iTrack2);
+         if (index2 == index) { // found common particle
+           r -= track->Pt();
+           break;
+         }
+       }
+      }
+      for (Int_t iClus = 0; iClus < jet1->GetNumberOfClusters(); iClus++) {
+       AliVCluster *clus = jet1->ClusterAt(iClus,fCaloClusters);
+       if (!clus) {
+         AliWarning(Form("Could not find cluster %d!", iClus));
+         continue;
+       }
+       TLorentzVector part;
+       clus->GetMomentum(part, fVertex);
+       Int_t *MClabels = clus->GetLabels();
+       UInt_t nMClabels = clus->GetNLabels();
+       for (UInt_t j = 0; j < nMClabels; j++) {
+         Int_t index = fTracks2Map->GetBinContent(MClabels[j]);
+         if (index < 0) {
+           AliDebug(3,Form("Cluster %d (pT = %f) does not have an associated MC particle (MClabel = %d)!",iClus,part.Pt(),MClabels[j]));
+           continue;
+         }
+         for (Int_t iTrack2 = 0; iTrack2 < jet2->GetNumberOfTracks(); iTrack2++) {
+           Int_t index2 = jet2->TrackAt(iTrack2);
+           if (index2 == index) { // found common particle
+             r -= part.Pt();
+             j = nMClabels; // stop looking for other MC particles
+             break;
+           }
+         }
+       }
+      }
+      if (r < 0)
+       r = 0;
+      r /= jet1->Pt();
+    }
     break;
   default:
     ;
@@ -565,19 +736,35 @@ Bool_t AliJetResponseMaker::FillHistograms()
     if (!jet2) {
       AliError(Form("Could not receive jet2 %d", i));
       continue;
-    }  
+    }
+
+    if (jet2->Pt() > fMaxBinPt)
+      continue;
 
     if (!AcceptJet(jet2))
       continue;
 
+    if (AcceptBiasJet(jet2) &&
+       (jet2->Eta() > fJetMinEta && jet2->Eta() < fJetMaxEta && jet2->Phi() > fJetMinPhi && jet2->Phi() < fJetMaxPhi)) {
+      
+      fHistJets2PtAreaAcceptance->Fill(jet2->Area(), jet2->Pt());
+      fHistJets2PhiEtaAcceptance->Fill(jet2->Eta(), jet2->Phi());
+      
+      if (!fRho2Name.IsNull())
+       fHistJets2CorrPtAreaAcceptance->Fill(jet2->Area(), jet2->Pt() - fRho2Val * jet2->Area());
+    }
+
     if (!AcceptBiasJet2(jet2))
       continue;
 
     if (jet2->Eta() < fJet2MinEta || jet2->Eta() > fJet2MaxEta || jet2->Phi() < fJet2MinPhi || jet2->Phi() > fJet2MaxPhi)
       continue;
 
-    if (jet2->Pt() > fMaxBinPt)
-      continue;
+    fHistJets2PtArea->Fill(jet2->Area(), jet2->Pt());
+    fHistJets2PhiEta->Fill(jet2->Eta(), jet2->Phi());
+
+    if (!fRho2Name.IsNull())
+      fHistJets2CorrPtArea->Fill(jet2->Area(), jet2->Pt() - fRho2Val * jet2->Area());
 
     if (jet2->MatchedJet()) {
 
@@ -587,20 +774,29 @@ Bool_t AliJetResponseMaker::FillHistograms()
        fHistMissedJets2PtArea->Fill(jet2->Area(), jet2->Pt());
       }
       else {
+       if (jet2->GetMatchingType() == kGeometrical)
+         fHistDistancevsCommonEnergy->Fill(jet2->ClosestJetDistance(), GetMatchingLevel(jet2->MatchedJet(), jet2, kMCLabel));
+       else if (jet2->GetMatchingType() == kMCLabel)
+         fHistDistancevsCommonEnergy->Fill(GetMatchingLevel(jet2->MatchedJet(), jet2, kGeometrical), jet2->ClosestJetDistance());
+       else
+         fHistDistancevsCommonEnergy->Fill(GetMatchingLevel(jet2->MatchedJet(), jet2, kGeometrical), GetMatchingLevel(jet2->MatchedJet(), jet2, kMCLabel));
+         
        fHistMatchingLevelvsJet2Pt->Fill(jet2->ClosestJetDistance(), jet2->Pt());
 
        Double_t deta = jet2->MatchedJet()->Eta() - jet2->Eta();
        Double_t dphi = jet2->MatchedJet()->Phi() - jet2->Phi();
-       fHistClosestDeltaEtaPhivsJet2Pt->Fill(deta, dphi, jet2->Pt());
+       fHistDeltaEtaPhivsJet2Pt->Fill(deta, dphi, jet2->Pt());
 
        Double_t dpt = jet2->MatchedJet()->Pt() - jet2->Pt();
-       fHistClosestDeltaPtvsJet2Pt->Fill(jet2->Pt(), dpt);
+       fHistDeltaPtvsJet2Pt->Fill(jet2->Pt(), dpt);
+       fHistDeltaPtvsMatchingLevel->Fill(jet2->ClosestJetDistance(), dpt);
 
        fHistJet1PtvsJet2Pt->Fill(jet2->MatchedJet()->Pt(), jet2->Pt());
        
        if (!fRhoName.IsNull() || !fRho2Name.IsNull()) {
          dpt -= fRhoVal * jet2->MatchedJet()->Area() - fRho2Val * jet2->Area();
-         fHistClosestDeltaCorrPtvsJet2Pt->Fill(jet2->Pt(), dpt);
+         fHistDeltaCorrPtvsJet2Pt->Fill(jet2->Pt(), dpt);
+         fHistDeltaCorrPtvsMatchingLevel->Fill(jet2->ClosestJetDistance(), dpt);
          fHistJet1CorrPtvsJet2CorrPt->Fill(jet2->MatchedJet()->Pt() - fRhoVal * jet2->MatchedJet()->Area(), jet2->Pt() - fRho2Val * jet2->Area());
        }
       }
@@ -612,12 +808,6 @@ Bool_t AliJetResponseMaker::FillHistograms()
       if (!fRho2Name.IsNull())
        fHistNonMatchedJets2CorrPtArea->Fill(jet2->Area(), jet2->Pt() - fRhoVal * jet2->Area());
     }
-
-    fHistJets2PtArea->Fill(jet2->Area(), jet2->Pt());
-    fHistJets2PhiEta->Fill(jet2->Eta(), jet2->Phi());
-
-    if (!fRho2Name.IsNull())
-      fHistJets2CorrPtArea->Fill(jet2->Area(), jet2->Pt() - fRho2Val * jet2->Area());
   }
 
   const Int_t nJets1 = fJets->GetEntriesFast();
index fe7d9d1835f32020d6a13ae157aaed04e7a616af..5150fc2509342744d91819c9c2667d2aaac59866 100644 (file)
@@ -9,6 +9,7 @@ class TH1;
 class TH2;
 class TH3;
 
+#include "AliEmcalJet.h"
 #include "AliAnalysisTaskEmcalJet.h"
 
 class AliJetResponseMaker : public AliAnalysisTaskEmcalJet {
@@ -43,11 +44,13 @@ class AliJetResponseMaker : public AliAnalysisTaskEmcalJet {
   Bool_t                      AcceptJet(AliEmcalJet* jet) const;
   Bool_t                      AcceptBiasJet2(AliEmcalJet *jet) const;
   void                        ExecOnce();
-  void                        DoJetLoop(TClonesArray *jets1, TClonesArray *jets2, Bool_t mc);
+  void                        DoJetLoop(Bool_t order);
   Bool_t                      FillHistograms();
   Bool_t                      RetrieveEventObjects();
   Bool_t                      Run();
-  Double_t                    GetMatchingLevel(AliEmcalJet *jet1, AliEmcalJet *jet2) const;
+  Bool_t                      MCLabelMatching();
+  Bool_t                      GeometricalMatching();
+  Double_t                    GetMatchingLevel(AliEmcalJet *jet1, AliEmcalJet *jet2, MatchingType matching);
 
   TString                     fTracks2Name;                   // name of second track collection
   TString                     fCalo2Name;                     // name of second cluster collection
@@ -70,9 +73,10 @@ class AliJetResponseMaker : public AliAnalysisTaskEmcalJet {
   Int_t                       fNTrials;                       //!event trials
   TClonesArray               *fTracks2;                       //!Tracks 2
   TClonesArray               *fCaloClusters2;                 //!Clusters 2
-  TClonesArray               *fJets2;                       //!Jets 2
+  TClonesArray               *fJets2;                         //!Jets 2
   AliRhoParameter            *fRho2;                          //!Event rho 2
   Double_t                    fRho2Val;                       //!Event rho 2 value 
+  TH1                        *fTracks2Map;                    //!MC particle map
   // General histograms
   TH1                        *fHistNTrials;                   //!total number of trials per pt hard bin
   TH1                        *fHistEvents;                    //!total number of events per pt hard bin
@@ -84,11 +88,17 @@ class AliJetResponseMaker : public AliAnalysisTaskEmcalJet {
   TH2                        *fHistJets2PhiEta;               //!phi-eta distribution of jets 2
   TH2                        *fHistJets2PtArea;               //!inclusive jet pt vs. area histogram 2
   TH2                        *fHistJets2CorrPtArea;           //!inclusive jet pt vs. area histogram 2
+  TH2                        *fHistJets2PhiEtaAcceptance;     //!phi-eta distribution of jets 2 using jet 1 cuts (acceptance, leading hadron bias, ...)
+  TH2                        *fHistJets2PtAreaAcceptance;     //!inclusive jet pt vs. area histogram 2 using jet 1 cuts (acceptance, leading hadron bias, ...)
+  TH2                        *fHistJets2CorrPtAreaAcceptance; //!inclusive jet pt vs. area histogram 2 using jet 1 cuts (acceptance, leading hadron bias, ...)
   // Jet1-Jet2 matching
   TH2                        *fHistMatchingLevelvsJet2Pt;              //!matching level vs jet 2 pt
-  TH3                        *fHistClosestDeltaEtaPhivsJet2Pt;         //!delta eta-phi between matched jets vs jet 2 pt
-  TH2                        *fHistClosestDeltaPtvsJet2Pt;             //!delta pt between matched jets vs jet 2 pt
-  TH2                        *fHistClosestDeltaCorrPtvsJet2Pt;         //!delta pt corr between matched jets vs jet 2 pt
+  TH2                        *fHistDistancevsCommonEnergy;             //!distance vs common energy (%)
+  TH3                        *fHistDeltaEtaPhivsJet2Pt;                //!delta eta-phi between matched jets vs jet 2 pt
+  TH2                        *fHistDeltaPtvsJet2Pt;                    //!delta pt between matched jets vs jet 2 pt
+  TH2                        *fHistDeltaPtvsMatchingLevel;             //!delta pt between matched jets vs matching level
+  TH2                        *fHistDeltaCorrPtvsJet2Pt;                //!delta pt corr between matched jets vs jet 2 pt
+  TH2                        *fHistDeltaCorrPtvsMatchingLevel;         //!delta pt corr between matched jets vs matching level
   TH2                        *fHistNonMatchedJets1PtArea;              //!non-matched jet 1 pt distribution
   TH2                        *fHistNonMatchedJets2PtArea;              //!non-matched jet 2 pt distribution
   TH2                        *fHistNonMatchedJets1CorrPtArea;          //!non-matched jet pt distribution
index 4adf5156eef5bbbcad1d687547696150da1f07b1..8f3add945636cc801d3821522120cd4d33cd07fb 100644 (file)
@@ -1,23 +1,26 @@
 // $Id$
 
-AliJetResponseMaker* AddTaskJetRespPtHard(const char *ntracks            = "Tracks",
-                                         const char *nclusters          = "CaloClusters",
-                                         const char *njets              = "Jets",
-                                         const char *nrho               = "Rho",
-                                         const char *nmctracks          = "MCParticles",
-                                         const char *nmcjets            = "MCJets",
-                                         Double_t    jetradius          = 0.2,
-                                         Double_t    jetptcut           = 1,
-                                         Double_t    jetareacut         = 0.557,
-                                         Double_t    jetBiasTrack       = 5,
-                                         Double_t    jetBiasClus        = 5,
-                                         Double_t    maxDistance        = 0.25,
-                                         UInt_t      type               = AliAnalysisTaskEmcal::kTPC,
-                                         Int_t       minPtBin           = 1, 
-                                         Int_t       maxPtBin           = 10,
-                                         Bool_t      domatch            = kTRUE,
-                                         Bool_t      biggerMatrix       = kFALSE,
-                                         const char *taskname           = "AliJetResponseMaker"
+AliJetResponseMaker* AddTaskJetRespPtHard(  
+  const char *ntracks1           = "Tracks",
+  const char *nclusters1         = "CaloClusters",
+  const char *njets1             = "Jets",
+  const char *nrho1              = "Rho",
+  const char *ntracks2           = "MCParticles",
+  const char *nclusters2         = "",
+  const char *njets2             = "MCJets",
+  const char *nrho2              = "",
+  Double_t    jetradius          = 0.2,
+  Double_t    jetptcut           = 1,
+  Double_t    jetareacut         = 0.557,
+  Double_t    jetBiasTrack       = 5,
+  Double_t    jetBiasClus        = 5,
+  UInt_t      matching           = AliJetResponseMaker::kGeometrical,
+  Double_t    maxDistance        = 0.25,
+  UInt_t      type               = AliAnalysisTaskEmcal::kTPC,
+  Int_t       maxPtHardBin       = -999,
+  Int_t       minPtHardBin       = -999,
+  const char *taskname           = "AliJetResponseMaker",
+  Bool_t      biggerMatrix       = kFALSE,
                                          
 )
 {  
@@ -26,12 +29,9 @@ AliJetResponseMaker* AddTaskJetRespPtHard(const char *ntracks            = "Trac
   AliJetResponseMaker *jetTask = new AliJetResponseMaker[maxPtBin - minPtBin + 1];
 
   for (Int_t i = minPtBin; i <= maxPtBin; i++) {
-    AddTaskJetResponseMaker(ntracks, nclusters, njets, nrho, nmctracks, nmcjets,
-                           jetradius, jetptcut, jetareacut, jetBiasTrack, 
-                           jetBiasClus, maxDistance, type, i, taskname, jetTask + i - minPtBin);
-    jetTask[i - minPtBin].SetDoMatching(domatch);
-    if (biggerMatrix) 
-      jetTask[i - minPtBin].SetHistoBins(1000,0,500);
+    AddTaskJetResponseMaker(ntracks1, nclusters1, njets1, nrho1, ntracks2, nclusters2, njets2, nrho2,
+                           jetradius, jetptcut, jetareacut, jetBiasTrack, jetBiasClus, 
+                           matching, maxDistance, type, i, taskname, biggerMatrix, jetTask + i - minPtBin);
   }
   
   return jetTask;
index ea653df54bca0601e00c2828e532de138034716d..7ea72882152cf258a969f5ade2a9ff430827cee4 100644 (file)
@@ -1,21 +1,25 @@
 // $Id$
 
 AliJetResponseMaker* AddTaskJetResponseMaker(
-  const char *ntracks            = "Tracks",
-  const char *nclusters          = "CaloClusters",
-  const char *njets              = "Jets",
-  const char *nrho               = "Rho",
-  const char *nmctracks          = "MCParticles",
-  const char *nmcjets            = "MCJets",
+  const char *ntracks1           = "Tracks",
+  const char *nclusters1         = "CaloClusters",
+  const char *njets1             = "Jets",
+  const char *nrho1              = "Rho",
+  const char *ntracks2           = "MCParticles",
+  const char *nclusters2         = "",
+  const char *njets2             = "MCJets",
+  const char *nrho2              = "",
   Double_t    jetradius          = 0.2,
   Double_t    jetptcut           = 1,
   Double_t    jetareacut         = 0.557,
   Double_t    jetBiasTrack       = 5,
   Double_t    jetBiasClus        = 5,
+  UInt_t      matching           = AliJetResponseMaker::kGeometrical,
   Double_t    maxDistance        = 0.25,
   UInt_t      type               = AliAnalysisTaskEmcal::kTPC,
   Int_t       ptHardBin          = -999,
   const char *taskname           = "AliJetResponseMaker",
+  Bool_t      biggerMatrix       = kFALSE,
   AliJetResponseMaker* address   = 0
 )
 {  
@@ -40,7 +44,7 @@ AliJetResponseMaker* AddTaskJetResponseMaker(
   // Init the task and do settings
   //-------------------------------------------------------
 
-  TString name(Form("%s_%s_Track%d_Clus%d_R0%d_",taskname,njets,(Int_t)floor(jetBiasTrack),(Int_t)floor(jetBiasClus),(Int_t)floor(jetradius*100+0.5)));
+  TString name(Form("%s_%s_%s_Track%d_Clus%d_",taskname,njets1,njets2,(Int_t)floor(jetBiasTrack),(Int_t)floor(jetBiasClus)));
   if (type == AliAnalysisTaskEmcal::kTPC)
     name += "TPC";
   else if (type == AliAnalysisTaskEmcal::kEMCAL) 
@@ -59,20 +63,25 @@ AliJetResponseMaker* AddTaskJetResponseMaker(
     jetTask = new AliJetResponseMaker(name);
 
   jetTask->SetAnaType(type);
-  jetTask->SetTracksName(ntracks);
-  jetTask->SetClusName(nclusters);
-  jetTask->SetJetsName(njets);
-  jetTask->SetRhoName(nrho);
-  jetTask->SetJets2Name(nmcjets);
-  jetTask->SetTracks2Name(nmctracks);
+  jetTask->SetTracksName(ntracks1);
+  jetTask->SetClusName(nclusters1);
+  jetTask->SetJetsName(njets1);
+  jetTask->SetRhoName(nrho1);
+  jetTask->SetTracks2Name(ntracks2);
+  jetTask->SetClus2Name(nclusters2);
+  jetTask->SetJets2Name(njets2);
+  jetTask->SetRho2Name(nrho2);
   jetTask->SetJetRadius(jetradius);
   jetTask->SetJetPtCut(jetptcut);
   jetTask->SetPercAreaCut(jetareacut);
   jetTask->SetPtBiasJetTrack(jetBiasTrack);
   jetTask->SetPtBiasJetClus(jetBiasClus);
-  jetTask->SetMatching(AliJetResponseMaker::kGeometrical, maxDistance);
+  jetTask->SetMatching(matching, maxDistance);
   jetTask->SetVzRange(-10,10);
   jetTask->SetPtHardBin(ptHardBin);
+
+  if (biggerMatrix) 
+    jetTask->SetHistoBins(1000,0,500);
   
   //-------------------------------------------------------
   // Final settings, pass to manager and set the containers