ROOT logo
//
// Emcal Container Base class
//
// Author: M. Verweij


#include <TClonesArray.h>
#include "AliVEvent.h"
#include "AliLog.h"
#include "AliNamedArrayI.h"

#include "AliEmcalContainer.h"

ClassImp(AliEmcalContainer)

//________________________________________________________________________
AliEmcalContainer::AliEmcalContainer():
  TNamed("AliEmcalContainer","AliEmcalContainer"),
  fClArrayName(),
  fClassName(),
  fIsParticleLevel(kFALSE),
  fClArray(0),
  fCurrentID(0),
  fLabelMap(0),
  fRejectionReason(0)
{
  // Default constructor.

  fVertex[0] = 0;
  fVertex[1] = 0;
  fVertex[2] = 0;
}

//________________________________________________________________________
AliEmcalContainer::AliEmcalContainer(const char *name):
  TNamed(name,name),
  fClArrayName(),
  fClassName(),
  fIsParticleLevel(kFALSE),
  fClArray(0),
  fCurrentID(0),
  fLabelMap(0),
  fRejectionReason(0)
{
  // Standard constructor.

  fVertex[0] = 0;
  fVertex[1] = 0;
  fVertex[2] = 0;
}

//________________________________________________________________________
void AliEmcalContainer::SetArray(AliVEvent *event) 
{
  // Get array from event.

  const AliVVertex *vertex = event->GetPrimaryVertex();
  if (vertex) vertex->GetXYZ(fVertex);

  if (!fClArrayName.IsNull() && !fClArray) {
    fClArray = dynamic_cast<TClonesArray*>(event->FindListObject(fClArrayName));
    if (!fClArray) {
      AliError(Form("%s: Could not retrieve array with name %s!", GetName(), fClArrayName.Data())); 
      return;
    }
  } else {
    return;
  }

  if (!fClassName.IsNull()) {
    TString objname(fClArray->GetClass()->GetName());
    TClass cls(objname);
    if (!cls.InheritsFrom(fClassName)) {
      AliError(Form("%s: Objects of type %s in %s are not inherited from %s!", 
		    GetName(), cls.GetName(), fClArrayName.Data(), fClassName.Data())); 
      fClArray = 0;
    }
  }

  fLabelMap = dynamic_cast<AliNamedArrayI*>(event->FindListObject(fClArrayName + "_Map"));
}

//________________________________________________________________________
Int_t AliEmcalContainer::GetIndexFromLabel(Int_t lab) const
{ 
  if (fLabelMap) {
    if (lab < fLabelMap->GetSize()) {
      return fLabelMap->At(lab); 
    }
    else {
      AliDebug(3,Form("%s_AliEmcalContainer::GetIndexFromLabel - Label not found in the map, returning -1...",fClArrayName.Data()));
      return -1;
    }
  }
  else {
    AliDebug(3,Form("%s_AliEmcalContainer::GetIndexFromLabel - No index-label map found, returning label...",fClArrayName.Data()));
    return lab; 
  }
}

