18 #include <TClonesArray.h>
20 #include "AliVEvent.h"
38 fMinDistanceTPCSectorEdge(-1),
39 fChargeCut(kNoChargeCut),
42 fBaseClassName =
"AliVParticle";
43 SetClassName(
"AliVParticle");
51 AliEmcalContainer(name),
52 fMinDistanceTPCSectorEdge(-1),
53 fChargeCut(kNoChargeCut),
56 fBaseClassName =
"AliVParticle";
57 SetClassName(
"AliVParticle");
71 Int_t tempID = fCurrentID;
75 AliVParticle *part = 0;
77 if (option.Contains(
"p")) {
79 if (part->P() > partMax->P()) partMax = part;
84 if (part->Pt() > partMax->Pt()) partMax = part;
101 if (i == -1) i = fCurrentID;
102 if (i < 0 || i >= this->fClArray->GetEntriesFast())
return 0;
103 AliVParticle *vp =
static_cast<AliVParticle*
>(fClArray->At(i));
115 UInt_t rejectionReason = 0;
116 if (i == -1) i = fCurrentID;
121 AliDebug(2,
"Particle not accepted.");
134 const Int_t n = GetNEntries();
138 if (fCurrentID >= n)
break;
153 const Int_t n = GetNEntries();
157 if (fCurrentID >= n)
break;
176 if (mass < 0) mass = part->M();
177 mom.SetPtEtaPhiM(part->Pt(), part->Eta(), part->Phi(),
mass);
181 mom.SetPtEtaPhiM(0, 0, 0, 0);
209 if (i == -1) i = fCurrentID;
241 if (i == -1) i = fCurrentID;
274 if (!r)
return kFALSE;
278 Int_t id = fClArray->IndexOf(vp);
302 if (!r)
return kFALSE;
325 rejectionReason |= kNullObject;
329 if (vp->TestBits(fBitMap) != (
Int_t)fBitMap) {
330 rejectionReason |= kBitMapCut;
334 if (fMinMCLabel >= 0 && TMath::Abs(vp->GetLabel()) < fMinMCLabel) {
335 rejectionReason |= kMCLabelCut;
339 if (fMaxMCLabel >= 0 && TMath::Abs(vp->GetLabel()) > fMaxMCLabel) {
340 rejectionReason |= kMCLabelCut;
346 if (vp->Charge() == 0) {
347 rejectionReason |= kChargeCut;
353 if (vp->Charge() != 0) {
354 rejectionReason |= kChargeCut;
360 if (vp->Charge() <= 0) {
361 rejectionReason |= kChargeCut;
367 if (vp->Charge() >= 0) {
368 rejectionReason |= kChargeCut;
378 rejectionReason |= kMCGeneratorCut;
401 Double_t phiDist = TMath::Abs(mom.Phi() - TMath::FloorNint(mom.Phi()/
kSector)*kSector);
403 rejectionReason |= kMinDistanceTPCSectorEdgeCut;
408 return AliEmcalContainer::ApplyKinematicCuts(mom, rejectionReason);
421 UInt_t rejectionReason = 0;
436 if (GetMinPt() == 0) {
437 trackString = TString::Format(
"%s_pT0000", GetArrayName().
Data());
439 else if (GetMinPt() < 1.0) {
440 trackString = TString::Format(
"%s_pT0%3.0f", GetArrayName().
Data(), GetMinPt()*1000.0);
443 trackString = TString::Format(
"%s_pT%4.0f", GetArrayName().
Data(), GetMinPt()*1000.0);
446 return trackString.Data();
459 AliEmcalContainer::SetArray(event);
506 std::vector<AliVParticle *> reference, variation;
507 AliVParticle *test = NULL;
508 for(
int iclust = 0; iclust < cont->
GetNParticles(); iclust++){
511 UInt_t rejectionReason = 0;
514 reference.push_back(test);
520 variation.push_back(part);
524 for(
auto part : cont->
all()){
525 variation.push_back(part);
531 if(reference.size() < 30){
532 std::cout <<
"Paritcles in reference container: " << std::endl;
533 std::cout <<
"===========================================" << std::endl;
534 for(std::vector<AliVParticle *>::iterator refit = reference.begin(); refit != reference.end(); ++refit){
535 std::cout <<
"Address: " << *refit << std::endl;
538 if(variation.size() < 30){
539 std::cout <<
"Paritcles in test container: " << std::endl;
540 std::cout <<
"===========================================" << std::endl;
541 for(std::vector<AliVParticle *>::iterator varit = variation.begin(); varit != variation.end(); ++varit){
542 std::cout <<
"Address: " << *varit << std::endl;
549 bool failure =
false;
551 for(std::vector<AliVParticle *>::iterator clit = reference.begin(); clit != reference.end(); ++clit){
552 if(std::find(variation.begin(), variation.end(), *clit) == variation.end()) {
554 std::cout <<
"Could not find particle with address " << *clit <<
" in test container" << std::endl;
561 for(std::vector<AliVParticle *>::iterator clit = variation.begin(); clit != variation.end(); ++clit){
562 if(std::find(reference.begin(), reference.end(), *clit) == reference.end()) {
564 std::cout <<
"Could not find particle with address " << *clit <<
" in reference container" << std::endl;
569 if(failure) testresult = 2;
570 }
else testresult = 1;
572 std::cout <<
"Unit test particle container, iterator type " << iteratorType << std::endl;
573 std::cout <<
"Number of expected particles: " << reference.size() <<
", number of found particles: " << variation.size() << std::endl;
574 std::cout <<
"Test result: " << testresult << std::endl;
575 std::cout <<
"-----------------------------------------------------------------------" << std::endl;
virtual AliVParticle * GetNextAcceptParticle()
void SetArray(const AliVEvent *event)
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
static AliEmcalContainerIndexMap< TClonesArray, AliVParticle > fgEmcalContainerIndexMap
! Mapping from containers to indices
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)
int RegisterArray(U *inputObject)
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()