fAvgTrials(1),
fExternalWeight(1),
fTrackEtaWindow(0.9),
+ fRequireITSRefit(0),
fRecEtaWindow(0.5),
fTrackPtCut(0.),
fJetOutputMinPt(0.150),
fAvgTrials(1),
fExternalWeight(1),
fTrackEtaWindow(0.9),
+ fRequireITSRefit(0),
fRecEtaWindow(0.5),
fTrackPtCut(0.),
fJetOutputMinPt(0.150),
//Check if information is provided detector level effects
if(!fMomResH1 || !fMomResH2 || !fMomResH3) fUseTrPtResolutionSmearing = kFALSE;
- if(!fhEffH1 || !fhEffH2 || !fhEffH3 ) fUseDiceEfficiency = kFALSE;
- if( fEfficiencyFixed < 1. ) fUseDiceEfficiency = kTRUE;
+ if( fEfficiencyFixed < 1. ) {
+ if (!fUseDiceEfficiency)
+ fUseDiceEfficiency = 1; // 1 is the default; 2 can be set by user
+ }
+ else {
+ if(!fhEffH1 || !fhEffH2 || !fhEffH3 ) fUseDiceEfficiency = kFALSE;
+ }
Bool_t selectEvent = false;
Bool_t physicsSelection = true;// handled by the framework(fInputHandler->IsEventSelected()&AliVEvent::kMB)==AliVEvent::kMB;
Int_t nT = GetListOfTracks(&recParticles,fTrackTypeRec);
Float_t nCh = recParticles.GetEntries();
+ Float_t nGen=genParticles.GetEntries();
fh1Nch->Fill(nCh);
if(fDebug>2)Printf("%s:%d Selected Rec tracks: %d %d",(char*)__FILE__,__LINE__,nT,recParticles.GetEntries());
nT = GetListOfTracks(&genParticles,fTrackTypeGen);
Double_t rnd = fRandom->Uniform(1.);
if( fEfficiencyFixed<1. ) {
sumEff = fEfficiencyFixed;
+ if (fUseDiceEfficiency == 2) {
+ sumEff = (nCh - fEfficiencyFixed*nGen) / nCh; // rescale eff; fEfficiencyFixed is wrt to nGen, but dicing is fraction of nCh
+ }
} else {
pT = vp->Pt();
if(fDebug>10)Printf("%s:%d Not matching filter %d/%d %d/%d",(char*)__FILE__,__LINE__,it,aod->GetNumberOfTracks(),fFilterMask,tr->GetFilterMap());
continue;
}
+ if(fRequireITSRefit){if((tr->GetStatus()&AliESDtrack::kITSrefit)==0)continue;}
if(TMath::Abs(tr->Eta())>fTrackEtaWindow){
if(fDebug>10)Printf("%s:%d Not matching eta %d/%d",(char*)__FILE__,__LINE__,it,aod->GetNumberOfTracks());
continue;
else if(fFilterType == 1)bGood = trackAOD->IsHybridTPCConstrainedGlobal();
else if(fFilterType == 2)bGood = trackAOD->IsHybridGlobalConstrainedGlobal();
if((fFilterMask>0)&&((!trackAOD->TestFilterBit(fFilterMask)||(!bGood))))continue;
+ if(fRequireITSRefit){if((trackAOD->GetStatus()&AliESDtrack::kITSrefit)==0)continue;}
if(TMath::Abs(trackAOD->Eta())>fTrackEtaWindow) continue;
if(trackAOD->Pt()<fTrackPtCut) continue;
if(fDebug) printf("pt extra track %.2f \n", trackAOD->Pt());
AliVParticle *track = dynamic_cast<AliVParticle*> ((*aodExtraTracks)[it]);
AliAODMCParticle *partmc = dynamic_cast<AliAODMCParticle*> ((*aodExtraTracks)[it]);
if (!track) {
- if(fDebug) printf("track %d does not exist\n",it);
+ if(fDebug>10) printf("track %d does not exist\n",it);
continue;
}
-
- if(partmc && !partmc->IsPhysicalPrimary())continue;
+ if(!partmc) continue;
+ if(!partmc->IsPhysicalPrimary())continue;
if (track->Pt()<fTrackPtCut) {
- if(fDebug>2) printf("track %d has too low pt %.2f\n",it,track->Pt());
+ if(fDebug>10) printf("track %d has too low pt %.2f\n",it,track->Pt());
continue;
}
+ /*
+ AliAODTrack *trackAOD = dynamic_cast<AliAODTrack*>((*aodExtraTracks)[it]);//(track);
- Float_t mom[3];
- mom[0] = track->Pt();
- mom[1] = track->Phi();
- mom[2] = track->Theta();
-
- AliAODTrack *trackAOD = dynamic_cast<AliAODTrack*> (track);
if(!trackAOD) {
- if(fDebug) printf("trackAOD %d does not exist\n",it);
+ if(fDebug>10) printf("trackAOD %d does not exist\n",it);
continue;
}
trackAOD->SetFlags(AliESDtrack::kEmbedded);
- trackAOD->SetP(mom,kFALSE);
trackAOD->SetFilterMap(fFilterMask);
+ */
+ if(fDebug>10) printf("pt extra track %.2f \n", track->Pt());
- if(fDebug) printf("pt extra track %.2f \n", trackAOD->Pt());
-
- if(TMath::Abs(trackAOD->Eta())>fTrackEtaWindow) continue;
- if(trackAOD->Pt()<fTrackPtCut) continue;
- list->Add(trackAOD);
+ if(TMath::Abs(track->Eta())>fTrackEtaWindow) continue;
+ if(track->Pt()<fTrackPtCut) continue;
+ list->Add(track);
+
iCount++;
}
}
}
}
}// AODMCparticle
+ else if (type == kTrackAODMCHF){
+
+ AliAODEvent *aod = 0;
+ if(fUseAODMCInput)aod = dynamic_cast<AliAODEvent*>(InputEvent());
+ else aod = AODEvent();
+ if(!aod)return iCount;
+ TClonesArray *tca = dynamic_cast<TClonesArray*>(aod->FindListObject(AliAODMCParticle::StdBranchName()));
+ if(!tca)return iCount;
+ for(int it = 0;it < tca->GetEntriesFast();++it){
+ AliAODMCParticle *part = (AliAODMCParticle*)(tca->At(it));
+ if(!part) continue;
+ int partpdg= part->PdgCode();
+ if(!part->IsPhysicalPrimary() && !IsBMeson(partpdg) && !IsDMeson(partpdg) )continue;
+
+ if (IsBMeson(partpdg) || IsDMeson(partpdg)) {
+ iCount+= AddDaughters( list , part,tca);
+ }
+ else {
+
+ if(part->Pt()<fTrackPtCut) continue;
+ if(TMath::Abs(part->Eta())>fTrackEtaWindow) continue;
+ if(part->Charge()==0) continue;
+
+ if((part->Pt()>=fTrackPtCut) && (TMath::Abs(part->Eta())<=fTrackEtaWindow) && (part->Charge()!=0))list->Add(part);
+ iCount++;
+ }
+ }
+ }
+
list->Sort();
return iCount;
}
+Int_t AliAnalysisTaskJetCluster::AddDaughters(TList * list, AliAODMCParticle *part, TClonesArray * tca){
+ Int_t count=0;
+ Int_t nDaugthers = part->GetNDaughters();
+ for(Int_t i=0;i< nDaugthers;++i){
+ AliAODMCParticle *partdaughter = (AliAODMCParticle*)(tca->At(i));
+ if(!partdaughter) continue;
+ if(partdaughter->Pt()<fTrackPtCut)continue;
+ if(TMath::Abs(partdaughter->Eta())>fTrackEtaWindow)continue;
+ if(partdaughter->Charge()==0)continue;
+
+ if(!IsDMeson(partdaughter->PdgCode()) && !IsBMeson(partdaughter->PdgCode()) ){
+ list->Add(partdaughter);
+ count++;
+ }
+ else count+=AddDaughters(list,part,tca);
+ }
+return count;
+}
+
+
+
void AliAnalysisTaskJetCluster::LoadTrPtResolutionRootFileFromOADB() {
if (!gGrid) {
}
*/
+
+
+bool AliAnalysisTaskJetCluster::IsBMeson(int pc){
+ int bPdG[] = {511,521,10511,10521,513,523,10513,10523,20513,20523,20513,20523,515,525,531,
+ 10531,533,10533,20533,535,541,10541,543,10543,20543,545,551,10551,100551,
+ 110551,200551,210551,553,10553,20553,30553,100553,110553,120553,130553,200553,210553,220553,
+ 300553,9000533,9010553,555,10555,20555,100555,110555,120555,200555,557,100557};
+ for(int i=0;i< (int)(sizeof(bPdG)/sizeof(int));++i) if(abs(pc) == bPdG[i]) return true;
+return false;
+}
+bool AliAnalysisTaskJetCluster::IsDMeson(int pc){
+ int bPdG[] = {411,421,10411,10421,413,423,10413,10423,20431,20423,415,
+ 425,431,10431,433,10433,20433,435,441,10441,100441,443,10443,20443,
+ 100443,30443,9000443,9010443,9020443,445,100445};
+ for(int i=0;i< (int)(sizeof(bPdG)/sizeof(int));++i) if(abs(pc) == bPdG[i]) return true;
+return false;
+}
+