ROOT logo
// $Id$
//
// Container with name, TClonesArray and cuts for particles
//
// Author: M. Verweij

#include <TClonesArray.h>

#include "AliVEvent.h"
#include "AliLog.h"

#include "AliClusterContainer.h"

ClassImp(AliClusterContainer)

//________________________________________________________________________
AliClusterContainer::AliClusterContainer():
  AliEmcalContainer("AliClusterContainer"),
  fClusPtCut(0.15),
  fClusECut(0.15),
  fClusTimeCutLow(-10),
  fClusTimeCutUp(10),
  fClusterBitMap(0),
  fMCClusterBitMap(0),
  fMinMCLabel(0)
{
  // Default constructor.

  fClassName = "AliVCluster";
}

//________________________________________________________________________
AliClusterContainer::AliClusterContainer(const char *name):
  AliEmcalContainer(name),
  fClusPtCut(0.15),
  fClusECut(0.15),
  fClusTimeCutLow(-10),
  fClusTimeCutUp(10),
  fClusterBitMap(0),
  fMCClusterBitMap(0),
  fMinMCLabel(0)
{
  // Standard constructor.

  fClassName = "AliVCluster";
}

//________________________________________________________________________
AliVCluster* AliClusterContainer::GetLeadingCluster(const char* opt)
{
  // Get the leading cluster; use e if "e" is contained in opt (otherwise et)

  TString option(opt);
  option.ToLower();

  Int_t tempID = fCurrentID;

  AliVCluster *clusterMax = GetNextAcceptCluster(0);
  AliVCluster *cluster = 0;

  if (option.Contains("e")) {
    while ((cluster = GetNextAcceptCluster())) {
      if (cluster->E() > clusterMax->E()) clusterMax = cluster;
    }
  }
  else {
    Double_t et = 0;
    Double_t etmax = 0;
    while ((cluster = GetNextAcceptCluster())) {
      TLorentzVector mom;
      cluster->GetMomentum(mom,const_cast<Double_t*>(fVertex));
      et = mom.Et();
      if (et > etmax) { 
	clusterMax = cluster;
	etmax = et;
      }
    }
  }

  fCurrentID = tempID;

  return clusterMax;
}

//________________________________________________________________________
AliVCluster* AliClusterContainer::GetCluster(Int_t i) const 
{
  //Get i^th cluster in array

  if(i<0 || i>fClArray->GetEntriesFast()) return 0;
  AliVCluster *vp = static_cast<AliVCluster*>(fClArray->At(i));
  return vp;

}

//________________________________________________________________________
AliVCluster* AliClusterContainer::GetAcceptCluster(Int_t i) 
{
  //Return pointer to cluster if cluster is accepted

  AliVCluster *vc = GetCluster(i);
  if (!vc) return 0;

  if (AcceptCluster(vc))
    return vc;
  else {
    AliDebug(2,"Cluster not accepted.");
    return 0;
  }
}

//________________________________________________________________________
AliVCluster* AliClusterContainer::GetClusterWithLabel(Int_t lab) const 
{
  //Get particle with label lab in array
  
  Int_t i = GetIndexFromLabel(lab);
  return GetCluster(i);
}

//________________________________________________________________________
AliVCluster* AliClusterContainer::GetAcceptClusterWithLabel(Int_t lab)  
{
  //Get particle with label lab in array
  
  Int_t i = GetIndexFromLabel(lab);
  return GetAcceptCluster(i);
}

//________________________________________________________________________
AliVCluster* AliClusterContainer::GetNextAcceptCluster(Int_t i) 
{
  //Get next accepted cluster; if i >= 0 (re)start counter from i; return 0 if no accepted cluster could be found

  if (i>=0) fCurrentID = i;

  const Int_t n = GetNEntries();
  AliVCluster *c = 0;
  while (fCurrentID < n && !c) { 
    c = GetAcceptCluster(fCurrentID);
    fCurrentID++;
  }

  return c;
}

//________________________________________________________________________
AliVCluster* AliClusterContainer::GetNextCluster(Int_t i) 
{
  //Get next cluster; if i >= 0 (re)start counter from i; return 0 if no cluster could be found

  if (i>=0) fCurrentID = i;

  const Int_t n = GetNEntries();
  AliVCluster *c = 0;
  while (fCurrentID < n && !c) { 
    c = GetCluster(fCurrentID);
    fCurrentID++;
  }

  return c;
}

