fRL(0),
fkFileName(0),
fFragPhotonInCalo(kFALSE),
+ fHadronInCalo(kFALSE) ,
fPi0InCalo(kFALSE) ,
fPhotonInCalo(kFALSE),
fEleInEMCAL(kFALSE),
fCheckEMCAL(kFALSE),
fCheckPHOS(kFALSE),
fCheckPHOSeta(kFALSE),
- fFragPhotonOrPi0MinPt(0),
+ fTriggerParticleMinPt(0),
fPhotonMinPt(0),
fElectronMinPt(0),
fPHOSMinPhi(219.),
fRL(0),
fkFileName(0),
fFragPhotonInCalo(kFALSE),
+ fHadronInCalo(kFALSE) ,
fPi0InCalo(kFALSE) ,
fPhotonInCalo(kFALSE),
fEleInEMCAL(kFALSE),
fCheckEMCAL(kFALSE),
fCheckPHOS(kFALSE),
fCheckPHOSeta(kFALSE),
- fFragPhotonOrPi0MinPt(0),
+ fTriggerParticleMinPt(0),
fPhotonMinPt(0),
fElectronMinPt(0),
fPHOSMinPhi(219.),
}
}
- // Select jets with fragmentation photon or pi0 going to PHOS or EMCAL
- if (fProcess == kPyJets && (fFragPhotonInCalo || fPi0InCalo) ) {
-
- Bool_t ok = kFALSE;
-
- Int_t pdg = 0;
- if (fFragPhotonInCalo) pdg = 22 ; // Photon
- else if (fPi0InCalo) pdg = 111 ; // Pi0
-
- for (i=0; i< np; i++) {
- TParticle* iparticle = (TParticle *) fParticles.At(i);
- if(iparticle->GetStatusCode()==1 && iparticle->GetPdgCode()==pdg &&
- iparticle->Pt() > fFragPhotonOrPi0MinPt){
- Int_t imother = iparticle->GetFirstMother() - 1;
- TParticle* pmother = (TParticle *) fParticles.At(imother);
- if(pdg == 111 ||
- (pdg == 22 && pmother->GetStatusCode() != 11)) //No photon from hadron decay
- {
- Float_t phi = iparticle->Phi()*180./TMath::Pi(); //Convert to degrees
- Float_t eta =TMath::Abs(iparticle->Eta()); //in calos etamin=-etamax
- if((fCheckEMCAL && IsInEMCAL(phi,eta)) ||
- (fCheckPHOS && IsInPHOS(phi,eta)) )
- ok =kTRUE;
- }
- }
+ // Select jets with fragmentation photon or pi0 or hadrons going to PHOS or EMCAL
+ if ( fProcess == kPyJets &&
+ (fFragPhotonInCalo || fPi0InCalo || fHadronInCalo) &&
+ (fCheckPHOS || fCheckEMCAL) ) {
+
+ Bool_t ok = kFALSE;
+
+ for (i=0; i< np; i++) {
+
+ TParticle* iparticle = (TParticle *) fParticles.At(i);
+
+ Int_t pdg = iparticle->GetPdgCode();
+ Int_t status = iparticle->GetStatusCode();
+ ok = kFALSE;
+
+ if (fFragPhotonInCalo && pdg == 22 && status == 1)
+ {
+ Int_t imother = iparticle->GetFirstMother() - 1;
+ TParticle* pmother = (TParticle *) fParticles.At(imother);
+
+ if(pmother->GetStatusCode() != 11) ok = kTRUE ; // No photon from hadron decay
}
- if(!ok) {
- delete[] pParent;
- return 0;
+ else if (fPi0InCalo && pdg == 111) // pi0 status can be 1 or 11 depending on decay settings
+ {
+ //printf("Pi0! pdg %d, status %d, pt %2.2f\n",pdg,status,iparticle->Pt());
+ ok = kTRUE;
+ }
+ else if (fHadronInCalo && status == 1)
+ {
+ if(TMath::Abs(pdg) > 23 && pdg !=221 && pdg != 111) // avoid photons, electrons, muons, neutrinos and eta or pi0
+ // (in case neutral mesons were declared stable)
+ ok = kTRUE;
}
+
+ if(ok && iparticle->Pt() > fTriggerParticleMinPt)
+ {
+ Float_t phi = iparticle->Phi()*180./TMath::Pi(); //Convert to degrees
+ Float_t eta =TMath::Abs(iparticle->Eta()); //in calos etamin=-etamax
+
+ if((fCheckEMCAL && IsInEMCAL(phi,eta)) ||
+ (fCheckPHOS && IsInPHOS (phi,eta)) )
+ {
+ ok =kTRUE;
+ AliDebug(1,Form("Selected trigger pdg %d, status %d, pt %2.2f, eta %2.2f, phi %2.2f\n",pdg,status,iparticle->Pt(), eta, phi));
+ break;
+ }
+ }
+ else ok = kFALSE;
}
+
+ if(!ok) {
+ delete[] pParent;
+ return 0;
+ }
+ }
- // Select beauty jets with electron in EMCAL
+ // Select beauty jets with electron in EMCAL
if (fProcess == kPyBeautyJets && fEleInEMCAL) {
Bool_t ok = kFALSE;
{fPhiMinGamma = TMath::Pi()*phimin/180.; fPhiMaxGamma = TMath::Pi()*phimax/180.;}
// Select jets with fragmentation photon or pi0 going to PHOS or EMCAL
virtual void SetFragPhotonInCalo(Bool_t b) {fFragPhotonInCalo = b;}
+ virtual void SetHadronInCalo (Bool_t b) {fHadronInCalo = b;}
virtual void SetPi0InCalo (Bool_t b) {fPi0InCalo = b;}
virtual void SetPhotonInCalo(Bool_t b) {fPhotonInCalo = b;}
virtual void SetCheckPHOS (Bool_t b) {fCheckPHOS = b;}
virtual void SetCheckEMCAL(Bool_t b) {fCheckEMCAL = b;}
virtual void SetFragPhotonInEMCAL(Bool_t b) {fCheckEMCAL = b; fFragPhotonInCalo = b;}
virtual void SetFragPhotonInPHOS(Bool_t b) {fCheckPHOS = b; fFragPhotonInCalo = b;}
+ virtual void SetHadronInEMCAL(Bool_t b) {fCheckEMCAL = b; fHadronInCalo = b;}
+ virtual void SetHadronInPHOS(Bool_t b) {fCheckPHOS = b; fHadronInCalo = b;}
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;}
{fTriggerMultiplicity = multiplicity; fTriggerMultiplicityEta = etamax;
fTriggerMultiplicityPtMin = ptmin;}
- 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;}
+ // Calorimeters acceptance
+ // Set Phi in degrees, and Eta coverage, should not be negative
+ virtual void SetEMCALAcceptance(Float_t phimin, Float_t phimax, Float_t deta) {fEMCALMinPhi = phimin ; fEMCALMaxPhi = phimax ; fEMCALEta = deta ; }
+ virtual void SetPHOSAcceptance (Float_t phimin, Float_t phimax, Float_t deta) {fPHOSMinPhi = phimin ; fPHOSMaxPhi = phimax ; fPHOSEta = deta ; }
+
+ virtual void SetPhotonInPHOSeta(Bool_t b) {fCheckPHOSeta = b; fPhotonInCalo = b;}
+ virtual void SetTriggerParticleMinPt(Float_t pt) {fTriggerParticleMinPt = 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 fHadronInCalo; // Option to ask for hadron (not pi0) 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 fTriggerParticleMinPt; // Minimum momentum of Fragmentation Photon or Pi0 or other hadron
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
- Float_t fPHOSEta; // Minimum eta PHOS
- Float_t fEMCALMinPhi; // Minimum phi EMCAL
- Float_t fEMCALMaxPhi; // Maximum phi EMCAL
- Float_t fEMCALEta; // Maximum eta EMCAL
+ Float_t fPHOSMinPhi; // Minimum phi PHOS, degrees
+ Float_t fPHOSMaxPhi; // Maximum phi PHOS, degrees
+ Float_t fPHOSEta; // Minimum eta PHOS, coverage delta eta
+ Float_t fEMCALMinPhi; // Minimum phi EMCAL, degrees
+ Float_t fEMCALMaxPhi; // Maximum phi EMCAL, degrees
+ Float_t fEMCALEta; // Maximum eta EMCAL, coverage delta eta
Bool_t fkTuneForDiff; // Pythia tune
Int_t fProcDiff;
Bool_t GetWeightsDiffraction(Double_t M, Double_t &Mmin, Double_t &Mmax,
Double_t &wSD, Double_t &wDD, Double_t &wND);
- ClassDef(AliGenPythia, 12) // AliGenerator interface to Pythia
+ ClassDef(AliGenPythia, 13) // AliGenerator interface to Pythia
};
#endif