fFragPhotonInCalo(kFALSE),
fPi0InCalo(kFALSE) ,
fPhotonInCalo(kFALSE),
+ fEleInEMCAL(kFALSE),
fCheckEMCAL(kFALSE),
fCheckPHOS(kFALSE),
fCheckPHOSeta(kFALSE),
fFragPhotonOrPi0MinPt(0),
fPhotonMinPt(0),
+ fElectronMinPt(0),
fPHOSMinPhi(219.),
fPHOSMaxPhi(321.),
fPHOSEta(0.13),
fFragPhotonInCalo(kFALSE),
fPi0InCalo(kFALSE) ,
fPhotonInCalo(kFALSE),
+ fEleInEMCAL(kFALSE),
fCheckEMCAL(kFALSE),
fCheckPHOS(kFALSE),
fCheckPHOSeta(kFALSE),
fFragPhotonOrPi0MinPt(0),
fPhotonMinPt(0),
+ fElectronMinPt(0),
fPHOSMinPhi(219.),
fPHOSMaxPhi(321.),
fPHOSEta(0.13),
fFlavorSelect = 4;
break;
case kPyBeauty:
+ case kPyBeautyJets:
case kPyBeautyPbPbMNR:
case kPyBeautypPbMNR:
case kPyBeautyppMNR:
fProcess != kPyW &&
fProcess != kPyZ &&
fProcess != kPyCharmppMNRwmi &&
- fProcess != kPyBeautyppMNRwmi) {
+ fProcess != kPyBeautyppMNRwmi &&
+ fProcess != kPyBeautyJets) {
for (i = 0; i < np; i++) {
TParticle* iparticle = (TParticle *) fParticles.At(i);
Int_t* pParent = new Int_t[np];
for (i=0; i< np; i++) pParent[i] = -1;
- if (fProcess == kPyJets || fProcess == kPyDirectGamma) {
+ //
+ //TO BE CHECKED: Should we require this for Beauty Jets?
+ //
+ if (fProcess == kPyJets || fProcess == kPyDirectGamma || fProcess == kPyBeautyJets) {
TParticle* jet1 = (TParticle *) fParticles.At(6);
TParticle* jet2 = (TParticle *) fParticles.At(7);
if (!CheckTrigger(jet1, jet2)) {
if(!ok)
return 0;
}
+
+ // Select beauty jets with electron in EMCAL
+ if (fProcess == kPyBeautyJets && fEleInEMCAL) {
+
+ Bool_t ok = kFALSE;
+
+ Int_t pdg = 11; //electron
+
+ Float_t pt, eta, phi;
+ for (i=0; i< np; i++) {
+ TParticle* iparticle = (TParticle *) fParticles.At(i);
+ if(iparticle->GetStatusCode()==1 && TMath::Abs(iparticle->GetPdgCode())==pdg &&
+ iparticle->Pt() > fElectronMinPt){
+ pt = iparticle->Pt();
+ phi = iparticle->Phi()*180./TMath::Pi(); //Convert to degrees
+ eta =TMath::Abs(iparticle->Eta()); //in calos etamin=-etamax
+ if(IsInEMCAL(phi,eta))
+ ok =kTRUE;
+ }
+ }
+ if(!ok)
+ return 0;
+ AliDebug(5,Form("Found an electron jet (pt,eta,phi) = (%f,%f,%f)",pt,eta,phi));
+ }
// Check for minimum multiplicity
if (fTriggerMultiplicity > 0) {
// Check if there is a ccbar or bbbar pair with at least one of the two
// in fYMin < y < fYMax
- if (fProcess == kPyCharmppMNRwmi || fProcess == kPyBeautyppMNRwmi) {
+ //
+ // TO BE CHECKED: Should we require this for beauty jets?
+ //
+ if (fProcess == kPyCharmppMNRwmi || fProcess == kPyBeautyppMNRwmi || fProcess == kPyBeautyJets) {
TParticle *partCheck;
TParticle *mother;
Bool_t theQ=kFALSE,theQbar=kFALSE,inYcut=kFALSE;
Int_t km = iparticle->GetFirstMother();
if ((ks == 1 && kf!=0 && KinematicSelection(iparticle, 0)) ||
(ks != 1) ||
- (fProcess == kPyJets && ks == 21 && km == 0 && i>1)) {
+ //
+ //TO BE CHECKED: Should we require this for beauty jets?
+ //
+ ((fProcess == kPyJets || fProcess == kPyBeautyJets) && ks == 21 && km == 0 && i>1)) {
nc++;
if (ks == 1) trackIt = 1;
Int_t ipa = iparticle->GetFirstMother()-1;
//
// Jets that have triggered
- if (fProcess == kPyJets || fProcess == kPyDirectGamma)
+ //Need to store jets for b-jet studies too!
+ if (fProcess == kPyJets || fProcess == kPyDirectGamma || fProcess == kPyBeautyJets)
{
Int_t ntrig, njet;
Float_t jets[4][10];
pdg[1] = jet2->GetPdgCode();
Bool_t triggered = kFALSE;
- if (fProcess == kPyJets) {
+ //
+ //TO BE CHECKED: If we call this method for kPyBeautyJets, we need it here
+ //
+ if (fProcess == kPyJets || fProcess == kPyBeautyJets) {
Int_t njets = 0;
Int_t ntrig = 0;
Float_t jets[4][10];
virtual void SetPi0InEMCAL(Bool_t b) {fCheckEMCAL = b; fPi0InCalo = b;}
virtual void SetPi0InPHOS(Bool_t b) {fCheckPHOS = b; fPi0InCalo = b;}
virtual void SetPhotonInEMCAL(Bool_t b) {fCheckEMCAL = b; fPhotonInCalo = b;}
+ virtual void SetElectronInEMCAL(Bool_t b) {fEleInEMCAL = b;}
virtual void SetPhotonInPHOS(Bool_t b) {fCheckPHOS = b; fPhotonInCalo = b;}
// Trigger on a minimum multiplicity
virtual void SetPhotonInPHOSeta(Bool_t b) {fCheckPHOSeta = b; fPhotonInCalo = b;}
virtual void SetFragPhotonOrPi0MinPt(Float_t pt) {fFragPhotonOrPi0MinPt = pt;}
virtual void SetPhotonMinPt(Float_t pt) {fPhotonMinPt = pt;}
+ virtual void SetElectronMinPt(Float_t pt) {fElectronMinPt = pt;}
// Trigger and rotate event
void RotatePhi(Int_t iphcand, Bool_t& okdd);
// Trigger on a single particle
Bool_t fFragPhotonInCalo; // Option to ask for Fragmentation Photon in calorimeters acceptance
Bool_t fPi0InCalo; // Option to ask for Pi0 in calorimeters acceptance
Bool_t fPhotonInCalo; // Option to ask for Decay Photon in calorimeter acceptance
+ Bool_t fEleInEMCAL; // Option to ask for Electron in EMCAL acceptance
Bool_t fCheckEMCAL; // Option to ask for FragPhoton or Pi0 in calorimeters EMCAL acceptance
Bool_t fCheckPHOS; // Option to ask for FragPhoton or Pi0 in calorimeters PHOS acceptance
Bool_t fCheckPHOSeta; // Option to ask for PHOS eta acceptance
Float_t fFragPhotonOrPi0MinPt; // Minimum momentum of Fragmentation Photon or Pi0
Float_t fPhotonMinPt; // Minimum momentum of Photon
+ Float_t fElectronMinPt; // Minimum momentum of Electron
//Calorimeters eta-phi acceptance
Float_t fPHOSMinPhi; // Minimum phi PHOS
Float_t fPHOSMaxPhi; // Maximum phi PHOS
AliGenPythia(const AliGenPythia &Pythia);
AliGenPythia & operator=(const AliGenPythia & rhs);
- ClassDef(AliGenPythia,8) // AliGenerator interface to Pythia
+ ClassDef(AliGenPythia,9) // AliGenerator interface to Pythia
};
#endif
kPyCharmPbPbMNR, kPyD0PbPbMNR, kPyDPlusPbPbMNR, kPyDPlusStrangePbPbMNR, kPyBeautyPbPbMNR,
kPyCharmpPbMNR, kPyD0pPbMNR, kPyDPluspPbMNR, kPyDPlusStrangepPbMNR, kPyBeautypPbMNR,
kPyCharmppMNR, kPyCharmppMNRwmi, kPyD0ppMNR, kPyDPlusppMNR, kPyDPlusStrangeppMNR,
- kPyBeautyppMNR, kPyBeautyppMNRwmi, kPyW, kPyZ, kPyMbMSEL1,
+ kPyBeautyppMNR, kPyBeautyppMNRwmi, kPyBeautyJets, kPyW, kPyZ, kPyMbMSEL1,
kPyOldUEQ2ordered, kPyOldUEQ2ordered2, kPyOldPopcorn,
kPyLhwgMb, kPyMbDefault
}