//________________________________________________________________________
void AliClusterContainer::GetMomentum(TLorentzVector &mom, Int_t i) const
{
  //Get momentum of the i^th cluster in array

  AliVCluster *vc = GetCluster(i);
  if(vc) vc->GetMomentum(mom,const_cast<Double_t*>(fVertex));
}

//________________________________________________________________________
Bool_t AliClusterContainer::AcceptCluster(AliVCluster *clus)
{
  // Return true if cluster is accepted.

  fRejectionReason = 0;

  if (!clus) {
    fRejectionReason |= kNullObject;
    return kFALSE;
  }
      
  if (!clus->IsEMCAL()) {
    fRejectionReason |= kIsEMCalCut;
    return kFALSE;
  }

  if (clus->GetLabel() > fMinMCLabel) {
    if (clus->TestBits(fMCClusterBitMap) != (Int_t)fMCClusterBitMap) {
      AliDebug(2,"MC Cluster not accepted because of MC bit map.");
      fRejectionReason |= kBitMapCut;
      return kFALSE;
    }
  }
  else {
    if (clus->TestBits(fClusterBitMap) != (Int_t)fClusterBitMap) {
      AliDebug(2,"Cluster not accepted because of bit map.");
      fRejectionReason |= kBitMapCut;
      return kFALSE;
    }
  }

  if (clus->GetTOF() > fClusTimeCutUp || clus->GetTOF() < fClusTimeCutLow) {
    fRejectionReason |= kTimeCut;
    return kFALSE;
  }

  if (clus->E()<fClusECut) {
    fRejectionReason |= kEnergyCut;
    return kFALSE;
  }

  TLorentzVector nPart;
  clus->GetMomentum(nPart, const_cast<Double_t*>(fVertex));

  if (nPart.Et() < fClusPtCut) {
    fRejectionReason |= kPtCut;
    return kFALSE;
  }
  
  return kTRUE;
}

//________________________________________________________________________
Int_t AliClusterContainer::GetNAcceptedClusters()
{
  // Get number of accepted particles

  Int_t nClus = 0;

  AliVCluster *clus = GetNextAcceptCluster(0);
  if(clus) nClus = 1;
  while (GetNextAcceptCluster())
    nClus++;

  return nClus;
}