//________________________________________________________________________
UShort_t AliEmcalContainer::GetRejectionReasonBitPosition() const
{ 
  // Returns the highest bit in the rejection map.

  UInt_t rs = fRejectionReason;
  UShort_t p = 0;
  while (rs >>= 1) { p++; }
  return p;
}
 AliEmcalContainer.cxx:1
 AliEmcalContainer.cxx:2
 AliEmcalContainer.cxx:3
 AliEmcalContainer.cxx:4
 AliEmcalContainer.cxx:5
 AliEmcalContainer.cxx:6
 AliEmcalContainer.cxx:7
 AliEmcalContainer.cxx:8
 AliEmcalContainer.cxx:9
 AliEmcalContainer.cxx:10
 AliEmcalContainer.cxx:11
 AliEmcalContainer.cxx:12
 AliEmcalContainer.cxx:13
 AliEmcalContainer.cxx:14
 AliEmcalContainer.cxx:15
 AliEmcalContainer.cxx:16
 AliEmcalContainer.cxx:17
 AliEmcalContainer.cxx:18
 AliEmcalContainer.cxx:19
 AliEmcalContainer.cxx:20
 AliEmcalContainer.cxx:21
 AliEmcalContainer.cxx:22
 AliEmcalContainer.cxx:23
 AliEmcalContainer.cxx:24
 AliEmcalContainer.cxx:25
 AliEmcalContainer.cxx:26
 AliEmcalContainer.cxx:27
 AliEmcalContainer.cxx:28
 AliEmcalContainer.cxx:29
 AliEmcalContainer.cxx:30
 AliEmcalContainer.cxx:31
 AliEmcalContainer.cxx:32
 AliEmcalContainer.cxx:33
 AliEmcalContainer.cxx:34
 AliEmcalContainer.cxx:35
 AliEmcalContainer.cxx:36
 AliEmcalContainer.cxx:37
 AliEmcalContainer.cxx:38
 AliEmcalContainer.cxx:39
 AliEmcalContainer.cxx:40
 AliEmcalContainer.cxx:41
 AliEmcalContainer.cxx:42
 AliEmcalContainer.cxx:43
 AliEmcalContainer.cxx:44
 AliEmcalContainer.cxx:45
 AliEmcalContainer.cxx:46
 AliEmcalContainer.cxx:47
 AliEmcalContainer.cxx:48
 AliEmcalContainer.cxx:49
 AliEmcalContainer.cxx:50
 AliEmcalContainer.cxx:51
 AliEmcalContainer.cxx:52
 AliEmcalContainer.cxx:53
 AliEmcalContainer.cxx:54
 AliEmcalContainer.cxx:55
 AliEmcalContainer.cxx:56
 AliEmcalContainer.cxx:57
 AliEmcalContainer.cxx:58
 AliEmcalContainer.cxx:59
 AliEmcalContainer.cxx:60
 AliEmcalContainer.cxx:61
 AliEmcalContainer.cxx:62
 AliEmcalContainer.cxx:63
 AliEmcalContainer.cxx:64
 AliEmcalContainer.cxx:65
 AliEmcalContainer.cxx:66
 AliEmcalContainer.cxx:67
 AliEmcalContainer.cxx:68
 AliEmcalContainer.cxx:69
 AliEmcalContainer.cxx:70
 AliEmcalContainer.cxx:71
 AliEmcalContainer.cxx:72
 AliEmcalContainer.cxx:73
 AliEmcalContainer.cxx:74
 AliEmcalContainer.cxx:75
 AliEmcalContainer.cxx:76
 AliEmcalContainer.cxx:77
 AliEmcalContainer.cxx:78
 AliEmcalContainer.cxx:79
 AliEmcalContainer.cxx:80
 AliEmcalContainer.cxx:81
 AliEmcalContainer.cxx:82
 AliEmcalContainer.cxx:83
 AliEmcalContainer.cxx:84
 AliEmcalContainer.cxx:85
 AliEmcalContainer.cxx:86
 AliEmcalContainer.cxx:87
 AliEmcalContainer.cxx:88
 AliEmcalContainer.cxx:89
 AliEmcalContainer.cxx:90
 AliEmcalContainer.cxx:91
 AliEmcalContainer.cxx:92
 AliEmcalContainer.cxx:93
 AliEmcalContainer.cxx:94
 AliEmcalContainer.cxx:95
 AliEmcalContainer.cxx:96
 AliEmcalContainer.cxx:97
 AliEmcalContainer.cxx:98
 AliEmcalContainer.cxx:99
 AliEmcalContainer.cxx:100
 AliEmcalContainer.cxx:101
 AliEmcalContainer.cxx:102
 AliEmcalContainer.cxx:103
 AliEmcalContainer.cxx:104
 AliEmcalContainer.cxx:105
 AliEmcalContainer.cxx:106
 AliEmcalContainer.cxx:107
 AliEmcalContainer.cxx:108
 AliEmcalContainer.cxx:109
 AliEmcalContainer.cxx:110