"phosTrigger",
"fmdClusters",
"pmdClusters",
+ "hmpidRings",
"dimuons",
"AliAODTZERO",
"AliAODVZERO",
- "AliAODZDC"
+ "AliAODZDC",
+ "AliTOFHeader"
#ifdef MFT_UPGRADE
,"AliAODMFT"
#endif
fPHOSTrigger(0),
fFmdClusters(0),
fPmdClusters(0),
+ fHMPIDrings(0),
fDimuons(0),
fAODTZERO(0),
fAODVZERO(0),
- fAODZDC(0)
+ fAODZDC(0),
+ fTOFHeader(0)
#ifdef MFT_UPGRADE
,fAODMFT(0)
#endif
{
// default constructor
+ if (TClass::IsCallingNew() != TClass::kDummyNew) fAODObjects = new TList();
}
//______________________________________________________________________________
fPHOSTrigger(new AliAODCaloTrigger(*aod.fPHOSTrigger)),
fFmdClusters(new TClonesArray(*aod.fFmdClusters)),
fPmdClusters(new TClonesArray(*aod.fPmdClusters)),
+ fHMPIDrings(new TClonesArray(*aod.fHMPIDrings)),
fDimuons(new TClonesArray(*aod.fDimuons)),
fAODTZERO(new AliAODTZERO(*aod.fAODTZERO)),
fAODVZERO(new AliAODVZERO(*aod.fAODVZERO)),
- fAODZDC(new AliAODZDC(*aod.fAODZDC))
+ fAODZDC(new AliAODZDC(*aod.fAODZDC)),
+ fTOFHeader(new AliTOFHeader(*aod.fTOFHeader))
#ifdef MFT_UPGRADE
,fAODMFT(new AliAODMFT(*aod.fAODMFT))
#endif
AddObject(fPHOSTrigger);
AddObject(fFmdClusters);
AddObject(fPmdClusters);
+ AddObject(fHMPIDrings);
AddObject(fDimuons);
AddObject(fAODTZERO);
AddObject(fAODVZERO);
AddObject(fAODZDC);
+ AddObject(fTOFHeader);
#ifdef MFT_UPGRADE
AddObject(fAODVZERO);
#endif
AliAODEvent::~AliAODEvent()
{
// destructor
+ delete fAODFolder;
+ fAODFolder = 0;
if(!fConnected) {
- fAODObjects->Delete("slow");
+// fAODObjects->Delete("slow");
delete fAODObjects;
}
- delete fAODFolder;
}
//______________________________________________________________________________
// Please be aware that in order to increase performance you should
// refrain from using TObjArrays (if possible). Use TClonesArrays, instead.
- if ( !fAODObjects ) {
- fAODObjects = new TList();
- fAODObjects->SetOwner();
- }
+// if ( !fAODObjects ) {
+// fAODObjects = new TList();
+// fAODObjects->SetOwner();
+// }
if ( !fAODObjects->FindObject(obj) )
{
fAODObjects->AddLast(obj);
AddObject(new AliAODCaloTrigger()); // PHOS
AddObject(new TClonesArray("AliAODFmdCluster", 0));
AddObject(new TClonesArray("AliAODPmdCluster", 0));
+ AddObject(new TClonesArray("AliAODHMPIDrings", 0));
AddObject(new TClonesArray("AliAODDimuon", 0));
AddObject(new AliAODTZERO());
AddObject(new AliAODVZERO());
AddObject(new AliAODZDC());
+ AddObject(new AliTOFHeader());
#ifdef MFT_UPGRADE
AddObject(new AliAODMFT());
#endif
fEmcalCells = (AliAODCaloCells*)fAODObjects->FindObject("emcalCells");
fPhosCells = (AliAODCaloCells*)fAODObjects->FindObject("phosCells");
fCaloClusters = (TClonesArray*)fAODObjects->FindObject("caloClusters");
- fEMCALTrigger = (AliAODCaloTrigger*)fAODObjects->FindObject("emcalTrigger");
- fPHOSTrigger = (AliAODCaloTrigger*)fAODObjects->FindObject("phosTrigger");
+ fEMCALTrigger = (AliAODCaloTrigger*)fAODObjects->FindObject("emcalTrigger");
+ fPHOSTrigger = (AliAODCaloTrigger*)fAODObjects->FindObject("phosTrigger");
fFmdClusters = (TClonesArray*)fAODObjects->FindObject("fmdClusters");
fPmdClusters = (TClonesArray*)fAODObjects->FindObject("pmdClusters");
+ fHMPIDrings = (TClonesArray*)fAODObjects->FindObject("hmpidRings");
fDimuons = (TClonesArray*)fAODObjects->FindObject("dimuons");
fAODTZERO = (AliAODTZERO*)fAODObjects->FindObject("AliAODTZERO");
fAODVZERO = (AliAODVZERO*)fAODObjects->FindObject("AliAODVZERO");
fAODZDC = (AliAODZDC*)fAODObjects->FindObject("AliAODZDC");
+ fTOFHeader = (AliTOFHeader*)fAODObjects->FindObject("AliTOFHeader");
#ifdef MFT_UPGRADE
fAODMFT = (AliAODMFT*)fAODObjects->FindObject("AliAODMFT");
#endif
Int_t caloClusSize,
Int_t fmdClusSize,
Int_t pmdClusSize,
+ Int_t hmpidRingsSize,
Int_t dimuonArrSize
)
{
// deletes content of standard arrays and resets size
-
if (fTracks) {
fTracks->Delete();
if (trkArrSize > fTracks->GetSize())
if (pmdClusSize > fPmdClusters->GetSize())
fPmdClusters->Expand(pmdClusSize);
}
+ if (fHMPIDrings) {
+ fHMPIDrings->Delete();
+ if (hmpidRingsSize > fHMPIDrings->GetSize())
+ fHMPIDrings->Expand(hmpidRingsSize);
+ }
if (fDimuons) {
fDimuons->Delete();
if (dimuonArrSize > fDimuons->GetSize())
fEMCALTrigger->DeAllocate();
if (fPHOSTrigger)
fPHOSTrigger->DeAllocate();
+
}
void AliAODEvent::ClearStd()
if (fFmdClusters)
fFmdClusters ->Clear();
if (fPmdClusters)
- fPmdClusters ->Clear();
+ fPmdClusters ->Clear();
+ if (fHMPIDrings)
+ fHMPIDrings ->Clear();
if (fDimuons)
fDimuons ->Clear();
aodEvent->SetConnected();
// Check if already connected to tree
TList* connectedList = (TList*) (tree->GetUserInfo()->FindObject("AODObjectsConnectedToTree"));
- if (connectedList && (strcmp(opt, "reconnect"))) {
+ if (connectedList && (!strcmp(opt, "reconnect"))) {
// If connected use the connected list of objects
- delete fAODObjects;
- fAODObjects = connectedList;
- GetStdContent();
- fConnected = kTRUE;
- return;
+ if (fAODObjects != connectedList) {
+ delete fAODObjects;
+ fAODObjects = connectedList;
+ }
+ GetStdContent();
+ fConnected = kTRUE;
+ return;
}
// Connect to tree
// prevent a memory leak when reading back the TList
else return IsPileupFromSPD(5,0.8);
}
+void AliAODEvent::Reset()
+{
+ // Handle the cases
+ // Std content + Non std content
+
+ ClearStd();
+
+ if(fAODObjects->GetSize()>kAODListN){
+ // we have non std content
+ // this also covers aodfriends
+ for(int i = kAODListN;i < fAODObjects->GetSize();++i){
+ TObject *pObject = fAODObjects->At(i);
+ // TClonesArrays
+ if(pObject->InheritsFrom(TClonesArray::Class())){
+ ((TClonesArray*)pObject)->Delete();
+ }
+ else if(!pObject->InheritsFrom(TCollection::Class())){
+ TClass *pClass = TClass::GetClass(pObject->ClassName());
+ if (pClass && pClass->GetListOfMethods()->FindObject("Clear")) {
+ AliDebug(1, Form("Clear for object %s class %s", pObject->GetName(), pObject->ClassName()));
+ pObject->Clear();
+ }
+ else {
+ AliDebug(1, Form("ResetWithPlacementNew for object %s class %s", pObject->GetName(), pObject->ClassName()));
+ Long_t dtoronly = TObject::GetDtorOnly();
+ TObject::SetDtorOnly(pObject);
+ delete pObject;
+ pClass->New(pObject);
+ TObject::SetDtorOnly((void*)dtoronly);
+ }
+ }
+ else{
+ AliWarning(Form("No reset for %s \n",
+ pObject->ClassName()));
+ }
+ }
+ }
+}
+
Float_t AliAODEvent::GetVZEROEqMultiplicity(Int_t i) const
{
// Get VZERO Multiplicity for channel i
return (fAODVZERO->GetMultiplicity(i)/factor);
}
+
+//------------------------------------------------------------
+void AliAODEvent::SetTOFHeader(const AliTOFHeader *header)
+{
+ //
+ // Set the TOF event_time
+ //
+
+ if (fTOFHeader) {
+ *fTOFHeader=*header;
+ //fTOFHeader->SetName(fgkESDListName[kTOFHeader]);
+ }
+ else {
+ // for analysis of reconstructed events
+ // when this information is not avaliable
+ fTOFHeader = new AliTOFHeader(*header);
+ //AddObject(fTOFHeader);
+ }
+
+}
+//------------------------------------------------------------
+AliAODHMPIDrings *AliAODEvent::GetHMPIDringForTrackID(Int_t trackID)
+{
+ //
+ // Returns the HMPID object if any for a given track ID
+ //
+ if(GetHMPIDrings())
+ {
+ for(Int_t ien = 0 ; ien < GetNHMPIDrings(); ien++)
+ {
+ if( ien == trackID ) return GetHMPIDring(ien);
+ }//rings loop
+ }
+ return 0;
+}
+//------------------------------------------------------------
+Int_t AliAODEvent::GetNHMPIDrings()
+{
+ //
+ // If there is a list of HMPID rings in the given AOD event, return their number
+ //
+ if ( fHMPIDrings) return fHMPIDrings->GetEntriesFast();
+ else return -1;
+}
+//------------------------------------------------------------
+AliAODHMPIDrings *AliAODEvent::GetHMPIDring(Int_t nRings)
+{
+ //
+ // If there is a list of HMPID rings in the given AOD event, return corresponding ring
+ //
+ if(fHMPIDrings) {
+ if( (AliAODHMPIDrings*)fHMPIDrings->UncheckedAt(nRings) ) {
+ return (AliAODHMPIDrings*)fHMPIDrings->UncheckedAt(nRings);
+ }
+ else return 0x0;
+ }
+ else return 0x0;
+}
+//------------------------------------------------------------