//________________________________________________________________________
void AliClusterContainer::SetClassName(const char *clname)
{
  // Set the class name

  TClass cls(clname);
  if (cls.InheritsFrom("AliVCluster")) fClassName = clname;
  else AliError(Form("Unable to set class name %s for a AliClusterContainer, it must inherits from AliVCluster!",clname));
}
 AliClusterContainer.cxx:1
 AliClusterContainer.cxx:2
 AliClusterContainer.cxx:3
 AliClusterContainer.cxx:4
 AliClusterContainer.cxx:5
 AliClusterContainer.cxx:6
 AliClusterContainer.cxx:7
 AliClusterContainer.cxx:8
 AliClusterContainer.cxx:9
 AliClusterContainer.cxx:10
 AliClusterContainer.cxx:11
 AliClusterContainer.cxx:12
 AliClusterContainer.cxx:13
 AliClusterContainer.cxx:14
 AliClusterContainer.cxx:15
 AliClusterContainer.cxx:16
 AliClusterContainer.cxx:17
 AliClusterContainer.cxx:18
 AliClusterContainer.cxx:19
 AliClusterContainer.cxx:20
 AliClusterContainer.cxx:21
 AliClusterContainer.cxx:22
 AliClusterContainer.cxx:23
 AliClusterContainer.cxx:24
 AliClusterContainer.cxx:25
 AliClusterContainer.cxx:26
 AliClusterContainer.cxx:27
 AliClusterContainer.cxx:28
 AliClusterContainer.cxx:29
 AliClusterContainer.cxx:30
 AliClusterContainer.cxx:31
 AliClusterContainer.cxx:32
 AliClusterContainer.cxx:33
 AliClusterContainer.cxx:34
 AliClusterContainer.cxx:35
 AliClusterContainer.cxx:36
 AliClusterContainer.cxx:37
 AliClusterContainer.cxx:38
 AliClusterContainer.cxx:39
 AliClusterContainer.cxx:40
 AliClusterContainer.cxx:41
 AliClusterContainer.cxx:42
 AliClusterContainer.cxx:43
 AliClusterContainer.cxx:44
 AliClusterContainer.cxx:45
 AliClusterContainer.cxx:46
 AliClusterContainer.cxx:47
 AliClusterContainer.cxx:48
 AliClusterContainer.cxx:49
 AliClusterContainer.cxx:50
 AliClusterContainer.cxx:51
 AliClusterContainer.cxx:52
 AliClusterContainer.cxx:53
 AliClusterContainer.cxx:54
 AliClusterContainer.cxx:55
 AliClusterContainer.cxx:56
 AliClusterContainer.cxx:57
 AliClusterContainer.cxx:58
 AliClusterContainer.cxx:59
 AliClusterContainer.cxx:60
 AliClusterContainer.cxx:61
 AliClusterContainer.cxx:62
 AliClusterContainer.cxx:63
 AliClusterContainer.cxx:64
 AliClusterContainer.cxx:65
 AliClusterContainer.cxx:66
 AliClusterContainer.cxx:67
 AliClusterContainer.cxx:68
 AliClusterContainer.cxx:69
 AliClusterContainer.cxx:70
 AliClusterContainer.cxx:71
 AliClusterContainer.cxx:72
 AliClusterContainer.cxx:73
 AliClusterContainer.cxx:74
 AliClusterContainer.cxx:75
 AliClusterContainer.cxx:76
 AliClusterContainer.cxx:77
 AliClusterContainer.cxx:78
 AliClusterContainer.cxx:79
 AliClusterContainer.cxx:80
 AliClusterContainer.cxx:81
 AliClusterContainer.cxx:82
 AliClusterContainer.cxx:83
 AliClusterContainer.cxx:84
 AliClusterContainer.cxx:85
 AliClusterContainer.cxx:86
 AliClusterContainer.cxx:87
 AliClusterContainer.cxx:88
 AliClusterContainer.cxx:89
 AliClusterContainer.cxx:90
 AliClusterContainer.cxx:91
 AliClusterContainer.cxx:92
 AliClusterContainer.cxx:93
 AliClusterContainer.cxx:94
 AliClusterContainer.cxx:95
 AliClusterContainer.cxx:96
 AliClusterContainer.cxx:97
 AliClusterContainer.cxx:98
 AliClusterContainer.cxx:99
 AliClusterContainer.cxx:100
 AliClusterContainer.cxx:101
 AliClusterContainer.cxx:102
 AliClusterContainer.cxx:103
 AliClusterContainer.cxx:104
 AliClusterContainer.cxx:105
 AliClusterContainer.cxx:106
 AliClusterContainer.cxx:107
 AliClusterContainer.cxx:108
 AliClusterContainer.cxx:109
 AliClusterContainer.cxx:110
 AliClusterContainer.cxx:111
 AliClusterContainer.cxx:112
 AliClusterContainer.cxx:113
 AliClusterContainer.cxx:114
 AliClusterContainer.cxx:115
 AliClusterContainer.cxx:116
 AliClusterContainer.cxx:117
 AliClusterContainer.cxx:118
 AliClusterContainer.cxx:119
 AliClusterContainer.cxx:120
 AliClusterContainer.cxx:121
 AliClusterContainer.cxx:122
 AliClusterContainer.cxx:123
 AliClusterContainer.cxx:124
 AliClusterContainer.cxx:125
 AliClusterContainer.cxx:126
 AliClusterContainer.cxx:127
 AliClusterContainer.cxx:128
 AliClusterContainer.cxx:129
 AliClusterContainer.cxx:130
 AliClusterContainer.cxx:131
 AliClusterContainer.cxx:132
 AliClusterContainer.cxx:133
 AliClusterContainer.cxx:134
 AliClusterContainer.cxx:135
 AliClusterContainer.cxx:136
 AliClusterContainer.cxx:137
 AliClusterContainer.cxx:138
 AliClusterContainer.cxx:139
 AliClusterContainer.cxx:140
 AliClusterContainer.cxx:141
 AliClusterContainer.cxx:142
 AliClusterContainer.cxx:143
 AliClusterContainer.cxx:144
 AliClusterContainer.cxx:145
 AliClusterContainer.cxx:146
 AliClusterContainer.cxx:147
 AliClusterContainer.cxx:148
 AliClusterContainer.cxx:149
 AliClusterContainer.cxx:150
 AliClusterContainer.cxx:151
 AliClusterContainer.cxx:152
 AliClusterContainer.cxx:153
 AliClusterContainer.cxx:154
 AliClusterContainer.cxx:155
 AliClusterContainer.cxx:156
 AliClusterContainer.cxx:157
 AliClusterContainer.cxx:158
 AliClusterContainer.cxx:159
 AliClusterContainer.cxx:160
 AliClusterContainer.cxx:161
 AliClusterContainer.cxx:162
 AliClusterContainer.cxx:163
 AliClusterContainer.cxx:164
 AliClusterContainer.cxx:165
 AliClusterContainer.cxx:166
 AliClusterContainer.cxx:167
 AliClusterContainer.cxx:168
 AliClusterContainer.cxx:169
 AliClusterContainer.cxx:170
 AliClusterContainer.cxx:171
 AliClusterContainer.cxx:172
 AliClusterContainer.cxx:173
 AliClusterContainer.cxx:174
 AliClusterContainer.cxx:175
 AliClusterContainer.cxx:176
 AliClusterContainer.cxx:177
 AliClusterContainer.cxx:178
 AliClusterContainer.cxx:179
 AliClusterContainer.cxx:180
 AliClusterContainer.cxx:181
 AliClusterContainer.cxx:182
 AliClusterContainer.cxx:183
 AliClusterContainer.cxx:184
 AliClusterContainer.cxx:185
 AliClusterContainer.cxx:186
 AliClusterContainer.cxx:187
 AliClusterContainer.cxx:188
 AliClusterContainer.cxx:189
 AliClusterContainer.cxx:190
 AliClusterContainer.cxx:191
 AliClusterContainer.cxx:192
 AliClusterContainer.cxx:193
 AliClusterContainer.cxx:194
 AliClusterContainer.cxx:195
 AliClusterContainer.cxx:196
 AliClusterContainer.cxx:197
 AliClusterContainer.cxx:198
 AliClusterContainer.cxx:199
 AliClusterContainer.cxx:200
 AliClusterContainer.cxx:201
 AliClusterContainer.cxx:202
 AliClusterContainer.cxx:203
 AliClusterContainer.cxx:204
 AliClusterContainer.cxx:205
 AliClusterContainer.cxx:206
 AliClusterContainer.cxx:207
 AliClusterContainer.cxx:208
 AliClusterContainer.cxx:209
 AliClusterContainer.cxx:210
 AliClusterContainer.cxx:211
 AliClusterContainer.cxx:212
 AliClusterContainer.cxx:213
 AliClusterContainer.cxx:214
 AliClusterContainer.cxx:215
 AliClusterContainer.cxx:216
 AliClusterContainer.cxx:217
 AliClusterContainer.cxx:218
 AliClusterContainer.cxx:219
 AliClusterContainer.cxx:220
 AliClusterContainer.cxx:221
 AliClusterContainer.cxx:222
 AliClusterContainer.cxx:223
 AliClusterContainer.cxx:224
 AliClusterContainer.cxx:225
 AliClusterContainer.cxx:226
 AliClusterContainer.cxx:227
 AliClusterContainer.cxx:228
 AliClusterContainer.cxx:229
 AliClusterContainer.cxx:230
 AliClusterContainer.cxx:231
 AliClusterContainer.cxx:232
 AliClusterContainer.cxx:233
 AliClusterContainer.cxx:234
 AliClusterContainer.cxx:235
 AliClusterContainer.cxx:236
 AliClusterContainer.cxx:237
 AliClusterContainer.cxx:238
 AliClusterContainer.cxx:239
 AliClusterContainer.cxx:240
 AliClusterContainer.cxx:241
 AliClusterContainer.cxx:242
 AliClusterContainer.cxx:243
 AliClusterContainer.cxx:244
 AliClusterContainer.cxx:245
 AliClusterContainer.cxx:246
 AliClusterContainer.cxx:247
 AliClusterContainer.cxx:248
 AliClusterContainer.cxx:249