#include "AliESDtrack.h"\r
#include "AliESDv0.h"\r
#include "AliESDtrackCuts.h"\r
+#include "AliESDv0KineCuts.h"\r
#include "AliMCParticle.h"\r
#include "AliMultiplicity.h"\r
#include "AliCentrality.h"\r
,fMCev(NULL)\r
,fEventCut(NULL)\r
,fTrackCut(NULL)\r
+ ,fV0Identifier(NULL)\r
,fV0Cut(NULL)\r
,fOCDB("local://$ALICE_ROOT/OCDB")\r
,fTrackInfo(NULL)\r
,fEventInfo(NULL)\r
,fV0Info(NULL)\r
,fTracksBarrel(NULL)\r
+ ,fTracksITS(NULL)\r
,fTracksSA(NULL)\r
,fTracksKink(NULL)\r
,fV0List(NULL)\r
,fMCev(NULL)\r
,fEventCut(NULL)\r
,fTrackCut(NULL)\r
+ ,fV0Identifier(NULL)\r
,fV0Cut(NULL)\r
,fOCDB("local://$ALICE_ROOT/OCDB")\r
,fTrackInfo(NULL)\r
,fEventInfo(NULL)\r
,fV0Info(NULL)\r
,fTracksBarrel(NULL)\r
+ ,fTracksITS(NULL)\r
,fTracksSA(NULL)\r
,fTracksKink(NULL)\r
,fV0List(NULL)\r
//\r
SetTitle("MC-REC TRD-track list generator");\r
DefineOutput(AliTRDpwgppHelper::kTracksBarrel, TObjArray::Class());\r
+ DefineOutput(AliTRDpwgppHelper::kTracksITS, TObjArray::Class());\r
DefineOutput(AliTRDpwgppHelper::kTracksSA, TObjArray::Class());\r
DefineOutput(AliTRDpwgppHelper::kTracksKink, TObjArray::Class());\r
DefineOutput(AliTRDpwgppHelper::kEventInfo, AliTRDeventInfo::Class());\r
if(fgReconstructor) delete fgReconstructor;\r
if(fDebugStream) delete fDebugStream;\r
if(fV0Cut) delete fV0Cut;\r
+ if(fV0Identifier) delete fV0Identifier;\r
if(fTrackCut) delete fTrackCut;\r
if(fEventCut) delete fEventCut;\r
if(fTrackInfo) delete fTrackInfo; fTrackInfo = NULL;\r
fTracksBarrel->Delete(); delete fTracksBarrel;\r
fTracksBarrel = NULL;\r
}\r
+ if(fTracksITS){\r
+ fTracksITS->Delete(); delete fTracksITS;\r
+ fTracksITS = NULL;\r
+ }\r
if(fTracksSA){\r
fTracksSA->Delete(); delete fTracksSA;\r
fTracksSA = NULL;\r
fEventInfo = new AliTRDeventInfo();\r
fV0Info = new AliTRDv0Info();\r
fTracksBarrel = new TObjArray(200); fTracksBarrel->SetOwner(kTRUE);\r
- fTracksSA = new TObjArray(20); fTracksSA->SetOwner(kTRUE);\r
- fTracksKink = new TObjArray(20); fTracksKink->SetOwner(kTRUE);\r
- fV0List = new TObjArray(10); fV0List->SetOwner(kTRUE);\r
- fClusters = new TObjArray(AliTRDgeometry::kNdet); fClusters->SetOwner(kTRUE);\r
+ fTracksITS = new TObjArray(20); fTracksITS->SetOwner(kTRUE);\r
+ fTracksSA = new TObjArray(20); fTracksSA->SetOwner(kTRUE);\r
+ fTracksKink = new TObjArray(20); fTracksKink->SetOwner(kTRUE);\r
+ fV0List = new TObjArray(10); fV0List->SetOwner(kTRUE);\r
+ fClusters = new TObjArray(AliTRDgeometry::kNdet); fClusters->SetOwner(kTRUE);\r
\r
// define general monitor\r
fContainer = new TObjArray(kNclasses); fContainer->SetOwner(kTRUE);\r
fContainer->AddAt(chmb, kChmb);\r
\r
PostData(AliTRDpwgppHelper::kTracksBarrel, fTracksBarrel);\r
+ PostData(AliTRDpwgppHelper::kTracksITS, fTracksITS);\r
PostData(AliTRDpwgppHelper::kTracksSA, fTracksSA);\r
PostData(AliTRDpwgppHelper::kTracksKink, fTracksKink);\r
PostData(AliTRDpwgppHelper::kEventInfo, fEventInfo);\r
AliWarning(Form("Couldn't open file %s.", file));\r
return kFALSE;\r
}\r
- if(dir){\r
- if(!gFile->cd(dir)){\r
- AliWarning(Form("Couldn't cd to %s in %s.", dir, file));\r
- return kFALSE;\r
- }\r
+ if(!gFile->cd(dir)){\r
+ AliWarning(Form("Couldn't cd to %s in %s.", dir, file));\r
+ gFile->Close();\r
+ return kFALSE;\r
}\r
- TObjArray *o(NULL);\r
const Char_t *tn=(name ? name : GetName());\r
- if(!(o = (TObjArray*)gDirectory->Get(tn))){\r
+ if(!(fContainer = (TObjArray*)gDirectory->Get(tn))){\r
AliWarning(Form("Missing histogram container %s.", tn));\r
+ gFile->Close();\r
return kFALSE;\r
}\r
- fContainer = (TObjArray*)o->Clone(GetName());\r
gFile->Close();\r
return kTRUE;\r
}\r
//\r
\r
fTracksBarrel->Delete();\r
+ fTracksITS->Delete();\r
fTracksSA->Delete();\r
fTracksKink->Delete();\r
fV0List->Delete();\r
fgGeo = new AliTRDgeometry;\r
fgGeo->CreateClusterMatrixArray();\r
MakeChambers();\r
- printf("After MakeChambers()\n");\r
// load reco param list from OCDB\r
AliInfo("Initializing TRD reco params ...");\r
fgReconstructor = new AliTRDReconstructor();\r
}\r
UShort_t evBC(fESDev->GetBunchCrossNumber());\r
\r
+ // electron identifier from conversions\r
+ if(!fV0Identifier) fV0Identifier = new AliESDv0KineCuts();\r
+ fV0Identifier->SetEvent(fESDev);\r
+\r
Bool_t *trackMap(NULL);\r
AliStack * mStack(NULL);\r
Int_t nTracksMC = HasMCdata() ? fMCev->GetNumberOfTracks() : 0, nTracksESD = fESDev->GetNumberOfTracks();\r
\r
Double32_t dedx[100]; Int_t nSlices(0);\r
Int_t nTRDout(0), nTRDin(0), nTPC(0), nITS(0)\r
- ,nclsTrklt\r
- ,nBarrel(0), nSA(0), nKink(0)\r
- ,nBarrelFriend(0), nSAFriend(0)\r
+// ,nclsTrklt\r
+ ,nBarrel(0), nBarrelITS(0), nSA(0), nKink(0)\r
+ ,nBarrelFriend(0), nBarrelITSFriend(0), nSAFriend(0)\r
,nBarrelMC(0), nSAMC(0), nKinkMC(0);\r
AliESDtrack *esdTrack = NULL;\r
AliESDfriendTrack *esdFriendTrack = NULL;\r
AliESDv0 *v0(NULL);\r
Int_t v0pid[AliPID::kSPECIES];\r
for(Int_t iv0(0); iv0<fESDev->GetNumberOfV0s(); iv0++){\r
+ // Take only V0s from the On-the-fly v0 finder\r
if(!(v0 = fESDev->GetV0(iv0))) continue;\r
+ if(!v0->GetOnFlyStatus()) continue;\r
// register v0\r
if(fV0Cut) new(fV0Info) AliTRDv0Info(*fV0Cut);\r
else new(fV0Info) AliTRDv0Info();\r
fV0Info->SetMagField(bField);\r
fV0Info->SetV0tracks(fESDev->GetTrack(v0->GetPindex()), fESDev->GetTrack(v0->GetNindex()));\r
fV0Info->SetV0Info(v0);\r
+ // tag conversion electrons\r
+ Int_t pdgV0, pdgP, pdgN;\r
+ if(fV0Identifier->ProcessV0(v0, pdgV0, pdgP, pdgN)) {\r
+ switch(pdgV0){\r
+ case kGamma: fV0Info->SetDecay(AliTRDv0Info::kGamma); break;\r
+ case kK0Short: fV0Info->SetDecay(AliTRDv0Info::kK0s); break;\r
+ case kLambda0: fV0Info->SetDecay(AliTRDv0Info::kLambda); break;\r
+ case kLambda0Bar: fV0Info->SetDecay(AliTRDv0Info::kAntiLambda); break;\r
+ default: AliDebug(1, Form("V0[%+4d] -> +[%+4d] -[%+4d]. Decay not mapped.", pdgV0, pdgP, pdgN));\r
+ }\r
+ }\r
fV0List->Add(new AliTRDv0Info(*fV0Info));// kFOUND=kFALSE;\r
}\r
\r
if(esdTrack->GetStatus()&AliESDtrack::kTPCout) nTPC++;\r
if(esdTrack->GetStatus()&AliESDtrack::kTRDout) nTRDout++;\r
if(esdTrack->GetStatus()&AliESDtrack::kTRDin) nTRDin++;\r
-// printf(" %3d ITS[%c] TPC[%c] TRDin[%c] TRDout[%c] TRDStop[%c]\n", itrk,\r
-// (esdTrack->GetStatus()&AliESDtrack::kITSout)?'y':'n',\r
-// (esdTrack->GetStatus()&AliESDtrack::kTPCout)?'y':'n',\r
-// (esdTrack->GetStatus()&AliESDtrack::kTRDin)?'y':'n',\r
-// (esdTrack->GetStatus()&AliESDtrack::kTRDout)?'y':'n',\r
-// (esdTrack->GetStatus()&AliESDtrack::kTRDStop)?'y':'n');\r
+\r
+/* Int_t ns(esdTrack->GetNumberOfTRDslices());\r
+ printf(" %3d ITS[%c] TPC[%c] TRDin[%c] TRDout[%c] TRDStop[%c] ns[%d]\n", itrk,\r
+ (esdTrack->GetStatus()&AliESDtrack::kITSout)?'y':'n',\r
+ (esdTrack->GetStatus()&AliESDtrack::kTPCout)?'y':'n',\r
+ (esdTrack->GetStatus()&AliESDtrack::kTRDin)?'y':'n',\r
+ (esdTrack->GetStatus()&AliESDtrack::kTRDout)?'y':'n',\r
+ (esdTrack->GetStatus()&AliESDtrack::kTRDStop)?'y':'n', ns);\r
+ if(ns){\r
+ for(Int_t ipl(0); ipl<AliTRDgeometry::kNlayer; ipl++){\r
+ Double_t sp, p(esdTrack->GetTRDmomentum(ipl, &sp));\r
+ printf(" [%d] p[%6.3f+-%6.3f] dEdx={", ipl, p, sp);\r
+ for(Int_t is(0); is<8; is++) printf("%7.2f ", esdTrack->GetTRDslice(ipl, is)); printf("}\n");\r
+ }\r
+ }\r
+*/\r
// look at external track param\r
const AliExternalTrackParam *op = esdTrack->GetOuterParam();\r
Double_t xyz[3];\r
}\r
\r
// read MC info\r
- Int_t fPdg = -1;\r
Int_t label = -1; UInt_t alab=UINT_MAX;\r
if(HasMCdata()){\r
label = esdTrack->GetLabel(); \r
AliError(Form("MC label[%d] outside scope for Ev[%d] Trk[%d].", label, (Int_t)AliAnalysisManager::GetAnalysisManager()->GetCurrentEntry(), itrk));\r
continue; \r
}\r
- AliMCParticle *mcParticle = NULL; \r
+ AliMCParticle *mcParticle(NULL);\r
if(!(mcParticle = (AliMCParticle*) fMCev->GetTrack(alab))){\r
AliError(Form("MC particle label[%d] missing for Ev[%d] Trk[%d].", label, (Int_t)AliAnalysisManager::GetAnalysisManager()->GetCurrentEntry(), itrk));\r
continue;\r
}\r
- fPdg = mcParticle->Particle()->GetPdgCode();\r
- Int_t nRefs = mcParticle->GetNumberOfTrackReferences();\r
- Int_t iref = 0; AliTrackReference *ref = NULL; \r
- while(iref<nRefs){\r
- ref = mcParticle->GetTrackReference(iref);\r
- if(ref->LocalX() > fgkTPC) break;\r
- iref++;\r
- }\r
-\r
fTrackInfo->SetMC();\r
- fTrackInfo->SetPDG(fPdg);\r
+ fTrackInfo->SetMCeta(mcParticle->Eta());\r
+ fTrackInfo->SetMCphi(mcParticle->Phi());\r
+ fTrackInfo->SetMCpt(mcParticle->Pt());\r
+ fTrackInfo->SetPDG(mcParticle->Particle()->GetPdgCode());\r
fTrackInfo->SetPrimary(mcParticle->Particle()->IsPrimary());\r
fTrackInfo->SetLabel(label);\r
fTrackInfo->SetTRDlabel(esdTrack->GetTRDLabel());\r
- Int_t jref = iref;//, kref = 0;\r
- while(jref<nRefs){\r
- ref = mcParticle->GetTrackReference(jref);\r
- if(ref->LocalX() > fgkTRD) break;\r
- AliDebug(4, Form(" trackRef[%2d (%2d)] @ %7.3f OK", jref-iref, jref, ref->LocalX()));\r
+ AliTrackReference *ref(NULL);\r
+ for(Int_t iref(0); iref<mcParticle->GetNumberOfTrackReferences(); iref++){\r
+ if(!(ref = mcParticle->GetTrackReference(iref))) continue;\r
+ if(ref->DetectorId() != AliTrackReference::kTRD) continue;\r
+ AliDebug(4, Form(" TRD trackRef[%2d] @ r[%7.3f] [REC]", iref, ref->LocalX()));\r
fTrackInfo->AddTrackRef(ref);\r
- jref++;\r
}\r
- AliDebug(3, Form("NtrackRefs[%d(%d)]", fTrackInfo->GetNTrackRefs(), nRefs));\r
+ AliDebug(3, Form("Lab[%4d] pdg[%+4d] NtrackRefs[%d(%d)]", alab, mcParticle->Particle()->GetPdgCode(), fTrackInfo->GetNTrackRefs(), mcParticle->GetNumberOfTrackReferences()));\r
}\r
\r
// copy some relevant info to TRD track info\r
Float_t tofTime = esdTrack->GetTOFsignal() - fESDev->GetT0TOF(0);\r
fTrackInfo->SetTOFbeta(tofTime>0.?((esdTrack->GetIntegratedLength()/(tofTime*TMath::C()))*10e9):-999.);\r
fTrackInfo->SetTOFbc(esdTrack->GetTOFBunchCrossing()==AliVTrack::kTOFBCNA?0:esdTrack->GetTOFBunchCrossing());\r
- nclsTrklt = 0;\r
+// nclsTrklt = 0;\r
\r
// set V0pid info\r
+ //printf("%4d Looking for V0s...\n" , fTrackInfo->GetTrackId());\r
for(Int_t iv(0); iv<fV0List->GetEntriesFast(); iv++){\r
if(!(v0info = (AliTRDv0Info*)fV0List->At(iv))) continue;\r
if(!v0info->GetV0Daughter(1) && !v0info->GetV0Daughter(-1)) continue;\r
if(!v0info->HasTrack(fTrackInfo)) continue;\r
+ //v0info->Print();\r
memset(v0pid, 0, AliPID::kSPECIES*sizeof(Int_t));\r
fTrackInfo->SetV0();\r
- for(Int_t is=AliPID::kSPECIES; is--;){v0pid[is] = v0info->GetPID(is, fTrackInfo);}\r
- fTrackInfo->SetV0pid(v0pid);\r
- fTrackInfo->SetV0();\r
- //const AliTRDtrackInfo::AliESDinfo *ei = fTrackInfo->GetESDinfo();\r
- break;\r
+ for(Int_t is=AliPID::kSPECIES; is--;) v0pid[is] = v0info->GetPID(is, fTrackInfo); fTrackInfo->SetV0pid(v0pid);\r
+ if(v0info->IsDecay(AliTRDv0Info::kGamma)) fTrackInfo->SetElectron();\r
+ else if(v0info->IsDecay(AliTRDv0Info::kK0s)) fTrackInfo->SetPion();\r
+ else if(v0info->IsDecay(AliTRDv0Info::kLambda)) esdTrack->Charge()>0?fTrackInfo->SetProton():fTrackInfo->SetPion();\r
+ else if(v0info->IsDecay(AliTRDv0Info::kAntiLambda)) esdTrack->Charge()<0?fTrackInfo->SetProton():fTrackInfo->SetPion();\r
+ \r
+ //TODO one track can be attached to more than one v0. Ideally one would need a list of v0 attached to the track info\r
}\r
\r
// read track REC info\r
Bool_t selected(kTRUE);\r
if(UseLocalTrkSelection()){\r
if(esdTrack->Pt() < fgkPt){ \r
- AliDebug(3, Form("Reject Trk[%3d] Ev[%4d] Pt[%5.2f]", itrk, fESDev->GetEventNumberInFile(), esdTrack->Pt()));\r
+ AliDebug(3, Form("Reject TPC Trk[%3d] Ev[%4d] Pt[%5.2f]", itrk, fESDev->GetEventNumberInFile(), esdTrack->Pt()));\r
selected = kFALSE;\r
}\r
if(selected && TMath::Abs(esdTrack->Eta()) > fgkEta){\r
- AliDebug(3, Form("Reject Trk[%3d] Ev[%4d] Eta[%5.2f]", itrk, fESDev->GetEventNumberInFile(), TMath::Abs(esdTrack->Eta())));\r
+ AliDebug(3, Form("Reject TPC Trk[%3d] Ev[%4d] Eta[%5.2f]", itrk, fESDev->GetEventNumberInFile(), TMath::Abs(esdTrack->Eta())));\r
selected = kFALSE;\r
}\r
if(selected && esdTrack->GetTPCNcls() < fgkNclTPC){ \r
- AliDebug(3, Form("Reject Trk[%3d] Ev[%4d] NclTPC[%d]", itrk, fESDev->GetEventNumberInFile(), esdTrack->GetTPCNcls()));\r
+ AliDebug(3, Form("Reject TPC Trk[%3d] Ev[%4d] NclTPC[%d]", itrk, fESDev->GetEventNumberInFile(), esdTrack->GetTPCNcls()));\r
selected = kFALSE;\r
}\r
Float_t par[2], cov[3];\r
esdTrack->GetImpactParameters(par, cov);\r
if(IsCollision()){ // cuts on DCA\r
if(selected && TMath::Abs(par[0]) > fgkTrkDCAxy){ \r
- AliDebug(3, Form("Reject Trk[%3d] Ev[%4d] DCAxy[%f]", itrk, fESDev->GetEventNumberInFile(), TMath::Abs(par[0])));\r
+ AliDebug(3, Form("Reject TPC Trk[%3d] Ev[%4d] DCAxy[%f]", itrk, fESDev->GetEventNumberInFile(), TMath::Abs(par[0])));\r
selected = kFALSE;\r
}\r
if(selected && TMath::Abs(par[1]) > fgkTrkDCAz){ \r
- AliDebug(3, Form("Reject Trk[%3d] Ev[%4d] DCAz[%f]", itrk, fESDev->GetEventNumberInFile(), TMath::Abs(par[1])));\r
+ AliDebug(3, Form("Reject TPC Trk[%3d] Ev[%4d] DCAz[%f]", itrk, fESDev->GetEventNumberInFile(), TMath::Abs(par[1])));\r
selected = kFALSE;\r
}\r
} else if(selected && fMCev && !fMCev->IsPhysicalPrimary(alab)){;\r
- AliDebug(3, Form("Reject Trk[%3d] Ev[%4d] Primary", itrk, fESDev->GetEventNumberInFile()));\r
+ AliDebug(3, Form("Reject TPC Trk[%3d] Ev[%4d] Primary", itrk, fESDev->GetEventNumberInFile()));\r
selected = kFALSE;\r
}\r
}\r
if(selected){ \r
fTracksBarrel->Add(new AliTRDtrackInfo(*fTrackInfo));\r
nBarrel++;\r
- if(fTrackInfo->GetTrack()) \r
- nBarrelFriend++;\r
+ if(fTrackInfo->GetTrack()) nBarrelFriend++;\r
}\r
} else {\r
fTracksKink->Add(new AliTRDtrackInfo(*fTrackInfo));\r
Bool_t selected(kTRUE);\r
if(UseLocalTrkSelection()){\r
if(esdTrack->Pt() < fgkPt){\r
- AliDebug(3, Form("Reject Trk[%3d] Ev[%4d] Pt[%5.2f]", itrk, fESDev->GetEventNumberInFile(), esdTrack->Pt()));\r
+ AliDebug(3, Form("Reject ITS Trk[%3d] Ev[%4d] Pt[%5.2f]", itrk, fESDev->GetEventNumberInFile(), esdTrack->Pt()));\r
selected = kFALSE;\r
}\r
if(selected && TMath::Abs(esdTrack->Eta()) > fgkEta){\r
- AliDebug(3, Form("Reject Trk[%3d] Ev[%4d] Eta[%5.2f]", itrk, fESDev->GetEventNumberInFile(), TMath::Abs(esdTrack->Eta())));\r
+ AliDebug(3, Form("Reject ITS Trk[%3d] Ev[%4d] Eta[%5.2f]", itrk, fESDev->GetEventNumberInFile(), TMath::Abs(esdTrack->Eta())));\r
selected = kFALSE;\r
}\r
Float_t par[2], cov[3];\r
esdTrack->GetImpactParameters(par, cov);\r
if(IsCollision()){ // cuts on DCA\r
if(selected && TMath::Abs(par[0]) > fgkTrkDCAxy){\r
- AliDebug(3, Form("Reject Trk[%3d] Ev[%4d] DCAxy[%f]", itrk, fESDev->GetEventNumberInFile(), TMath::Abs(par[0])));\r
+ AliDebug(3, Form("Reject ITS Trk[%3d] Ev[%4d] DCAxy[%f]", itrk, fESDev->GetEventNumberInFile(), TMath::Abs(par[0])));\r
selected = kFALSE;\r
}\r
if(selected && TMath::Abs(par[1]) > fgkTrkDCAz){\r
- AliDebug(3, Form("Reject Trk[%3d] Ev[%4d] DCAz[%f]", itrk, fESDev->GetEventNumberInFile(), TMath::Abs(par[1])));\r
+ AliDebug(3, Form("Reject ITS Trk[%3d] Ev[%4d] DCAz[%f]", itrk, fESDev->GetEventNumberInFile(), TMath::Abs(par[1])));\r
selected = kFALSE;\r
}\r
} else if(selected && fMCev && !fMCev->IsPhysicalPrimary(alab)){;\r
- AliDebug(3, Form("Reject Trk[%3d] Ev[%4d] Primary", itrk, fESDev->GetEventNumberInFile()));\r
+ AliDebug(3, Form("Reject ITS Trk[%3d] Ev[%4d] Primary", itrk, fESDev->GetEventNumberInFile()));\r
selected = kFALSE;\r
}\r
}\r
if(fTrackCut && !fTrackCut->IsSelected(esdTrack)) selected = kFALSE;\r
if(selected){\r
- fTracksBarrel->Add(new AliTRDtrackInfo(*fTrackInfo));\r
- nBarrel++;\r
- if(fTrackInfo->GetTrack())\r
- nBarrelFriend++;\r
+ fTracksITS->Add(new AliTRDtrackInfo(*fTrackInfo));\r
+ nBarrelITS++;\r
+ if(fTrackInfo->GetTrack()) nBarrelITSFriend++;\r
}\r
} else if((status&AliESDtrack::kTRDout) && !(status&AliESDtrack::kTRDin)){ // TRD SA tracking\r
fTracksSA->Add(new AliTRDtrackInfo(*fTrackInfo));\r
nSA++;\r
- if(fTrackInfo->GetTrack()) \r
- nSAFriend++;\r
+ if(fTrackInfo->GetTrack()) nSAFriend++;\r
}\r
fTrackInfo->Delete("");\r
}\r
AliDebug(10, "Output of the MC track map:");\r
for(Int_t itk = 0; itk < nTracksMC; itk++) AliDebug(10, Form("trackMap[%d] = %s", itk, trackMap[itk] == kTRUE ? "TRUE" : "kFALSE"));\r
\r
+ AliTrackReference *ref(NULL);\r
for(Int_t itk = 0; itk < nTracksMC; itk++){\r
if(trackMap[itk]) continue;\r
AliMCParticle *mcParticle = (AliMCParticle*) fMCev->GetTrack(TMath::Abs(itk));\r
- Int_t fPdg = mcParticle->Particle()->GetPdgCode();\r
- Int_t nRefs = mcParticle->GetNumberOfTrackReferences();\r
- Int_t iref = 0; AliTrackReference *ref = NULL; \r
- Int_t nRefsTRD = 0;\r
- new(fTrackInfo) AliTRDtrackInfo();\r
- fTrackInfo->SetMC();\r
- fTrackInfo->SetPDG(fPdg);\r
- while(iref<nRefs){ // count TRD TR\r
- Bool_t kIN(kFALSE);\r
- ref = mcParticle->GetTrackReference(iref);\r
- if(ref->LocalX() > fgkTPC && ref->LocalX() < fgkTRD){\r
- fTrackInfo->AddTrackRef(ref);\r
- nRefsTRD++;kIN=kTRUE;\r
+\r
+ Int_t nRefsTRD(0);\r
+ for(Int_t iref(0); iref<mcParticle->GetNumberOfTrackReferences(); iref++){ // count TRD TR\r
+ if(!(ref = mcParticle->GetTrackReference(iref))) continue;\r
+ if(ref->DetectorId() != AliTrackReference::kTRD) continue;\r
+ if(!nRefsTRD){ // build track info for this pure MC track\r
+ new(fTrackInfo) AliTRDtrackInfo();\r
+ fTrackInfo->SetMC();\r
+ fTrackInfo->SetPDG(mcParticle->Particle()->GetPdgCode());\r
}\r
- AliDebug(4, Form(" trackRef[%2d] @ x[%7.3f] %s", iref, ref->LocalX(), kIN?"IN":"OUT"));\r
- iref++;\r
- }\r
- if(!nRefsTRD){\r
- // In this stage we at least require 1 hit inside TRD. What will be done with this tracks is a task for the \r
- // analysis job\r
- fTrackInfo->Delete("");\r
- continue;\r
+ AliDebug(4, Form(" TRD trackRef[%2d] @ r[%7.3f] [MC]", iref, ref->LocalX()));\r
+ fTrackInfo->AddTrackRef(ref);\r
}\r
+ // In this stage we at least require 1 hit inside TRD. What will be done with this tracks is a task for the\r
+ // analysis job\r
+ if(!nRefsTRD) continue;\r
+ AliDebug(3, Form("Lab[%4d] pdg[%+4d] NtrackRefs[%d(%d)]", itk, mcParticle->Particle()->GetPdgCode(), fTrackInfo->GetNTrackRefs(), mcParticle->GetNumberOfTrackReferences()));\r
fTrackInfo->SetPrimary(mcParticle->Particle()->IsPrimary());\r
fTrackInfo->SetLabel(itk);\r
if(DebugLevel() >= 1){\r
ref = mcParticle->GetTrackReference(0);\r
if(ref->LocalX() < fgkITS){ \r
fTracksBarrel->Add(new AliTRDtrackInfo(*fTrackInfo));\r
+ //fTracksITS->Add(new AliTRDtrackInfo(*fTrackInfo));\r
nBarrelMC++;\r
} else if(ref->LocalX() < fgkTPC) {\r
fTracksKink->Add(new AliTRDtrackInfo(*fTrackInfo));\r
AliDebug(1, Form(\r
"\nEv[%3d] Tracks: ESD[%d] MC[%d] V0[%d]\n"\r
" TPCout[%d] ITSout[%d] TRDin[%d] TRDout[%d]\n"\r
- " Barrel[%3d+%3d=%3d] SA[%2d+%2d=%2d] Kink[%2d+%2d=%2d]"\r
+ " Barrel[%3d+%3d=%3d] ITS[%3d=%3d] SA[%2d+%2d=%2d] Kink[%2d+%2d=%2d]"\r
,(Int_t)AliAnalysisManager::GetAnalysisManager()->GetCurrentEntry(), nTracksESD, nTracksMC, fV0List->GetEntries()\r
, nTPC, nITS, nTRDin, nTRDout\r
,nBarrel, nBarrelMC, fTracksBarrel->GetEntries()\r
+ ,nBarrelITS, fTracksITS->GetEntries()\r
,nSA, nSAMC, fTracksSA->GetEntries()\r
,nKink, nKinkMC, fTracksKink->GetEntries()\r
));\r
p=cOut->cd(4); p->SetRightMargin(0.0215);p->SetLeftMargin(0.414);//p->SetLogz();\r
TObject *o = fContainer->At(kTrigger);\r
if(o){\r
- if(!strcmp("TH1I", o->IsA()->GetName())){\r
- h1 = dynamic_cast<TH1I*>(o);\r
+ if((h1 = dynamic_cast<TH1I*>(o))) {\r
h1->GetXaxis()->SetTitleOffset(6.5); h1->GetXaxis()->CenterTitle();\r
h1->SetFillStyle(3001);h1->SetFillColor(kGreen);\r
h1->SetBarWidth(0.8);h1->SetBarOffset(0.1);\r
((TH1I*)o)->Draw("hbar2");\r
- } else ((AliTRDtriggerInfo*)o)->Draw();\r
+ } else o->Draw();\r
}\r
cOut->SaveAs(Form("%s.gif", cOut->GetName()));\r
}\r