Protection to skip PYTHIA events with large jet energy compared to pTHard
authorgconesab <gconesab@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 20 Aug 2009 14:55:30 +0000 (14:55 +0000)
committergconesab <gconesab@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 20 Aug 2009 14:55:30 +0000 (14:55 +0000)
PWG4/PartCorrBase/AliAnaPartCorrMaker.cxx
PWG4/PartCorrBase/AliAnaPartCorrMaker.h
PWG4/PartCorrBase/AliCaloTrackMCReader.cxx
PWG4/PartCorrBase/AliCaloTrackMCReader.h
PWG4/PartCorrBase/AliCaloTrackReader.cxx
PWG4/PartCorrBase/AliCaloTrackReader.h
PWG4/PartCorrBase/AliMCAnalysisUtils.cxx
PWG4/PartCorrBase/AliMCAnalysisUtils.h

index ef6ea11..7d27aed 100755 (executable)
@@ -216,7 +216,7 @@ void AliAnaPartCorrMaker::Print(const Option_t * opt) const
 
 
 //____________________________________________________________________________
-Bool_t AliAnaPartCorrMaker::ProcessEvent(const Int_t iEntry, const char * currentFileName){
+void AliAnaPartCorrMaker::ProcessEvent(const Int_t iEntry, const char * currentFileName){
   //Process analysis for this event
   
   if(fMakeHisto && !fOutputContainer){
@@ -234,7 +234,11 @@ Bool_t AliAnaPartCorrMaker::ProcessEvent(const Int_t iEntry, const char * curren
     fAODBranchList->At(iaod)->Clear();
   
   //Tell the reader to fill the data in the 3 detector lists
-  fReader->FillInputEvent(iEntry, currentFileName);
+  Bool_t ok = fReader->FillInputEvent(iEntry, currentFileName);
+  if(!ok){
+         printf("*** Skip event *** %d \n",iEntry);
+         return ;
+  }
   
   //Loop on analysis algorithms
   if(fAnaDebug > 0 ) printf("*** Begin analysis *** \n");
@@ -253,8 +257,6 @@ Bool_t AliAnaPartCorrMaker::ProcessEvent(const Int_t iEntry, const char * curren
   
   if(fAnaDebug > 0 ) printf("*** End analysis *** \n");
   
-  return kTRUE ;
-  
 }
 
 //________________________________________________________________________
index 34d113f..b31fd51 100755 (executable)
@@ -63,7 +63,7 @@ class AliAnaPartCorrMaker : public TObject {
   
   void Print(const Option_t * opt) const;
   
-  Bool_t ProcessEvent(const Int_t iEntry, const char * currentFileName) ;
+  void ProcessEvent(const Int_t iEntry, const char * currentFileName) ;
   
  private:
   
index f9458b5..5eea488 100755 (executable)
@@ -17,6 +17,8 @@
 //_________________________________________________________________________
 // Class for reading data (Kinematics) in order to do prompt gamma 
 // or other particle identification and correlations
+// Separates generated particles into charged (CTS) 
+// and neutral (PHOS or EMCAL acceptance)
 //
 //*-- Author: Gustavo Conesa (LNF-INFN) 
 //////////////////////////////////////////////////////////////////////////////
@@ -28,6 +30,7 @@
 #include <TDatabasePDG.h>
 #include <TRandom.h>
 #include <TArrayI.h>
+#include "TParticle.h"
 //#include "Riostream.h"
 
 //---- ANALYSIS system ----
@@ -36,9 +39,9 @@
 #include "AliStack.h"
 #include "AliAODCaloCluster.h"
 #include "AliAODTrack.h"
-#include "AliFidutialCut.h"
 #include "AliAODEvent.h"
-#include "TParticle.h"
+#include "AliFidutialCut.h"
+#include "AliMCAnalysisUtils.h"
 
   ClassImp(AliCaloTrackMCReader)
 
@@ -232,12 +235,17 @@ void  AliCaloTrackMCReader::FillCalorimeters(Int_t & iParticle, TParticle* parti
 }
 
 //____________________________________________________________________________
-void AliCaloTrackMCReader::FillInputEvent(const Int_t iEntry, const char * currentFileName){
+Bool_t AliCaloTrackMCReader::FillInputEvent(const Int_t iEntry, const char * currentFileName){
   //Fill the event counter and input lists that are needed, called by the analysis maker.
   
   fEventNumber = iEntry;
   fCurrentFileName = TString(currentFileName);
        
+  //In case of analysis of events with jets, skip those with jet pt > 5 pt hard        
+  if(fComparePtHardAndJetPt && GetStack()) {
+       if(!fMCUtils->ComparePtHardAndJetPt(GetGenEventHeader())) return kFALSE ;
+  }    
+       
   Int_t iParticle = 0 ;
   Double_t charge = 0.;
   Int_t ncalo  = (fOutputEvent->GetCaloClusters())->GetEntriesFast();
@@ -321,6 +329,9 @@ void AliCaloTrackMCReader::FillInputEvent(const Int_t iEntry, const char * curre
   }//particle loop
   
   fIndex2ndPhoton = -1; //In case of overlapping studies, reset for each event 
+       
+  return kTRUE;        
+
 }
 
 //________________________________________________________________
index 6caff78..0351871 100755 (executable)
@@ -5,8 +5,13 @@
 /* $Id:  $ */
 
 //_________________________________________________________________________
-// Class for reading data (Kinematics) in order to do prompt gamma or other particle  correlations
+// Class for reading data (Kinematics) in order to do prompt gamma 
+// or other particle  correlations
+// Separates generated particles into charged (CTS) 
+// and neutral (PHOS or EMCAL acceptance)
 //
+//*-- Author: Gustavo Conesa (LNF-INFN) 
+//////////////////////////////////////////////////////////////////////////////
 
 //-- Author: Gustavo Conesa (INFN-LNF)
 
@@ -59,7 +64,7 @@ class AliCaloTrackMCReader : public AliCaloTrackReader {
   
   void GetVertex(Double_t v[3]) const ;
 
-  void FillInputEvent(const Int_t iEntry, const char * currentFileName) ;
+  Bool_t FillInputEvent(const Int_t iEntry, const char * currentFileName) ;
   AliVEvent*  GetInputEvent() const {return (AliVEvent *) GetMC();}
   void SetInputOutputMCEvent(AliVEvent* esd, AliAODEvent* aod, AliMCEvent* mc) ;
   
index aee1363..4a47029 100755 (executable)
@@ -34,6 +34,7 @@
 #include "AliFidutialCut.h"
 #include "AliAODEvent.h"
 #include "AliMCEvent.h"
+#include "AliMCAnalysisUtils.h"
 
 ClassImp(AliCaloTrackReader)
   
@@ -41,7 +42,7 @@ ClassImp(AliCaloTrackReader)
 //____________________________________________________________________________
   AliCaloTrackReader::AliCaloTrackReader() : 
     TObject(), fEventNumber(-1), fCurrentFileName(""),fDataType(0), fDebug(0), 
-    fFidutialCut(0x0),
+    fFidutialCut(0x0), fMCUtils(0x0), fComparePtHardAndJetPt(kFALSE),
     fCTSPtMin(0), fEMCALPtMin(0),fPHOSPtMin(0),
     fAODCTS(new TRefArray()), fAODEMCAL(new TRefArray()), fAODPHOS(new TRefArray()),
     fEMCALCells(0x0), fPHOSCells(0x0),
@@ -60,6 +61,7 @@ AliCaloTrackReader::AliCaloTrackReader(const AliCaloTrackReader & g) :
   TObject(g), fEventNumber(g.fEventNumber), fCurrentFileName(g.fCurrentFileName), 
   fDataType(g.fDataType), fDebug(g.fDebug),
   fFidutialCut(g.fFidutialCut),
+  fMCUtils(g.fMCUtils), fComparePtHardAndJetPt(g.fComparePtHardAndJetPt),
   fCTSPtMin(g.fCTSPtMin), fEMCALPtMin(g.fEMCALPtMin),fPHOSPtMin(g.fPHOSPtMin), 
   fAODCTS(new TRefArray(*g.fAODCTS)),  
   fAODEMCAL(new TRefArray(*g.fAODEMCAL)),
@@ -86,10 +88,12 @@ AliCaloTrackReader & AliCaloTrackReader::operator = (const AliCaloTrackReader &
   fEventNumber = source.fEventNumber ;
   fCurrentFileName = source.fCurrentFileName ;
   fFidutialCut = source.fFidutialCut;
+  fMCUtils     = source.fMCUtils;
+  fComparePtHardAndJetPt = source.fComparePtHardAndJetPt;
   
-  fCTSPtMin   = source.fCTSPtMin ;
-  fEMCALPtMin = source.fEMCALPtMin ;
-  fPHOSPtMin  = source.fPHOSPtMin ; 
+  fCTSPtMin    = source.fCTSPtMin ;
+  fEMCALPtMin  = source.fEMCALPtMin ;
+  fPHOSPtMin   = source.fPHOSPtMin ; 
   
   fAODCTS     = new TRefArray(*source.fAODCTS) ;
   fAODEMCAL   = new TRefArray(*source.fAODEMCAL) ;
@@ -116,7 +120,8 @@ AliCaloTrackReader::~AliCaloTrackReader() {
   //Dtor
   
   if(fFidutialCut) delete fFidutialCut ;
-  
+  if(fMCUtils)     delete fMCUtils ;
+       
   if(fAODCTS){
     fAODCTS->Clear() ; 
     delete fAODCTS ;
@@ -188,8 +193,8 @@ void AliCaloTrackReader::InitParameters()
   fDataType = kESD ;
 
   fCTSPtMin   = 0.2 ;
-  fEMCALPtMin   = 0.5 ;
-  fPHOSPtMin   = 0.5 ;
+  fEMCALPtMin = 0.2 ;
+  fPHOSPtMin  = 0.2 ;
 
   fFillEMCAL = kTRUE;
   fFillPHOS = kTRUE;
@@ -198,6 +203,7 @@ void AliCaloTrackReader::InitParameters()
   fFillPHOSCells = kFALSE;
 
   fFidutialCut = new AliFidutialCut();
+  fMCUtils = new AliMCAnalysisUtils();
 
 }
 
@@ -220,26 +226,35 @@ void AliCaloTrackReader::Print(const Option_t * opt) const
   printf("Use PHOS        =     %d\n", fFillPHOS) ;
   printf("Use EMCAL Cells =     %d\n", fFillEMCALCells) ;
   printf("Use PHOS  Cells =     %d\n", fFillPHOSCells) ;
+  printf("Compare jet pt and pt hard to accept event = %d\n",fComparePtHardAndJetPt);
+       
   printf("    \n") ;
 } 
 
 //___________________________________________________
-void AliCaloTrackReader::FillInputEvent(const Int_t iEntry, const char * currentFileName) {
+Bool_t AliCaloTrackReader::FillInputEvent(const Int_t iEntry, const char * currentFileName) {
   //Fill the event counter and input lists that are needed, called by the analysis maker.
   
   fEventNumber = iEntry;
   fCurrentFileName = TString(currentFileName);
        
   if((fDataType != kAOD) && ((fOutputEvent->GetCaloClusters())->GetEntriesFast()!=0 ||(fOutputEvent->GetTracks())->GetEntriesFast()!=0)){
-    printf("ABORT: AliCaloTrackReader::AODCaloClusters or AODTracks already filled by the filter, do not use the ESD reader, use the AOD reader\n");
+    printf("AliCaloTrackReader::AODCaloClusters or AODTracks already filled by the filter, do not use the ESD reader, use the AOD reader, STOP\n");
     abort();
   }
+       
+  //In case of analysis of events with jets, skip those with jet pt > 5 pt hard        
+  if(fComparePtHardAndJetPt && GetStack()) {
+               if(!fMCUtils->ComparePtHardAndJetPt(GetGenEventHeader())) return kFALSE ;
+  }
+       
   if(fFillCTS)   FillInputCTS();
   if(fFillEMCAL) FillInputEMCAL();
   if(fFillPHOS)  FillInputPHOS();
   if(fFillEMCALCells) FillInputEMCALCells();
   if(fFillPHOSCells)  FillInputPHOSCells();
 
+  return kTRUE ;
 }
 
 //__________________________________________________
index 76e7a5f..7a38ae6 100755 (executable)
@@ -30,6 +30,7 @@ class AliVEvent;
 class AliAODEvent;  
 class AliMCEvent;
 class AliFidutialCut;
+class AliMCAnalysisUtils;
 
 class AliCaloTrackReader : public TObject {
 
@@ -84,7 +85,7 @@ class AliCaloTrackReader : public TObject {
   void SwitchOnPHOSCells()   {fFillPHOSCells = kTRUE ; }
   void SwitchOffPHOSCells()  {fFillPHOSCells = kFALSE ; }
 
-  virtual void FillInputEvent(const Int_t iEntry, const char *currentFileName)  ;
+  virtual Bool_t FillInputEvent(const Int_t iEntry, const char *currentFileName)  ;
   virtual void FillInputCTS()   {;}
   virtual void FillInputEMCAL() {;}
   virtual void FillInputPHOS()  {;}
@@ -114,6 +115,12 @@ class AliCaloTrackReader : public TObject {
   virtual AliFidutialCut * GetFidutialCut() const {return  fFidutialCut ;}
   virtual void SetFidutialCut(AliFidutialCut * fc) { fFidutialCut = fc ;}
 
+  virtual AliMCAnalysisUtils * GetMCAnalysisUtils() const {return  fMCUtils ;}
+  virtual void SetMCAnalysisUtils(AliMCAnalysisUtils * mcutils) { fMCUtils = mcutils ;}        
+       
+  virtual Bool_t IsPtHardAndJetPtComparisonSet() const {return  fComparePtHardAndJetPt ;}
+  virtual void SetPtHardAndJetPtComparison(Bool_t compare) { fComparePtHardAndJetPt = compare ;}       
+       
   virtual void SetInputOutputMCEvent(AliVEvent* /*esd*/, AliAODEvent* /*aod*/, AliMCEvent* /*mc*/) {;}
 
  protected:
@@ -122,7 +129,9 @@ class AliCaloTrackReader : public TObject {
   Int_t            fDataType ;   // Select MC:Kinematics, Data:ESD/AOD, MCData:Both
   Int_t            fDebug;       // Debugging level
   AliFidutialCut * fFidutialCut; // Acceptance cuts
-               
+  AliMCAnalysisUtils * fMCUtils; // MonteCarlo Analysis utils 
+  Bool_t           fComparePtHardAndJetPt; //In MonteCarlo, jet events, reject fake events with wrong jet energy.
+       
   Float_t        fCTSPtMin;      // pT Threshold on charged particles 
   Float_t        fEMCALPtMin;    // pT Threshold on emcal clusters
   Float_t        fPHOSPtMin;     // pT Threshold on phos clusters
@@ -143,7 +152,7 @@ class AliCaloTrackReader : public TObject {
   Bool_t         fFillEMCALCells; // use data from EMCAL
   Bool_t         fFillPHOSCells;  // use data from PHOS
 
-  ClassDef(AliCaloTrackReader,4)
+  ClassDef(AliCaloTrackReader,5)
 } ;
 
 
index b1a567e..a79fadd 100755 (executable)
@@ -40,7 +40,7 @@
  //________________________________________________\r
   AliMCAnalysisUtils::AliMCAnalysisUtils() : \r
     TObject(), fCurrentEvent(-1), fDebug(-1), \r
-    fJetsList(new TList), fMCGenerator("PYTHIA")\r
+    fJetsList(new TList), fMCGenerator("PYTHIA"), fpTHardpTJetFactor(7)\r
 {\r
   //Ctor\r
 }\r
@@ -48,7 +48,7 @@
 //____________________________________________________________________________\r
 AliMCAnalysisUtils::AliMCAnalysisUtils(const AliMCAnalysisUtils & mcutils) :   \r
   TObject(mcutils), fCurrentEvent(mcutils.fCurrentEvent), fDebug(mcutils.fDebug),\r
-  fJetsList(mcutils.fJetsList), fMCGenerator(mcutils.fMCGenerator)\r
+  fJetsList(mcutils.fJetsList), fMCGenerator(mcutils.fMCGenerator), fpTHardpTJetFactor(mcutils.fpTHardpTJetFactor)\r
 {\r
   // cpy ctor\r
   \r
@@ -64,6 +64,7 @@ AliMCAnalysisUtils & AliMCAnalysisUtils::operator = (const AliMCAnalysisUtils &
   fDebug        = mcutils.fDebug;\r
   fJetsList     = mcutils.fJetsList;\r
   fMCGenerator  = mcutils.fMCGenerator;\r
+  fpTHardpTJetFactor = mcutils.fpTHardpTJetFactor;\r
   \r
   return *this; \r
 }\r
@@ -178,24 +179,24 @@ Int_t AliMCAnalysisUtils::CheckOrigin(const Int_t label, AliStack * stack) const
        else if (pPdg == 23) return kMCZDecay;   //parent is Z-boson\r
        else if (pPdg == 24) return kMCWDecay;   //parent is W-boson\r
        else { //check the electron's ancestors for B/C contribution\r
-         Bool_t BAncestor = kFALSE;\r
-         Bool_t CAncestor = kFALSE;\r
+         Bool_t bAncestor = kFALSE;\r
+         Bool_t cAncestor = kFALSE;\r
          TParticle * ancestors = stack->Particle(label);\r
          Int_t aPdg = TMath::Abs(ancestors->GetPdgCode());\r
          //Int_t aStatus = ancestors->GetStatusCode();\r
          Int_t iAncestors = ancestors->GetFirstMother();\r
          if(fDebug > 0) printf("AliMCAnalysisUtils::CheckOrigin: Scaning the decay chain for bottom/charm generated electron");\r
          while(ancestors->IsPrimary()){//searching for ancestors \r
-           if((499 < aPdg && aPdg < 600)||(4999 < aPdg && aPdg < 6000)) BAncestor = kTRUE;\r
-           if((399 < aPdg && aPdg < 500)||(3999 < aPdg && aPdg < 5000)) CAncestor = kTRUE;\r
-           if(BAncestor && CAncestor) break;\r
+           if((499 < aPdg && aPdg < 600)||(4999 < aPdg && aPdg < 6000)) bAncestor = kTRUE;\r
+           if((399 < aPdg && aPdg < 500)||(3999 < aPdg && aPdg < 5000)) cAncestor = kTRUE;\r
+           if(bAncestor && cAncestor) break;\r
            iAncestors = ancestors->GetFirstMother();\r
            ancestors = stack->Particle(iAncestors);\r
            aPdg = ancestors->GetPdgCode();\r
          }//searching for ancestors\r
-         if(BAncestor && CAncestor) return kMCEFromCFromB;//Decay chain has both B and C\r
-         else if(BAncestor && !CAncestor) return kMCEFromB;//Decay chain has only B\r
-         else if(!BAncestor && CAncestor) return kMCEFromC;//Decay chain has only C \r
+         if(bAncestor && cAncestor) return kMCEFromCFromB;//Decay chain has both B and C\r
+         else if(bAncestor && !cAncestor) return kMCEFromB;//Decay chain has only B\r
+         else if(!bAncestor && cAncestor) return kMCEFromC;//Decay chain has only C \r
        }\r
        //if it is not from W,Z or B/C ancestor, where is it from?\r
        if     (pPdg == 111) return kMCPi0Decay;//Pi0 Dalitz decay\r
@@ -213,29 +214,29 @@ Int_t AliMCAnalysisUtils::CheckOrigin(const Int_t label, AliStack * stack) const
        //these histories for MC labels connected to a reco object.\r
        //If you wanted to use this to sort through the kine stack\r
        //directly, might it be a problem?\r
-       Bool_t EleFromEvGen = kFALSE;\r
-       Bool_t BAncestor = kFALSE;\r
-        Bool_t CAncestor = kFALSE;\r
+       Bool_t eleFromEvGen = kFALSE;\r
+       Bool_t bAncestor = kFALSE;\r
+       Bool_t cAncestor = kFALSE;\r
 \r
        TParticle * ancestors = stack->Particle(label);\r
-        Int_t aPdg = TMath::Abs(ancestors->GetPdgCode());\r
-        Int_t aStatus = ancestors->GetStatusCode();\r
-        Int_t iAncestors = ancestors->GetFirstMother();\r
-        if(fDebug > 0) printf("AliMCAnalysisUtils::CheckOrigin: Scaning the decay chain for bottom/charm electrons");\r
+       Int_t aPdg = TMath::Abs(ancestors->GetPdgCode());\r
+       Int_t aStatus = ancestors->GetStatusCode();\r
+       Int_t iAncestors = ancestors->GetFirstMother();\r
+       if(fDebug > 0) printf("AliMCAnalysisUtils::CheckOrigin: Scaning the decay chain for bottom/charm electrons");\r
        while(ancestors->IsPrimary()){//searching for ancestors\r
-         if(aStatus == 1 && aPdg == 11) EleFromEvGen = kTRUE;\r
-         if(EleFromEvGen && aPdg == 23) return kMCZDecay;\r
-         if(EleFromEvGen && aPdg == 24) return kMCWDecay;\r
-         if(EleFromEvGen && ((499 < aPdg && aPdg < 600)||(4999 < aPdg && aPdg < 6000))) BAncestor = kTRUE;\r
-         if(EleFromEvGen && ((399 < aPdg && aPdg < 500)||(3999 < aPdg && aPdg < 5000))) CAncestor = kTRUE;\r
-         if(BAncestor && CAncestor) break;\r
+         if(aStatus == 1 && aPdg == 11) eleFromEvGen = kTRUE;\r
+         if(eleFromEvGen && aPdg == 23) return kMCZDecay;\r
+         if(eleFromEvGen && aPdg == 24) return kMCWDecay;\r
+         if(eleFromEvGen && ((499 < aPdg && aPdg < 600)||(4999 < aPdg && aPdg < 6000))) bAncestor = kTRUE;\r
+         if(eleFromEvGen && ((399 < aPdg && aPdg < 500)||(3999 < aPdg && aPdg < 5000))) cAncestor = kTRUE;\r
+         if(bAncestor && cAncestor) break;\r
          iAncestors = ancestors->GetFirstMother();\r
           ancestors = stack->Particle(iAncestors);\r
           aPdg = ancestors->GetPdgCode();\r
         }//searching for ancestors\r
-       if(BAncestor && CAncestor) return kMCEFromCFromB;//Decay chain has both B and C\r
-       else if(BAncestor && !CAncestor) return kMCEFromB;//Decay chain has only B\r
-       else if(!BAncestor && CAncestor) return kMCEFromC;//Decay chain has only C\r
+       if(bAncestor && cAncestor) return kMCEFromCFromB;//Decay chain has both B and C\r
+       else if(bAncestor && !cAncestor) return kMCEFromB;//Decay chain has only B\r
+       else if(!bAncestor && cAncestor) return kMCEFromC;//Decay chain has only C\r
        if(pPdg ==22 || pPdg ==11|| pPdg == 2112 ||  pPdg == 211 ||  \r
           pPdg == 321 ||  pPdg == 2212  ||  pPdg == 130  ||  pPdg == 13 ) \r
          return kMCConversion ;\r
@@ -257,7 +258,7 @@ Int_t AliMCAnalysisUtils::CheckOrigin(const Int_t label, AliStack * stack) const
 }\r
 \r
 //_________________________________________________________________________\r
-TList * AliMCAnalysisUtils::GetJets(Int_t iEvent, AliStack * stack, AliGenEventHeader * geh) {\r
+TList * AliMCAnalysisUtils::GetJets(const Int_t iEvent, AliStack * stack, const AliGenEventHeader * geh) {\r
  //Return list of jets (TParticles) and index of most likely parton that originated it.\r
        \r
   if(fCurrentEvent!=iEvent){\r
@@ -401,6 +402,37 @@ TList * AliMCAnalysisUtils::GetJets(Int_t iEvent, AliStack * stack, AliGenEventH
   return fJetsList;\r
 }\r
 \r
+\r
+//_________________________________________________________________________\r
+Bool_t AliMCAnalysisUtils::ComparePtHardAndJetPt(const AliGenEventHeader * geh){\r
+       // Check the event, if the requested ptHard is much larger than the jet pT, then there is a problem.\r
+       // Only for PYTHIA.\r
+       \r
+    if(fMCGenerator == "PYTHIA"){\r
+               TParticle * jet =  new TParticle;\r
+               AliGenPythiaEventHeader* pygeh= (AliGenPythiaEventHeader*) geh;\r
+               Int_t nTriggerJets =  pygeh->NTriggerJets();\r
+               Float_t ptHard = pygeh->GetPtHard();\r
+\r
+               //if(fDebug > 1) printf("AliMCAnalysisUtils::PythiaEventHeader: Njets: %d, pT Hard %f\n",nTriggerJets, ptHard);\r
+           Float_t tmpjet[]={0,0,0,0};\r
+               for(Int_t ijet = 0; ijet< nTriggerJets; ijet++){\r
+                       pygeh->TriggerJet(ijet, tmpjet);\r
+                       jet = new TParticle(94, 21, -1, -1, -1, -1, tmpjet[0],tmpjet[1],tmpjet[2],tmpjet[3], 0,0,0,0);\r
+                       //Compare jet pT and pt Hard\r
+                       //if(fDebug > 1) printf("AliMCAnalysisUtils:: %d pycell jet pT %f\n",ijet, jet->Pt());\r
+                       if(jet->Pt() > fpTHardpTJetFactor * ptHard) {\r
+                               printf("AliMCAnalysisUtils::PythiaEventHeader: Njets: %d, pT Hard %2.2f, pycell jet pT %2.2f, rejection factor %1.1f\n",\r
+                                               nTriggerJets, ptHard, jet->Pt(), fpTHardpTJetFactor);\r
+                               return kFALSE;\r
+                       }\r
+               }\r
+       }               \r
\r
+       return kTRUE ;\r
+\r
+}\r
+\r
 //________________________________________________________________\r
 void AliMCAnalysisUtils::Print(const Option_t * opt) const\r
 {\r
@@ -413,7 +445,7 @@ void AliMCAnalysisUtils::Print(const Option_t * opt) const
  \r
  printf("Debug level    = %d\n",fDebug);\r
  printf("MC Generator   = %s\n",fMCGenerator.Data());\r
\r
+ printf("fpTHardpTJetFactor = %2.2f",fpTHardpTJetFactor);\r
  printf(" \n");\r
  \r
 } \r
index a0f5fc1..0a82de4 100755 (executable)
@@ -34,7 +34,9 @@ public:
   enum mcTypes {kMCPrompt, kMCFragmentation, kMCISR, kMCPi0Decay, kMCEtaDecay, kMCOtherDecay, kMCPi0, kMCEta, kMCElectron, kMCConversion, kMCUnknown, kMCEFromCFromB, kMCEFromC, kMCEFromB,kMCZDecay,kMCWDecay};\r
        \r
        Int_t CheckOrigin(const Int_t label, AliStack *  stack) const ;\r
-       TList * GetJets(Int_t iEvent, AliStack *  stack, AliGenEventHeader * geh) ;\r
+       TList * GetJets(const Int_t iEvent, AliStack *  stack, const AliGenEventHeader * geh) ;\r
+       \r
+       Bool_t ComparePtHardAndJetPt(const AliGenEventHeader * geh) ;\r
        \r
        void Print(const Option_t * opt)const;\r
        \r
@@ -45,12 +47,13 @@ public:
        TString GetMCGenerator() const {return fMCGenerator;}   \r
 \r
 private:\r
-       Int_t   fCurrentEvent; // Current Event\r
-       Int_t   fDebug;        // Debug level\r
-       TList * fJetsList;      // List of jets\r
-       TString fMCGenerator;  // MC geneator used to generate data in simulation\r
-\r
-       ClassDef(AliMCAnalysisUtils,1)\r
+       Int_t   fCurrentEvent;      // Current Event\r
+       Int_t   fDebug;             // Debug level\r
+       TList * fJetsList;          // List of jets\r
+       TString fMCGenerator;       // MC geneator used to generate data in simulation\r
+       Float_t fpTHardpTJetFactor; // Factor between ptHard and jet pT to reject event.\r
+       \r
+       ClassDef(AliMCAnalysisUtils,2)\r
 } ;\r
 \r
 \r