- //Play with the MC stack if available
- //Check origin of the candidates, good for PYTHIA
-
- if(!stack) AliFatal("Stack is not available, check analysis settings in configuration file, STOP!!");
-
- if(label >= 0 && label < stack->GetNtrack()){
- //Mother
- TParticle * mom = stack->Particle(label);
- Int_t mPdg = TMath::Abs(mom->GetPdgCode());
- Int_t mStatus = mom->GetStatusCode() ;
- Int_t iParent = mom->GetFirstMother() ;
- if(fDebug > 0 && label < 8 ) printf("AliCaloPID::CheckOrigin: Mother is parton %d\n",iParent);
-
- //GrandParent
- TParticle * parent = new TParticle ;
- Int_t pPdg = -1;
- Int_t pStatus =-1;
- if(iParent > 0){
- parent = stack->Particle(iParent);
- pPdg = TMath::Abs(parent->GetPdgCode());
- pStatus = parent->GetStatusCode();
- }
- else if(fDebug > 0 ) printf("AliCaloPID::CheckOrigin: Parent with label %d\n",iParent);
-
- //return tag
- if(mPdg == 22){
- if(mStatus == 1){
- if(iParent < 8) {
- if(pPdg == 22) return kMCPrompt;
- else return kMCFragmentation;
- }
- else if(pStatus == 11){
- if(pPdg == 111) return kMCPi0Decay ;
- else if (pPdg == 321) return kMCEtaDecay ;
- else return kMCOtherDecay ;
- }
- }//Status 1 : Pythia generated
- else if(mStatus == 0){
- if(pPdg ==22 || pPdg ==11) return kMCConversion ;
- if(pPdg == 111) return kMCPi0Decay ;
- else if (pPdg == 221) return kMCEtaDecay ;
- else return kMCOtherDecay ;
- }//status 0 : geant generated
- }//Mother Photon
- else if(mPdg == 111) return kMCPi0 ;
- else if(mPdg == 221) return kMCEta ;
- else if(mPdg ==11){
- if(mStatus == 0) return kMCConversion ;
- else return kMCElectron ;
- }
- else return kMCUnknown;
- }//Good label value
- else{
- if(label < 0 ) printf("AliCaloPID::CheckOrigin: *** bad label or no stack ***: label %d \n", label);
- if(label >= stack->GetNtrack()) printf("AliCaloPID::CheckOrigin: *** large label ***: label %d, n tracks %d \n", label, stack->GetNtrack());
- return kMCUnknown;
- }//Bad label
-
- return kMCUnknown;
-
+ //Play with the MC stack if available
+ //Check origin of the candidates, good for PYTHIA
+
+ if(!stack) AliFatal("Stack is not available, check analysis settings in configuration file, STOP!!");
+
+ if(label >= 0 && label < stack->GetNtrack()){
+ //Mother
+ TParticle * mom = stack->Particle(label);
+ Int_t mPdg = TMath::Abs(mom->GetPdgCode());
+ Int_t mStatus = mom->GetStatusCode() ;
+ Int_t iParent = mom->GetFirstMother() ;
+ if(fDebug > 0 && label < 8 ) printf("AliCaloPID::CheckOrigin: Mother is parton %d\n",iParent);
+
+ //GrandParent
+ TParticle * parent = new TParticle ;
+ Int_t pPdg = -1;
+ Int_t pStatus =-1;
+ if(iParent > 0){
+ parent = stack->Particle(iParent);
+ pPdg = TMath::Abs(parent->GetPdgCode());
+ pStatus = parent->GetStatusCode();
+ }
+ else if(fDebug > 0 ) printf("AliCaloPID::CheckOrigin: Parent with label %d\n",iParent);
+
+ //return tag
+ if(mPdg == 22){
+ if(mStatus == 1){
+ if(fMCGenerator == "PYTHIA"){
+ if(iParent < 8 && iParent > 5) {//outgoing partons
+ if(pPdg == 22) return kMCPrompt;
+ else return kMCFragmentation;
+ }//Outgoing partons
+ else if(pStatus == 11){//Decay
+ if(pPdg == 111) return kMCPi0Decay ;
+ else if (pPdg == 321) return kMCEtaDecay ;
+ else return kMCOtherDecay ;
+ }//Decay
+ else return kMCISR; //Initial state radiation
+ }//PYTHIA
+
+ else if(fMCGenerator == "HERWIG"){
+ if(pStatus < 197){//Not decay
+ while(1){
+ if(parent->GetFirstMother()<=5) break;
+ iParent = parent->GetFirstMother();
+ parent=stack->Particle(iParent);
+ pStatus= parent->GetStatusCode();
+ pPdg = parent->GetPdgCode();
+ }//Look for the parton
+
+ if(iParent < 8 && iParent > 5) {
+ if(pPdg == 22) return kMCPrompt;
+ else return kMCFragmentation;
+ }
+ return kMCISR;//Initial state radiation
+ }//Not decay
+ else{//Decay
+ if(pPdg == 111) return kMCPi0Decay ;
+ else if (pPdg == 321) return kMCEtaDecay ;
+ else return kMCOtherDecay ;
+ }//Decay
+ }//HERWIG
+ else return kMCUnknown;
+ }//Status 1 : Pythia generated
+ else if(mStatus == 0){
+ if(pPdg ==22 || pPdg ==11) return kMCConversion ;
+ if(pPdg == 111) return kMCPi0Decay ;
+ else if (pPdg == 221) return kMCEtaDecay ;
+ else return kMCOtherDecay ;
+ }//status 0 : geant generated
+ }//Mother Photon
+ else if(mPdg == 111) return kMCPi0 ;
+ else if(mPdg == 221) return kMCEta ;
+ else if(mPdg ==11){
+ printf("Origin electron, pT %f\n",mom->Pt());
+
+ if(mStatus == 0) return kMCConversion ;
+ else return kMCElectron ;
+ }
+ else return kMCUnknown;
+ }//Good label value
+ else{
+ if(label < 0 ) printf("AliCaloPID::CheckOrigin: *** bad label or no stack ***: label %d \n", label);
+ if(label >= stack->GetNtrack()) printf("AliCaloPID::CheckOrigin: *** large label ***: label %d, n tracks %d \n", label, stack->GetNtrack());
+ return kMCUnknown;
+ }//Bad label
+
+ return kMCUnknown;
+