18 #include <TClonesArray.h>
20 #include "AliVEvent.h"
35 fMinDistanceTPCSectorEdge(-1),
36 fChargeCut(kNoChargeCut),
39 fBaseClassName =
"AliVParticle";
40 SetClassName(
"AliVParticle");
48 AliEmcalContainer(name),
49 fMinDistanceTPCSectorEdge(-1),
50 fChargeCut(kNoChargeCut),
53 fBaseClassName =
"AliVParticle";
54 SetClassName(
"AliVParticle");
68 Int_t tempID = fCurrentID;
72 AliVParticle *part = 0;
74 if (option.Contains(
"p")) {
76 if (part->P() > partMax->P()) partMax = part;
81 if (part->Pt() > partMax->Pt()) partMax = part;
98 if (i == -1) i = fCurrentID;
99 if (i < 0 || i >= this->fClArray->GetEntriesFast())
return 0;
100 AliVParticle *vp =
static_cast<AliVParticle*
>(fClArray->At(i));
112 UInt_t rejectionReason = 0;
113 if (i == -1) i = fCurrentID;
118 AliDebug(2,
"Particle not accepted.");
131 const Int_t n = GetNEntries();
135 if (fCurrentID >= n)
break;
150 const Int_t n = GetNEntries();
154 if (fCurrentID >= n)
break;
173 if (mass < 0) mass = part->M();
174 mom.SetPtEtaPhiM(part->Pt(), part->Eta(), part->Phi(),
mass);
178 mom.SetPtEtaPhiM(0, 0, 0, 0);
206 if (i == -1) i = fCurrentID;
238 if (i == -1) i = fCurrentID;
271 if (!r)
return kFALSE;
275 Int_t
id = fClArray->IndexOf(vp);
299 if (!r)
return kFALSE;
322 rejectionReason |= kNullObject;
326 if (vp->TestBits(fBitMap) != (Int_t)fBitMap) {
327 rejectionReason |= kBitMapCut;
331 if (fMinMCLabel >= 0 && TMath::Abs(vp->GetLabel()) > fMinMCLabel) {
332 rejectionReason |= kMCLabelCut;
336 if (fMaxMCLabel >= 0 && TMath::Abs(vp->GetLabel()) < fMaxMCLabel) {
337 rejectionReason |= kMCLabelCut;
343 if (vp->Charge() == 0) {
344 rejectionReason |= kChargeCut;
350 if (vp->Charge() != 0) {
351 rejectionReason |= kChargeCut;
357 if (vp->Charge() <= 0) {
358 rejectionReason |= kChargeCut;
364 if (vp->Charge() >= 0) {
365 rejectionReason |= kChargeCut;
375 rejectionReason |= kMCGeneratorCut;
396 const Double_t
pi = TMath::Pi();
398 Double_t phiDist = TMath::Abs(mom.Phi() - TMath::FloorNint(mom.Phi()/
kSector)*kSector);
400 rejectionReason |= kMinDistanceTPCSectorEdgeCut;
405 return AliEmcalContainer::ApplyKinematicCuts(mom, rejectionReason);
418 UInt_t rejectionReason = 0;
431 static TString trackString;
433 if (GetMinPt() == 0) {
434 trackString = TString::Format(
"%s_pT0000", GetArrayName().
Data());
436 else if (GetMinPt() < 1.0) {
437 trackString = TString::Format(
"%s_pT0%3.0f", GetArrayName().
Data(), GetMinPt()*1000.0);
440 trackString = TString::Format(
"%s_pT%4.0f", GetArrayName().
Data(), GetMinPt()*1000.0);
443 return trackString.Data();
487 std::vector<AliVParticle *> reference, variation;
488 AliVParticle *test = NULL;
489 for(
int iclust = 0; iclust < cont->
GetNParticles(); iclust++){
492 UInt_t rejectionReason = 0;
495 reference.push_back(test);
501 variation.push_back(part);
505 for(
auto part : cont->
all()){
506 variation.push_back(part);
512 if(reference.size() < 30){
513 std::cout <<
"Paritcles in reference container: " << std::endl;
514 std::cout <<
"===========================================" << std::endl;
515 for(std::vector<AliVParticle *>::iterator refit = reference.begin(); refit != reference.end(); ++refit){
516 std::cout <<
"Address: " << *refit << std::endl;
519 if(variation.size() < 30){
520 std::cout <<
"Paritcles in test container: " << std::endl;
521 std::cout <<
"===========================================" << std::endl;
522 for(std::vector<AliVParticle *>::iterator varit = variation.begin(); varit != variation.end(); ++varit){
523 std::cout <<
"Address: " << *varit << std::endl;
530 bool failure =
false;
532 for(std::vector<AliVParticle *>::iterator clit = reference.begin(); clit != reference.end(); ++clit){
533 if(std::find(variation.begin(), variation.end(), *clit) == variation.end()) {
535 std::cout <<
"Could not find particle with address " << *clit <<
" in test container" << std::endl;
542 for(std::vector<AliVParticle *>::iterator clit = variation.begin(); clit != variation.end(); ++clit){
543 if(std::find(reference.begin(), reference.end(), *clit) == reference.end()) {
545 std::cout <<
"Could not find particle with address " << *clit <<
" in reference container" << std::endl;
550 if(failure) testresult = 2;
551 }
else testresult = 1;
553 std::cout <<
"Unit test particle container, iterator type " << iteratorType << std::endl;
554 std::cout <<
"Number of expected particles: " << reference.size() <<
", number of found particles: " << variation.size() << std::endl;
555 std::cout <<
"Test result: " << testresult << std::endl;
556 std::cout <<
"-----------------------------------------------------------------------" << std::endl;
virtual AliVParticle * GetNextAcceptParticle()
virtual Bool_t GetMomentum(TLorentzVector &mom, Int_t i) const
const char * GetTitle() const
const AliParticleIterableContainer all() const
Int_t GetNParticles() const
Declaration of class AliTLorentzVector.
virtual Bool_t ApplyParticleCuts(const AliVParticle *vp, UInt_t &rejectionReason) const
EChargeCut_t fChargeCut
select particles according to their charge
virtual Bool_t GetNextMomentum(TLorentzVector &mom)
Container for particles within the EMCAL framework.
virtual Bool_t GetNextAcceptMomentum(TLorentzVector &mom)
virtual AliVParticle * GetLeadingParticle(const char *opt="")
virtual AliVParticle * GetParticle(Int_t i=-1) const
EMCALIterableContainer::AliEmcalIterableContainerT< AliVParticle, EMCALIterableContainer::operator_star_object< AliVParticle > > AliParticleIterableContainer
virtual AliVParticle * GetAcceptParticle(Int_t i=-1) const
virtual Bool_t AcceptParticle(const AliVParticle *vp, UInt_t &rejectionReason) const
Double_t fMinDistanceTPCSectorEdge
require minimum distance to edge of TPC sector edge
Bool_t Data(TH1F *h, Double_t *rangefit, Bool_t writefit, Double_t &sgn, Double_t &errsgn, Double_t &bkg, Double_t &errbkg, Double_t &sgnf, Double_t &errsgnf, Double_t &sigmafit, Int_t &status)
Short_t fGeneratorIndex
select MC particles with generator index (default = -1 = switch off selection)
ClassImp(AliAnalysisTaskCRC) AliAnalysisTaskCRC
virtual Bool_t GetMomentumFromParticle(TLorentzVector &mom, const AliVParticle *part, Double_t mass) const
const AliParticleIterableMomentumContainer accepted_momentum() const
virtual Bool_t ApplyKinematicCuts(const AliTLorentzVector &mom, UInt_t &rejectionReason) const
const AliParticleIterableContainer accepted() const
int TestParticleContainerIterator(const AliParticleContainer *const cont, int iteratorType, bool verbose)
EMCALIterableContainer::AliEmcalIterableContainerT< AliVParticle, EMCALIterableContainer::operator_star_pair< AliVParticle > > AliParticleIterableMomentumContainer
Int_t GetNAcceptedParticles() const
virtual Bool_t GetAcceptMomentum(TLorentzVector &mom, Int_t i) const
const AliParticleIterableMomentumContainer all_momentum() const
virtual AliVParticle * GetNextParticle()