+
+Int_t AliMixedEvent::EventIndexForCaloCluster(Int_t icluster) const
+{
+ // Return the event index for track #itrack
+ return TMath::BinarySearch(fNEvents, fNCaloClustersCumul, icluster);
+}
+
+Int_t AliMixedEvent::EventIndexForPHOSCell(Int_t icell) const
+{
+ // Return the event index for track #itrack
+ return TMath::BinarySearch(fNEvents, fNPHOSCellsCumul, icell);
+}
+
+Int_t AliMixedEvent::EventIndexForEMCALCell(Int_t icell) const
+{
+ // Return the event index for track #itrack
+ return TMath::BinarySearch(fNEvents, fNEMCALCellsCumul, icell);
+}
+
+Bool_t AliMixedEvent::ComputeVtx(const TObjArray *vertices, Double_t *pos,Double_t *sig,Int_t *nContributors) {
+//
+// Calculate the mean vertex psoitions from events in the buffer
+
+ Int_t nentries = vertices->GetEntriesFast();
+ Double_t sum[3]={0.,0.,0.};
+ Double_t sumsigma[6]={0.,0.,0.,0.,0.,0.};
+
+
+ for(Int_t ivtx = 0; ivtx < nentries; ivtx++){
+ AliVVertex *vtx=(AliVVertex*)vertices->UncheckedAt(ivtx);
+ Double_t covariance[6];
+ vtx->GetCovarianceMatrix(covariance);
+ Double_t vtxPos[3];
+ vtx->GetXYZ(vtxPos);
+ if(TMath::Abs(covariance[0])<1.e-13) {
+ return kFALSE;
+ }else{
+ sum[0]+=vtxPos[0]*(1./covariance[0]);
+ sumsigma[0]+=(1./covariance[0]);
+ }
+ if(TMath::Abs(covariance[2])<1.e-13) {
+ return kFALSE;
+ }else{
+ sum[1]+=vtxPos[1]*(1./covariance[2]);
+ sumsigma[2]+=(1./covariance[2]);
+ }
+ if(TMath::Abs(covariance[5])<1.e-13) {
+ return kFALSE;
+ }else{
+ sum[2]+=vtxPos[2]*(1./covariance[5]);
+ sumsigma[5]+=(1./covariance[5]);
+ }
+ if(TMath::Abs(covariance[1])<1.e-13) {
+ sumsigma[1]+=0.;
+ }else{
+ sumsigma[1]+=(1./covariance[1]);
+ }
+ if(TMath::Abs(covariance[3])<1.e-13) {
+ sumsigma[3]+=0.;
+ }else{
+ sumsigma[3]+=(1./covariance[3]);
+ }
+ if(TMath::Abs(covariance[4])<1.e-13) {
+ sumsigma[4]+=0.;
+ }else{
+ sumsigma[4]+=(1./covariance[4]);
+ }
+
+ nContributors[0]=nContributors[0]+vtx->GetNContributors();
+ }
+
+ for(Int_t i=0;i<3;i++){
+ if(TMath::Abs(sumsigma[i])<1.e-13) continue;
+ pos[i]=sum[i]/sumsigma[i];
+ }
+ for(Int_t i2=0;i2<3;i2++){
+ if(TMath::Abs(sumsigma[i2])<1.e-13) {sig[i2]=0.; continue;}
+ sig[i2]=1./sumsigma[i2];
+ }
+ return kTRUE;
+}
+
+
+Double_t AliMixedEvent::GetMagneticField() const
+{
+ // Return magnetic field of the first event in the list
+ if (fEventList.GetEntries() == 0) return -999.;
+
+ AliVEvent* evt = (AliVEvent*) (fEventList.At(0));
+ return evt->GetMagneticField();
+}