fESDOld(0),
fESDFriendOld(0),
fConnected(kFALSE),
- fUseOwnList(kFALSE),
- fEMCALClusters(0),
- fFirstEMCALCluster(-1),
- fPHOSClusters(0),
- fFirstPHOSCluster(-1)
+ fUseOwnList(kFALSE)
{
}
//______________________________________________________________________________
fESDOld(esd.fESDOld ? new AliESD(*esd.fESDOld) : 0),
fESDFriendOld(esd.fESDFriendOld ? new AliESDfriend(*esd.fESDFriendOld) : 0),
fConnected(esd.fConnected),
- fUseOwnList(esd.fUseOwnList),
- fEMCALClusters(esd.fEMCALClusters),
- fFirstEMCALCluster(esd.fFirstEMCALCluster),
- fPHOSClusters(esd.fPHOSClusters),
- fFirstPHOSCluster(esd.fFirstPHOSCluster)
+ fUseOwnList(esd.fUseOwnList)
{
// CKB init in the constructor list and only add here ...
fConnected = source.fConnected;
fUseOwnList = source.fUseOwnList;
- fEMCALClusters = source.fEMCALClusters;
- fFirstEMCALCluster = source.fFirstEMCALCluster;
- fPHOSClusters = source.fPHOSClusters;
- fFirstPHOSCluster = source.fFirstPHOSCluster;
-
return *this;
// don't reset fconnected fConnected and the list
- fEMCALClusters=0;
- fFirstEMCALCluster=-1;
- fPHOSClusters=0;
- fFirstPHOSCluster=-1;
}
GetRunNumber(),
GetTriggerMask(),
GetMagneticField() );
- printf("Vertex: (%.4f +- %.4f, %.4f +- %.4f, %.4f +- %.4f) cm\n",
+ if (fPrimaryVertex)
+ printf("Vertex: (%.4f +- %.4f, %.4f +- %.4f, %.4f +- %.4f) cm\n",
fPrimaryVertex->GetXv(), fPrimaryVertex->GetXRes(),
fPrimaryVertex->GetYv(), fPrimaryVertex->GetYRes(),
fPrimaryVertex->GetZv(), fPrimaryVertex->GetZRes());
- printf("Mean vertex in RUN: X=%.4f Y=%.4f cm\n",
- GetDiamondX(),GetDiamondY());
+ printf("Mean vertex in RUN: X=%.4f Y=%.4f Z=%.4f cm\n",
+ GetDiamondX(),GetDiamondY(),GetDiamondZ());
+ if(fSPDMult)
printf("SPD Multiplicity. Number of tracklets %d \n",
fSPDMult->GetNumberOfTracklets());
printf("Number of pileup primary vertices reconstructed with SPD %d\n",
- GetNumberOfPileupVerticesSPD());
+ GetNumberOfPileupVerticesSPD());
printf("Number of pileup primary vertices reconstructed using the tracks %d\n",
- GetNumberOfPileupVerticesTracks());
+ GetNumberOfPileupVerticesTracks());
printf("Number of tracks: \n");
printf(" charged %d\n", GetNumberOfTracks());
printf(" muon %d\n", GetNumberOfMuonTracks());
if(fEMCALCells)printf(" EMCALCells %d\n", fEMCALCells->GetNumberOfCells());
else printf(" EMCALCells not in the Event\n");
printf(" CaloClusters %d\n", GetNumberOfCaloClusters());
- printf(" phos %d\n", GetNumberOfPHOSClusters());
- printf(" emcal %d\n", GetNumberOfEMCALClusters());
printf(" FMD %s\n", (fESDFMD ? "yes" : "no"));
printf(" VZERO %s\n", (fESDVZERO ? "yes" : "no"));
TObject* pHLTDecision=GetHLTTriggerDecision();
GetStdContent();
}
-TObject* AliESDEvent::FindListObject(const char *name){
+TObject* AliESDEvent::FindListObject(const char *name) const {
//
// Find object with name "name" in the list of branches
//
if(!branchname.EndsWith("."))branchname += ".";
}
if (!tree->FindBranch(branchname)) {
- tree->Bronch(branchname, obj->ClassName(), fESDObjects->GetObjectRef(obj),
- kBufsize, kSplitlevel - 1);
+ // For the custom streamer to be called splitlevel
+ // has to be negative, only needed for HLT
+ Int_t splitLevel = (TString(obj->ClassName()) == "AliHLTGlobalTriggerDecision") ? -1 : kSplitlevel - 1;
+ tree->Bronch(branchname, obj->ClassName(), fESDObjects->GetObjectRef(obj),kBufsize, splitLevel);
}
}
}
// Connect to tree
// prevent a memory leak when reading back the TList
- if (!(strcmp(opt, "reconnect"))) fESDObjects->Delete();
+ // if (!(strcmp(opt, "reconnect"))) fESDObjects->Delete();
if(!fUseOwnList){
// create a new TList from the UserInfo TList...
return kTRUE;
}
-Bool_t AliESDEvent::IsPileupFromSPD(Int_t ncont, Double_t nSigmaDeltaZ, Double_t nSigmaXY, Int_t option) const {
+Bool_t AliESDEvent::IsPileupFromSPD(Int_t ncont, Double_t distz, Double_t nSigmaDeltaZ, Double_t nSigmaXY, Int_t option) const {
//
// This function checks if there was a pile up
// reconstructed with SPD
errxDist=TMath::Sqrt(ex2*ex2+sigmax*sigmax);
erryDist=TMath::Sqrt(ey2*ey2+sigmay*sigmay);
- if(nc2>=ncont && distanceZ>nSigmaDeltaZ*errzDist && distanceX<nSigmaXY*errxDist && distanceY<nSigmaXY*erryDist)
+ if(nc2>=ncont && distanceZ>nSigmaDeltaZ*errzDist && distanceX<nSigmaXY*errxDist && distanceY<nSigmaXY*erryDist && distanceZ>distz)
return kTRUE;
}
}
-
-
+//______________________________________________________________________________
+void AliESDEvent::EstimateMultiplicity(Int_t &tracklets, Int_t &trITSTPC, Int_t &trITSSApure, Double_t eta, Bool_t useDCAFlag,Bool_t useV0Flag) const
+{
+ //
+ // calculates 3 estimators for the multiplicity in the -eta:eta range
+ // tracklets : using SPD tracklets only
+ // trITSTPC : using TPC/ITS + complementary ITS SA tracks + tracklets from clusters not used by tracks
+ // trITSSApure : using ITS standalone tracks + tracklets from clusters not used by tracks
+ // if useDCAFlag is true: account for the ESDtrack flag marking the tracks with large DCA
+ // if useV0Flag is true: account for the ESDtrack flag marking conversion and K0's V0s
+ tracklets = trITSSApure = trITSTPC = 0;
+ int ntr = fSPDMult ? fSPDMult->GetNumberOfTracklets() : 0;
+ //
+ // count tracklets
+ for (int itr=ntr;itr--;) {
+ if (TMath::Abs(fSPDMult->GetEta(itr))>eta) continue;
+ tracklets++;
+ if (fSPDMult->FreeClustersTracklet(itr,0)) trITSTPC++; // not used in ITS/TPC or ITS_SA track
+ if (fSPDMult->FreeClustersTracklet(itr,1)) trITSSApure++; // not used in ITS_SA_Pure track
+ }
+ //
+ // count real tracks
+ ntr = GetNumberOfTracks();
+ for (int itr=ntr;itr--;) {
+ AliESDtrack *t = GetTrack(itr);
+ if (TMath::Abs(t->Eta())>eta) continue;
+ if (!t->IsOn(AliESDtrack::kITSin)) continue;
+ if (useDCAFlag && t->IsOn(AliESDtrack::kMultSec)) continue;
+ if (useV0Flag && t->IsOn(AliESDtrack::kMultInV0)) continue;
+ if (t->IsOn(AliESDtrack::kITSpureSA)) trITSSApure++;
+ else trITSTPC++;
+ }
+ //
+}