#include "AliUtilityMuonAncestor.h"
#include "TDatabasePDG.h"
#include "TParticlePDG.h"
#include "TPDGCode.h"
#include "TMCProcess.h"
#include "TMath.h"
#include "AliMCEvent.h"
#include "AliVParticle.h"
#include "AliMCParticle.h"
#include "AliAODMCParticle.h"
#include "AliLog.h"
#include "AliAnalysisMuonUtility.h"
ClassImp(AliUtilityMuonAncestor)
AliUtilityMuonAncestor::AliUtilityMuonAncestor() :
TObject(),
fPx(0.),
fPy(0.),
fPz(0.),
fMask(0),
fAncestor(-999)
{
}
AliUtilityMuonAncestor::~AliUtilityMuonAncestor()
{
}
AliUtilityMuonAncestor::AliUtilityMuonAncestor(const AliUtilityMuonAncestor& obj) :
TObject(obj),
fPx(obj.fPx),
fPy(obj.fPy),
fPz(obj.fPz),
fMask(obj.fMask),
fAncestor(obj.fAncestor)
{
}
AliUtilityMuonAncestor& AliUtilityMuonAncestor::operator=(const AliUtilityMuonAncestor& obj)
{
if ( this != &obj ) {
TObject::operator=(obj);
fPx = obj.fPx;
fPy = obj.fPy;
fPz = obj.fPz;
fMask = obj.fMask;
fAncestor = obj.fAncestor;
}
return *this;
}
Bool_t AliUtilityMuonAncestor::BuildAncestor ( AliVParticle* track, const AliMCEvent* mcEvent )
{
if ( track->Px() == fPx && track->Py() == fPy && track->Pz() == fPz ) return kTRUE;
fPx = track->Px();
fPy = track->Py();
fPz = track->Pz();
fMask = 0;
fAncestor = -999;
if ( ! mcEvent ) return kFALSE;
AliVParticle* mcParticle = 0x0;
if ( AliAnalysisMuonUtility::IsMCTrack(track) ) mcParticle = track;
else {
Int_t trackLabel = track->GetLabel();
if ( trackLabel < 0 ) return kFALSE;
mcParticle = mcEvent->GetTrack(trackLabel);
}
SETBIT(fMask,kIsID);
Int_t recoPdg = mcParticle->PdgCode();
if ( TMath::Abs(recoPdg) == 13 ) SETBIT(fMask,kIsMuon);
Int_t imother = AliAnalysisMuonUtility::GetMotherIndex(mcParticle);
while ( imother >= 0 ) {
AliVParticle* part = mcEvent->GetTrack(imother);
Int_t absPdg = TMath::Abs(part->PdgCode());
if ( absPdg < 10 ) return kTRUE;
fAncestor = imother;
Bool_t isPrimary = AliAnalysisMuonUtility::IsPrimary(part, mcEvent);
if ( isPrimary ) {
Int_t mpdg = absPdg%100000;
if ( mpdg >= 100 && mpdg < 10000 ) {
Int_t flv = Int_t ( mpdg / TMath::Power(10, Int_t(TMath::Log10(mpdg) )));
if ( flv < 4 ) SETBIT(fMask,kHasLightParent);
else if ( flv >= 6 ) continue;
else {
TParticlePDG* partPdg = TDatabasePDG::Instance()->GetParticle(part->PdgCode());
if ( partPdg && ! partPdg->AntiParticle() ) SETBIT(fMask,kHasQuarkoniumParent);
else if ( flv == 4 ) SETBIT(fMask,kHasCharmParent);
else SETBIT(fMask,kHasBeautyParent);
}
}
}
else {
UInt_t mcProcess = AliAnalysisMuonUtility::GetMCProcess(part);
if ( mcProcess == kPHadronic ||
( mcProcess == 0 && part->Zv() < -90. ) ) {
SETBIT(fMask,kIsSecondary);
}
}
imother = AliAnalysisMuonUtility::GetMotherIndex(part);
}
return kTRUE;
}
Bool_t AliUtilityMuonAncestor::CheckAncestor ( AliVParticle* track, const AliMCEvent* mcEvent, Int_t ancestorPdg, Bool_t matchAbsPdg )
{
Int_t pdgCode = GetAncestorPdg(track, mcEvent);
if ( matchAbsPdg ) {
pdgCode = TMath::Abs(pdgCode);
ancestorPdg = TMath::Abs(ancestorPdg);
}
return ( pdgCode == ancestorPdg );
}
Int_t AliUtilityMuonAncestor::GetAncestor ( AliVParticle* track, const AliMCEvent* mcEvent )
{
BuildAncestor(track,mcEvent);
return fAncestor;
}
Int_t AliUtilityMuonAncestor::GetAncestorPdg ( AliVParticle* track, const AliMCEvent* mcEvent )
{
if ( BuildAncestor(track,mcEvent) ) {
if ( fAncestor >= 0 ) return mcEvent->GetTrack(fAncestor)->PdgCode();
}
return 0;
}
Long64_t AliUtilityMuonAncestor::GetMask ( AliVParticle* track, const AliMCEvent* mcEvent )
{
BuildAncestor(track,mcEvent);
return fMask;
}
Bool_t AliUtilityMuonAncestor::IsBeautyMu ( AliVParticle* track, const AliMCEvent* mcEvent )
{
Long64_t mask = GetMask(track,mcEvent);
return ( TESTBIT(mask,kIsID) && TESTBIT(mask,kIsMuon) && TESTBIT(mask,kHasBeautyParent) & ! TESTBIT(mask,kHasLightParent) );
}
Bool_t AliUtilityMuonAncestor::IsBJpsiMu ( AliVParticle* track, const AliMCEvent* mcEvent )
{
if ( IsBeautyMu(track,mcEvent) ) {
Int_t imother = AliAnalysisMuonUtility::GetMotherIndex(track);
if ( imother >= 0 ) return ( mcEvent->GetTrack(imother)->PdgCode() == 443 );
}
return kFALSE;
}
Bool_t AliUtilityMuonAncestor::IsCharmMu ( AliVParticle* track, const AliMCEvent* mcEvent )
{
Long64_t mask = GetMask(track,mcEvent);
return ( TESTBIT(mask,kIsID) && TESTBIT(mask,kIsMuon) && TESTBIT(mask,kHasCharmParent) && ! TESTBIT(mask,kHasBeautyParent) && ! TESTBIT(mask,kHasLightParent) );
}
Bool_t AliUtilityMuonAncestor::IsDecayMu ( AliVParticle* track, const AliMCEvent* mcEvent )
{
Long64_t mask = GetMask(track,mcEvent);
return ( TESTBIT(mask,kIsID) && TESTBIT(mask,kIsMuon) && TESTBIT(mask,kHasLightParent) && ! TESTBIT(mask,kIsSecondary) );
}
Bool_t AliUtilityMuonAncestor::IsHadron ( AliVParticle* track, const AliMCEvent* mcEvent )
{
Long64_t mask = GetMask(track,mcEvent);
return ( TESTBIT(mask,kIsID) && ! TESTBIT(mask,kIsMuon) );
}
Bool_t AliUtilityMuonAncestor::IsMuon ( AliVParticle* track, const AliMCEvent* mcEvent )
{
Long64_t mask = GetMask(track,mcEvent);
return ( TESTBIT(mask,kIsID) && TESTBIT(mask,kIsMuon) );
}
Bool_t AliUtilityMuonAncestor::IsQuarkoniumMu ( AliVParticle* track, const AliMCEvent* mcEvent )
{
Long64_t mask = GetMask(track,mcEvent);
return ( TESTBIT(mask,kIsID) && TESTBIT(mask,kIsMuon) && TESTBIT(mask,kHasQuarkoniumParent) );
}
Bool_t AliUtilityMuonAncestor::IsSecondaryMu ( AliVParticle* track, const AliMCEvent* mcEvent )
{
Long64_t mask = GetMask(track,mcEvent);
return ( TESTBIT(mask,kIsID) && TESTBIT(mask,kIsMuon) && TESTBIT(mask,kIsSecondary) );
}
Bool_t AliUtilityMuonAncestor::IsUnidentified ( AliVParticle* track, const AliMCEvent* mcEvent )
{
Long64_t mask = GetMask(track,mcEvent);
return ( ! TESTBIT(mask,kIsID) );
}
Bool_t AliUtilityMuonAncestor::IsWBosonMu ( AliVParticle* track, const AliMCEvent* mcEvent )
{
return ( IsMuon(track,mcEvent) && CheckAncestor(track,mcEvent,24) );
}
Bool_t AliUtilityMuonAncestor::IsZBosonMu ( AliVParticle* track, const AliMCEvent* mcEvent )
{
return ( IsMuon(track,mcEvent) && CheckAncestor(track,mcEvent,kZ0) );
}
AliUtilityMuonAncestor.cxx:1 AliUtilityMuonAncestor.cxx:2 AliUtilityMuonAncestor.cxx:3 AliUtilityMuonAncestor.cxx:4 AliUtilityMuonAncestor.cxx:5 AliUtilityMuonAncestor.cxx:6 AliUtilityMuonAncestor.cxx:7 AliUtilityMuonAncestor.cxx:8 AliUtilityMuonAncestor.cxx:9 AliUtilityMuonAncestor.cxx:10 AliUtilityMuonAncestor.cxx:11 AliUtilityMuonAncestor.cxx:12 AliUtilityMuonAncestor.cxx:13 AliUtilityMuonAncestor.cxx:14 AliUtilityMuonAncestor.cxx:15 AliUtilityMuonAncestor.cxx:16 AliUtilityMuonAncestor.cxx:17 AliUtilityMuonAncestor.cxx:18 AliUtilityMuonAncestor.cxx:19 AliUtilityMuonAncestor.cxx:20 AliUtilityMuonAncestor.cxx:21 AliUtilityMuonAncestor.cxx:22 AliUtilityMuonAncestor.cxx:23 AliUtilityMuonAncestor.cxx:24 AliUtilityMuonAncestor.cxx:25 AliUtilityMuonAncestor.cxx:26 AliUtilityMuonAncestor.cxx:27 AliUtilityMuonAncestor.cxx:28 AliUtilityMuonAncestor.cxx:29 AliUtilityMuonAncestor.cxx:30 AliUtilityMuonAncestor.cxx:31 AliUtilityMuonAncestor.cxx:32 AliUtilityMuonAncestor.cxx:33 AliUtilityMuonAncestor.cxx:34 AliUtilityMuonAncestor.cxx:35 AliUtilityMuonAncestor.cxx:36 AliUtilityMuonAncestor.cxx:37 AliUtilityMuonAncestor.cxx:38 AliUtilityMuonAncestor.cxx:39 AliUtilityMuonAncestor.cxx:40 AliUtilityMuonAncestor.cxx:41 AliUtilityMuonAncestor.cxx:42 AliUtilityMuonAncestor.cxx:43 AliUtilityMuonAncestor.cxx:44 AliUtilityMuonAncestor.cxx:45 AliUtilityMuonAncestor.cxx:46 AliUtilityMuonAncestor.cxx:47 AliUtilityMuonAncestor.cxx:48 AliUtilityMuonAncestor.cxx:49 AliUtilityMuonAncestor.cxx:50 AliUtilityMuonAncestor.cxx:51 AliUtilityMuonAncestor.cxx:52 AliUtilityMuonAncestor.cxx:53 AliUtilityMuonAncestor.cxx:54 AliUtilityMuonAncestor.cxx:55 AliUtilityMuonAncestor.cxx:56 AliUtilityMuonAncestor.cxx:57 AliUtilityMuonAncestor.cxx:58 AliUtilityMuonAncestor.cxx:59 AliUtilityMuonAncestor.cxx:60 AliUtilityMuonAncestor.cxx:61 AliUtilityMuonAncestor.cxx:62 AliUtilityMuonAncestor.cxx:63 AliUtilityMuonAncestor.cxx:64 AliUtilityMuonAncestor.cxx:65 AliUtilityMuonAncestor.cxx:66 AliUtilityMuonAncestor.cxx:67 AliUtilityMuonAncestor.cxx:68 AliUtilityMuonAncestor.cxx:69 AliUtilityMuonAncestor.cxx:70 AliUtilityMuonAncestor.cxx:71 AliUtilityMuonAncestor.cxx:72 AliUtilityMuonAncestor.cxx:73 AliUtilityMuonAncestor.cxx:74 AliUtilityMuonAncestor.cxx:75 AliUtilityMuonAncestor.cxx:76 AliUtilityMuonAncestor.cxx:77 AliUtilityMuonAncestor.cxx:78 AliUtilityMuonAncestor.cxx:79 AliUtilityMuonAncestor.cxx:80 AliUtilityMuonAncestor.cxx:81 AliUtilityMuonAncestor.cxx:82 AliUtilityMuonAncestor.cxx:83 AliUtilityMuonAncestor.cxx:84 AliUtilityMuonAncestor.cxx:85 AliUtilityMuonAncestor.cxx:86 AliUtilityMuonAncestor.cxx:87 AliUtilityMuonAncestor.cxx:88 AliUtilityMuonAncestor.cxx:89 AliUtilityMuonAncestor.cxx:90 AliUtilityMuonAncestor.cxx:91 AliUtilityMuonAncestor.cxx:92 AliUtilityMuonAncestor.cxx:93 AliUtilityMuonAncestor.cxx:94 AliUtilityMuonAncestor.cxx:95 AliUtilityMuonAncestor.cxx:96 AliUtilityMuonAncestor.cxx:97 AliUtilityMuonAncestor.cxx:98 AliUtilityMuonAncestor.cxx:99 AliUtilityMuonAncestor.cxx:100 AliUtilityMuonAncestor.cxx:101 AliUtilityMuonAncestor.cxx:102 AliUtilityMuonAncestor.cxx:103 AliUtilityMuonAncestor.cxx:104 AliUtilityMuonAncestor.cxx:105 AliUtilityMuonAncestor.cxx:106 AliUtilityMuonAncestor.cxx:107 AliUtilityMuonAncestor.cxx:108 AliUtilityMuonAncestor.cxx:109 AliUtilityMuonAncestor.cxx:110 AliUtilityMuonAncestor.cxx:111 AliUtilityMuonAncestor.cxx:112 AliUtilityMuonAncestor.cxx:113 AliUtilityMuonAncestor.cxx:114 AliUtilityMuonAncestor.cxx:115 AliUtilityMuonAncestor.cxx:116 AliUtilityMuonAncestor.cxx:117 AliUtilityMuonAncestor.cxx:118 AliUtilityMuonAncestor.cxx:119 AliUtilityMuonAncestor.cxx:120 AliUtilityMuonAncestor.cxx:121 AliUtilityMuonAncestor.cxx:122 AliUtilityMuonAncestor.cxx:123 AliUtilityMuonAncestor.cxx:124 AliUtilityMuonAncestor.cxx:125 AliUtilityMuonAncestor.cxx:126 AliUtilityMuonAncestor.cxx:127 AliUtilityMuonAncestor.cxx:128 AliUtilityMuonAncestor.cxx:129 AliUtilityMuonAncestor.cxx:130 AliUtilityMuonAncestor.cxx:131 AliUtilityMuonAncestor.cxx:132 AliUtilityMuonAncestor.cxx:133 AliUtilityMuonAncestor.cxx:134 AliUtilityMuonAncestor.cxx:135 AliUtilityMuonAncestor.cxx:136 AliUtilityMuonAncestor.cxx:137 AliUtilityMuonAncestor.cxx:138 AliUtilityMuonAncestor.cxx:139 AliUtilityMuonAncestor.cxx:140 AliUtilityMuonAncestor.cxx:141 AliUtilityMuonAncestor.cxx:142 AliUtilityMuonAncestor.cxx:143 AliUtilityMuonAncestor.cxx:144 AliUtilityMuonAncestor.cxx:145 AliUtilityMuonAncestor.cxx:146 AliUtilityMuonAncestor.cxx:147 AliUtilityMuonAncestor.cxx:148 AliUtilityMuonAncestor.cxx:149 AliUtilityMuonAncestor.cxx:150 AliUtilityMuonAncestor.cxx:151 AliUtilityMuonAncestor.cxx:152 AliUtilityMuonAncestor.cxx:153 AliUtilityMuonAncestor.cxx:154 AliUtilityMuonAncestor.cxx:155 AliUtilityMuonAncestor.cxx:156 AliUtilityMuonAncestor.cxx:157 AliUtilityMuonAncestor.cxx:158 AliUtilityMuonAncestor.cxx:159 AliUtilityMuonAncestor.cxx:160 AliUtilityMuonAncestor.cxx:161 AliUtilityMuonAncestor.cxx:162 AliUtilityMuonAncestor.cxx:163 AliUtilityMuonAncestor.cxx:164 AliUtilityMuonAncestor.cxx:165 AliUtilityMuonAncestor.cxx:166 AliUtilityMuonAncestor.cxx:167 AliUtilityMuonAncestor.cxx:168 AliUtilityMuonAncestor.cxx:169 AliUtilityMuonAncestor.cxx:170 AliUtilityMuonAncestor.cxx:171 AliUtilityMuonAncestor.cxx:172 AliUtilityMuonAncestor.cxx:173 AliUtilityMuonAncestor.cxx:174 AliUtilityMuonAncestor.cxx:175 AliUtilityMuonAncestor.cxx:176 AliUtilityMuonAncestor.cxx:177 AliUtilityMuonAncestor.cxx:178 AliUtilityMuonAncestor.cxx:179 AliUtilityMuonAncestor.cxx:180 AliUtilityMuonAncestor.cxx:181 AliUtilityMuonAncestor.cxx:182 AliUtilityMuonAncestor.cxx:183 AliUtilityMuonAncestor.cxx:184 AliUtilityMuonAncestor.cxx:185 AliUtilityMuonAncestor.cxx:186 AliUtilityMuonAncestor.cxx:187 AliUtilityMuonAncestor.cxx:188 AliUtilityMuonAncestor.cxx:189 AliUtilityMuonAncestor.cxx:190 AliUtilityMuonAncestor.cxx:191 AliUtilityMuonAncestor.cxx:192 AliUtilityMuonAncestor.cxx:193 AliUtilityMuonAncestor.cxx:194 AliUtilityMuonAncestor.cxx:195 AliUtilityMuonAncestor.cxx:196 AliUtilityMuonAncestor.cxx:197 AliUtilityMuonAncestor.cxx:198 AliUtilityMuonAncestor.cxx:199 AliUtilityMuonAncestor.cxx:200 AliUtilityMuonAncestor.cxx:201 AliUtilityMuonAncestor.cxx:202 AliUtilityMuonAncestor.cxx:203 AliUtilityMuonAncestor.cxx:204 AliUtilityMuonAncestor.cxx:205 AliUtilityMuonAncestor.cxx:206 AliUtilityMuonAncestor.cxx:207 AliUtilityMuonAncestor.cxx:208 AliUtilityMuonAncestor.cxx:209 AliUtilityMuonAncestor.cxx:210 AliUtilityMuonAncestor.cxx:211 AliUtilityMuonAncestor.cxx:212 AliUtilityMuonAncestor.cxx:213 AliUtilityMuonAncestor.cxx:214 AliUtilityMuonAncestor.cxx:215 AliUtilityMuonAncestor.cxx:216 AliUtilityMuonAncestor.cxx:217 AliUtilityMuonAncestor.cxx:218 AliUtilityMuonAncestor.cxx:219 AliUtilityMuonAncestor.cxx:220 AliUtilityMuonAncestor.cxx:221 AliUtilityMuonAncestor.cxx:222 AliUtilityMuonAncestor.cxx:223 AliUtilityMuonAncestor.cxx:224 AliUtilityMuonAncestor.cxx:225 AliUtilityMuonAncestor.cxx:226 AliUtilityMuonAncestor.cxx:227 AliUtilityMuonAncestor.cxx:228 AliUtilityMuonAncestor.cxx:229 AliUtilityMuonAncestor.cxx:230 AliUtilityMuonAncestor.cxx:231 AliUtilityMuonAncestor.cxx:232 AliUtilityMuonAncestor.cxx:233 AliUtilityMuonAncestor.cxx:234 AliUtilityMuonAncestor.cxx:235 AliUtilityMuonAncestor.cxx:236 AliUtilityMuonAncestor.cxx:237 AliUtilityMuonAncestor.cxx:238 AliUtilityMuonAncestor.cxx:239 AliUtilityMuonAncestor.cxx:240 AliUtilityMuonAncestor.cxx:241 AliUtilityMuonAncestor.cxx:242 AliUtilityMuonAncestor.cxx:243 AliUtilityMuonAncestor.cxx:244 AliUtilityMuonAncestor.cxx:245 AliUtilityMuonAncestor.cxx:246 AliUtilityMuonAncestor.cxx:247 AliUtilityMuonAncestor.cxx:248 AliUtilityMuonAncestor.cxx:249 AliUtilityMuonAncestor.cxx:250 AliUtilityMuonAncestor.cxx:251 AliUtilityMuonAncestor.cxx:252 AliUtilityMuonAncestor.cxx:253 AliUtilityMuonAncestor.cxx:254 AliUtilityMuonAncestor.cxx:255 AliUtilityMuonAncestor.cxx:256 AliUtilityMuonAncestor.cxx:257 AliUtilityMuonAncestor.cxx:258 AliUtilityMuonAncestor.cxx:259 AliUtilityMuonAncestor.cxx:260 AliUtilityMuonAncestor.cxx:261 AliUtilityMuonAncestor.cxx:262 AliUtilityMuonAncestor.cxx:263 AliUtilityMuonAncestor.cxx:264 AliUtilityMuonAncestor.cxx:265 AliUtilityMuonAncestor.cxx:266 AliUtilityMuonAncestor.cxx:267 AliUtilityMuonAncestor.cxx:268 AliUtilityMuonAncestor.cxx:269 AliUtilityMuonAncestor.cxx:270 AliUtilityMuonAncestor.cxx:271 AliUtilityMuonAncestor.cxx:272 AliUtilityMuonAncestor.cxx:273 AliUtilityMuonAncestor.cxx:274 AliUtilityMuonAncestor.cxx:275 AliUtilityMuonAncestor.cxx:276 AliUtilityMuonAncestor.cxx:277 AliUtilityMuonAncestor.cxx:278 AliUtilityMuonAncestor.cxx:279 AliUtilityMuonAncestor.cxx:280 AliUtilityMuonAncestor.cxx:281 AliUtilityMuonAncestor.cxx:282 AliUtilityMuonAncestor.cxx:283 AliUtilityMuonAncestor.cxx:284 AliUtilityMuonAncestor.cxx:285 AliUtilityMuonAncestor.cxx:286 AliUtilityMuonAncestor.cxx:287 AliUtilityMuonAncestor.cxx:288 AliUtilityMuonAncestor.cxx:289 AliUtilityMuonAncestor.cxx:290 AliUtilityMuonAncestor.cxx:291 AliUtilityMuonAncestor.cxx:292 AliUtilityMuonAncestor.cxx:293 AliUtilityMuonAncestor.cxx:294 AliUtilityMuonAncestor.cxx:295