18 #include <TClonesArray.h> 20 #include "AliVEvent.h" 38 fMinDistanceTPCSectorEdge(-1),
39 fChargeCut(kNoChargeCut),
42 fBaseClassName =
"AliVParticle";
43 SetClassName(
"AliVParticle");
51 AliEmcalContainer(name),
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;
175 if (part && part->Eta() < 1e6 && part->Eta() > -1e6) {
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);
286 if(!status)
return false;
304 if (!r)
return kFALSE;
327 rejectionReason |= kNullObject;
331 if (vp->TestBits(fBitMap) != (
Int_t)fBitMap) {
332 rejectionReason |= kBitMapCut;
336 if (fMinMCLabel >= 0 && TMath::Abs(vp->GetLabel()) < fMinMCLabel) {
337 rejectionReason |= kMCLabelCut;
341 if (fMaxMCLabel >= 0 && TMath::Abs(vp->GetLabel()) > fMaxMCLabel) {
342 rejectionReason |= kMCLabelCut;
348 if (vp->Charge() == 0) {
349 rejectionReason |= kChargeCut;
355 if (vp->Charge() != 0) {
356 rejectionReason |= kChargeCut;
362 if (vp->Charge() <= 0) {
363 rejectionReason |= kChargeCut;
369 if (vp->Charge() >= 0) {
370 rejectionReason |= kChargeCut;
380 rejectionReason |= kMCGeneratorCut;
403 Double_t phiDist = TMath::Abs(mom.Phi() - TMath::FloorNint(mom.Phi()/
kSector)*kSector);
405 rejectionReason |= kMinDistanceTPCSectorEdgeCut;
410 return AliEmcalContainer::ApplyKinematicCuts(mom, rejectionReason);
423 UInt_t rejectionReason = 0;
437 trackString = TString::Format(
"%s_pT%04d", GetArrayName().
Data(), static_cast<int>(GetMinPt()*1000.0));
438 return trackString.Data();
451 AliEmcalContainer::SetArray(event);
498 std::vector<AliVParticle *> reference, variation;
499 AliVParticle *
test = NULL;
500 for(
int iclust = 0; iclust < cont->
GetNParticles(); iclust++){
503 UInt_t rejectionReason = 0;
506 reference.push_back(test);
512 variation.push_back(
part);
517 variation.push_back(
part);
523 if(reference.size() < 30){
524 std::cout <<
"Paritcles in reference container: " << std::endl;
525 std::cout <<
"===========================================" << std::endl;
526 for(std::vector<AliVParticle *>::iterator refit = reference.begin(); refit != reference.end(); ++refit){
527 std::cout <<
"Address: " << *refit << std::endl;
530 if(variation.size() < 30){
531 std::cout <<
"Paritcles in test container: " << std::endl;
532 std::cout <<
"===========================================" << std::endl;
533 for(std::vector<AliVParticle *>::iterator varit = variation.begin(); varit != variation.end(); ++varit){
534 std::cout <<
"Address: " << *varit << std::endl;
541 bool failure =
false;
543 for(std::vector<AliVParticle *>::iterator clit = reference.begin(); clit != reference.end(); ++clit){
544 if(std::find(variation.begin(), variation.end(), *clit) == variation.end()) {
546 std::cout <<
"Could not find particle with address " << *clit <<
" in test container" << std::endl;
553 for(std::vector<AliVParticle *>::iterator clit = variation.begin(); clit != variation.end(); ++clit){
554 if(std::find(reference.begin(), reference.end(), *clit) == reference.end()) {
556 std::cout <<
"Could not find particle with address " << *clit <<
" in reference container" << std::endl;
561 if(failure) testresult = 2;
562 }
else testresult = 1;
564 std::cout <<
"Unit test particle container, iterator type " << iteratorType << std::endl;
565 std::cout <<
"Number of expected particles: " << reference.size() <<
", number of found particles: " << variation.size() << std::endl;
566 std::cout <<
"Test result: " << testresult << std::endl;
567 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)
TString part
use mixed event to constrain combinatorial background
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)
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
void test(int runnumber=195345)
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()