18 #include <TClonesArray.h>
20 #include "AliVEvent.h"
22 #include "AliTLorentzVector.h"
38 fDefaultClusterEnergy(-1)
40 fBaseClassName =
"AliVCluster";
41 SetClassName(
"AliVCluster");
43 for (Int_t i = 0; i <= AliVCluster::kLastUserDefEnergy; i++) {
53 AliEmcalContainer(name),
57 fDefaultClusterEnergy(-1)
59 fBaseClassName =
"AliVCluster";
60 SetClassName(
"AliVCluster");
62 for (Int_t i = 0; i <= AliVCluster::kLastUserDefEnergy; i++) {
77 Int_t tempID = fCurrentID;
81 AliVCluster *cluster = 0;
83 if (option.Contains(
"e")) {
85 if (cluster->E() > clusterMax->E()) clusterMax = cluster;
93 cluster->GetMomentum(mom,const_cast<Double_t*>(fVertex));
114 if(i<0 || i>fClArray->GetEntriesFast())
return 0;
115 AliVCluster *vp =
static_cast<AliVCluster*
>(fClArray->At(i));
130 UInt_t rejectionReason = 0;
134 AliDebug(2,
"Cluster not accepted.");
146 Int_t i = GetIndexFromLabel(lab);
157 Int_t i = GetIndexFromLabel(lab);
167 const Int_t n = GetNEntries();
171 if (fCurrentID >= n)
break;
184 const Int_t n = GetNEntries();
188 if (fCurrentID >= n)
break;
197 if (mass < 0) mass = 0;
208 Double_t p = TMath::Sqrt(energy*energy - mass*mass);
211 vc->GetPosition(pos);
217 Double_t r = TMath::Sqrt(pos[0]*pos[0]+pos[1]*pos[1]+pos[2]*pos[2]) ;
220 mom.SetPxPyPzE( p*pos[0]/r, p*pos[1]/r, p*pos[2]/r, energy) ;
223 AliInfo(
"Null cluster radius, momentum calculation not possible");
232 if (fMassHypothesis > 0)
return GetMomentum(mom, vc, fMassHypothesis);
239 vc->GetMomentum(mom, fVertex);
243 mom.SetPtEtaPhiM(0, 0, 0, 0.139);
298 if (!r)
return kFALSE;
300 AliTLorentzVector mom;
303 return ApplyKinematicCuts(mom, rejectionReason);
309 if (!r)
return kFALSE;
311 AliTLorentzVector mom;
314 return ApplyKinematicCuts(mom, rejectionReason);
325 rejectionReason |= kNullObject;
329 if (!clus->IsEMCAL()) {
330 rejectionReason |= kIsEMCalCut;
334 if (clus->TestBits(fBitMap) != (Int_t)fBitMap) {
335 rejectionReason |= kBitMapCut;
339 if (fMinMCLabel >= 0 && TMath::Abs(clus->GetLabel()) > fMinMCLabel) {
340 rejectionReason |= kMCLabelCut;
344 if (fMaxMCLabel >= 0 && TMath::Abs(clus->GetLabel()) < fMaxMCLabel) {
345 rejectionReason |= kMCLabelCut;
350 rejectionReason |= kTimeCut;
355 rejectionReason |= kExoticCut;
359 for (Int_t i = 0; i <= AliVCluster::kLastUserDefEnergy; i++) {
361 rejectionReason |= kEnergyCut;
375 UInt_t rejectionReason = 0;
377 for(
int iclust = 0; iclust < this->fClArray->GetEntries(); ++iclust){
378 AliVCluster *clust = this->
GetCluster(iclust);
391 if (t >= 0 && t <= AliVCluster::kLastUserDefEnergy){
406 if (t >= 0 && t <= AliVCluster::kLastUserDefEnergy){
434 static TString clusterString;
439 clusterString = TString::Format(
"%s_E0000", GetArrayName().
Data());
441 else if (Ecut < 1.0) {
442 clusterString = TString::Format(
"%s_E0%3.0f", GetArrayName().
Data(), Ecut*1000.0);
445 clusterString = TString::Format(
"%s_E%4.0f", GetArrayName().
Data(), Ecut*1000.0);
448 return clusterString.Data();
457 std::vector<AliVCluster *> reference, variation;
458 AliVCluster *test = NULL;
459 for(
int iclust = 0; iclust < cont->
GetNClusters(); iclust++){
462 UInt_t rejectionReason = 0;
465 reference.push_back(test);
471 variation.push_back(*iter);
476 variation.push_back(*iter);
482 if(reference.size() < 30){
483 std::cout <<
"Clusters in reference container: " << std::endl;
484 std::cout <<
"===========================================" << std::endl;
485 for(std::vector<AliVCluster *>::iterator refit = reference.begin(); refit != reference.end(); ++refit){
486 std::cout <<
"Address: " << *refit << std::endl;
489 if(variation.size() < 30){
490 std::cout <<
"Clusters in test container: " << std::endl;
491 std::cout <<
"===========================================" << std::endl;
492 for(std::vector<AliVCluster *>::iterator varit = variation.begin(); varit != variation.end(); ++varit){
493 std::cout <<
"Address: " << *varit << std::endl;
500 bool failure =
false;
502 for(std::vector<AliVCluster *>::iterator clit = reference.begin(); clit != reference.end(); ++clit){
503 if(std::find(variation.begin(), variation.end(), *clit) == variation.end()) {
505 std::cout <<
"Could not find cluster with address " << *clit <<
" in test container" << std::endl;
512 for(std::vector<AliVCluster *>::iterator clit = variation.begin(); clit != variation.end(); ++clit){
513 if(std::find(reference.begin(), reference.end(), *clit) == reference.end()) {
515 std::cout <<
"Could not find cluster with address " << *clit <<
" in reference container" << std::endl;
520 if(failure) testresult = 2;
526 std::cout <<
"Unit test cluster container, iterator type " << iteratorType << std::endl;
527 std::cout <<
"Number of expected clusters: " << reference.size() <<
", number of found clusters: " << variation.size() << std::endl;
528 std::cout <<
"Test result: " << testresult << std::endl;
529 std::cout <<
"-----------------------------------------------------------------------" << std::endl;
AliVCluster * GetAcceptClusterWithLabel(Int_t lab) const
AliClusterIterableContainer::iterator begin() const
virtual Bool_t ApplyClusterCuts(const AliVCluster *clus, UInt_t &rejectionReason) const
Bool_t GetNextAcceptMomentum(TLorentzVector &mom)
AliClusterIterableContainer::iterator end() const
ClassImp(AliAnalysisTaskTriggerRates) AliAnalysisTaskTriggerRates
const char * GetTitle() const
AliClusterIterableContainer::iterator accept_end() const
Bool_t GetNextMomentum(TLorentzVector &mom)
Double_t fClusTimeCutLow
low time cut for clusters
Double_t fUserDefEnergyCut[AliVCluster::kLastUserDefEnergy+1]
cut on the energy of the cluster after higher level corrections (see AliVCluster.h) ...
void SetClusUserDefEnergyCut(Int_t t, Double_t cut)
AliVCluster * GetLeadingCluster(const char *opt="")
Double_t GetClusUserDefEnergyCut(Int_t t) const
bidirectional stl iterator over the EMCAL iterable container
Int_t GetDefaultClusterEnergy() const
const AliClusterIterableContainer all() const
enum AliVCluster::VCluUserDefEnergy_t VCluUserDefEnergy_t
virtual Bool_t AcceptCluster(Int_t i, UInt_t &rejectionReason) const
AliVCluster * GetAcceptCluster(Int_t i) const
Int_t GetNClusters() const
Int_t GetNAcceptedClusters() const
const AliClusterIterableContainer accepted() const
Double_t fClusTimeCutUp
up time cut for clusters
AliVCluster * GetCluster(Int_t i) const
Bool_t fExoticCut
reject clusters marked as "exotic"
AliVCluster * GetNextCluster()
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)
Bool_t GetAcceptMomentum(TLorentzVector &mom, Int_t i) const
AliClusterIterableContainer::iterator accept_begin() const
AliVCluster * GetClusterWithLabel(Int_t lab) const
int TestClusterContainerIterator(const AliClusterContainer *const cont, int iteratorType, bool verbose)
Bool_t GetMomentum(TLorentzVector &mom, const AliVCluster *vc, Double_t mass) const
Int_t fDefaultClusterEnergy
default cluster energy: -1 for clus->E(); otherwise clus->GetUserDefEnergy(fDefaultClusterEnergy) ...
AliEmcalIterableContainerT< AliVCluster > AliClusterIterableContainer
Container structure for EMCAL clusters.
AliVCluster * GetNextAcceptCluster()