X-Git-Url: http://git.uio.no/git/?p=u%2Fmrichter%2FAliRoot.git;a=blobdiff_plain;f=STEER%2FAliAODEvent.cxx;h=65ed50e30a6f52106e0969c05c5e08aaa86b49f4;hp=e0c8564064d3e265bc3ff49b4577d5fd234ea2c1;hb=4453d90074bfdad23ca5dc949656684bd3a97b63;hpb=d8f5fda50eed84c8607d86dd65c0e8fb138ad38f diff --git a/STEER/AliAODEvent.cxx b/STEER/AliAODEvent.cxx index e0c8564064d..65ed50e30a6 100644 --- a/STEER/AliAODEvent.cxx +++ b/STEER/AliAODEvent.cxx @@ -30,6 +30,7 @@ #include "AliAODEvent.h" #include "AliAODHeader.h" #include "AliAODTrack.h" +#include "AliAODDimuon.h" ClassImp(AliAODEvent) @@ -38,13 +39,16 @@ ClassImp(AliAODEvent) "tracks", "vertices", "v0s", + "cascades", "tracklets", "jets", "emcalCells", "phosCells", "caloClusters", "fmdClusters", - "pmdClusters" + "pmdClusters", + "dimuons" + }; //______________________________________________________________________________ AliAODEvent::AliAODEvent() : @@ -56,13 +60,15 @@ AliAODEvent::AliAODEvent() : fTracks(0), fVertices(0), fV0s(0), + fCascades(0), fTracklets(0), fJets(0), fEmcalCells(0), fPhosCells(0), fCaloClusters(0), fFmdClusters(0), - fPmdClusters(0) + fPmdClusters(0), + fDimuons(0) { // default constructor } @@ -71,25 +77,28 @@ AliAODEvent::AliAODEvent() : AliAODEvent::AliAODEvent(const AliAODEvent& aod): AliVEvent(aod), fAODObjects(new TList()), - fAODFolder(new TFolder()), + fAODFolder(0), fConnected(kFALSE), fHeader(new AliAODHeader(*aod.fHeader)), fTracks(new TClonesArray(*aod.fTracks)), fVertices(new TClonesArray(*aod.fVertices)), fV0s(new TClonesArray(*aod.fV0s)), + fCascades(new TClonesArray(*aod.fCascades)), fTracklets(new AliAODTracklets(*aod.fTracklets)), fJets(new TClonesArray(*aod.fJets)), fEmcalCells(new AliAODCaloCells(*aod.fEmcalCells)), fPhosCells(new AliAODCaloCells(*aod.fPhosCells)), fCaloClusters(new TClonesArray(*aod.fCaloClusters)), fFmdClusters(new TClonesArray(*aod.fFmdClusters)), - fPmdClusters(new TClonesArray(*aod.fPmdClusters)) + fPmdClusters(new TClonesArray(*aod.fPmdClusters)), + fDimuons(new TClonesArray(*aod.fDimuons)) { // Copy constructor AddObject(fHeader); AddObject(fTracks); AddObject(fVertices); AddObject(fV0s); + AddObject(fCascades); AddObject(fTracklets); AddObject(fJets); AddObject(fEmcalCells); @@ -97,8 +106,10 @@ AliAODEvent::AliAODEvent(const AliAODEvent& aod): AddObject(fCaloClusters); AddObject(fFmdClusters); AddObject(fPmdClusters); + AddObject(fDimuons); fConnected = aod.fConnected; GetStdContent(); + CreateStdFolders(); } //______________________________________________________________________________ @@ -106,39 +117,94 @@ AliAODEvent & AliAODEvent::operator=(const AliAODEvent& aod) { // Assignment operator - if(&aod == this) return *this; - AliVEvent::operator=(aod); - - fAODObjects = new TList(); - fAODFolder = new TFolder(); - fConnected = aod.fConnected; - fHeader = new AliAODHeader(*aod.fHeader); - fTracks = new TClonesArray(*aod.fTracks); - fVertices = new TClonesArray(*aod.fVertices); - fV0s = new TClonesArray(*aod.fV0s); - fTracklets = new AliAODTracklets(*aod.fTracklets); - fJets = new TClonesArray(*aod.fJets); - fEmcalCells = new AliAODCaloCells(*aod.fEmcalCells); - fPhosCells = new AliAODCaloCells(*aod.fPhosCells); - fCaloClusters = new TClonesArray(*aod.fCaloClusters); - fFmdClusters = new TClonesArray(*aod.fFmdClusters); - fPmdClusters = new TClonesArray(*aod.fPmdClusters); - - fAODObjects = new TList(); - - AddObject(fHeader); - AddObject(fTracks); - AddObject(fVertices); - AddObject(fV0s); - AddObject(fTracklets); - AddObject(fJets); - AddObject(fEmcalCells); - AddObject(fPhosCells); - AddObject(fCaloClusters); - AddObject(fFmdClusters); - AddObject(fPmdClusters); - GetStdContent(); - return *this; + if(&aod == this) return *this; + AliVEvent::operator=(aod); + + // This assumes that the list is already created + // and that the virtual void Copy(Tobject&) function + // is correctly implemented in the derived class + // otherwise only TObject::Copy() will be used + + if((fAODObjects->GetSize()==0)&&(aod.fAODObjects->GetSize()>=kAODListN)){ + // We cover the case that we do not yet have the + // standard content but the source has it + CreateStdContent(); + } + + // Here we have the standard content without user additions, but the content is + // not matching the aod source. + + // Iterate the list of source objects + TIter next(aod.GetList()); + TObject *its = 0; + TString name; + while ((its = next())) { + name = its->GetName(); + // Check if we have this object type in out list + TObject *mine = fAODObjects->FindObject(name); + if(!mine) { + // We have to create the same type of object. + TClass* pClass=TClass::GetClass(its->ClassName()); + if (!pClass) { + AliWarning(Form("Can not find class description for entry %s (%s)\n", + its->ClassName(), name.Data())); + continue; + } + mine=(TObject*)pClass->New(); + if(!mine){ + // not in this: can be added to list + AliWarning(Form("%s:%d Could not find %s for copying \n", + (char*)__FILE__,__LINE__,name.Data())); + continue; + } + if(mine->InheritsFrom("TNamed")) { + ((TNamed*)mine)->SetName(name); + } else if(mine->InheritsFrom("TCollection")){ + if(mine->InheritsFrom("TClonesArray")) { + TClonesArray *itscl = dynamic_cast(its); + if (!itscl) { + AliWarning(Form("Class description for entry %s (%s) not TClonesArray\n", + its->ClassName(), name.Data())); + continue; + + } + dynamic_cast(mine)->SetClass(itscl->GetClass(), itscl->GetSize()); + } + dynamic_cast(mine)->SetName(name); + } + AliDebug(1, Form("adding object %s of type %s", mine->GetName(), mine->ClassName())); + AddObject(mine); + } + // Now we have an object of the same type and name, but different content. + if(!its->InheritsFrom("TCollection")){ + // simple objects (do they have a Copy method that calls operator= ?) + its->Copy(*mine); + } else if (its->InheritsFrom("TClonesArray")) { + // Create or expand the tclonesarray pointers + // so we can directly copy to the object + TClonesArray *its_tca = (TClonesArray*)its; + TClonesArray *mine_tca = (TClonesArray*)mine; + // this leaves the capacity of the TClonesArray the same + // except for a factor of 2 increase when size > capacity + // does not release any memory occupied by the tca + Int_t its_entries = its_tca->GetEntriesFast(); + mine_tca->ExpandCreate(its_entries); + for(int i=0; iAt(i); + TObject *its_tca_obj = its_tca->At(i); + // no need to delete first + // pointers within the class should be handled by Copy()... + // Can there be Empty slots? + its_tca_obj->Copy(*mine_tca_obj); + } + } else { + AliWarning(Form("%s:%d cannot copy TCollection \n", + (char*)__FILE__,__LINE__)); + } + } + fConnected = aod.fConnected; + return *this; } @@ -153,6 +219,7 @@ AliAODEvent::~AliAODEvent() } delete fAODFolder; + fAODFolder = 0; } //______________________________________________________________________________ @@ -174,7 +241,7 @@ void AliAODEvent::RemoveObject(TObject* obj) } //______________________________________________________________________________ -TObject *AliAODEvent::FindListObject(const char *objName) +TObject *AliAODEvent::FindListObject(const char *objName) const { // Return the pointer to the object with the given name. @@ -191,6 +258,7 @@ void AliAODEvent::CreateStdContent() AddObject(new TClonesArray("AliAODTrack", 0)); AddObject(new TClonesArray("AliAODVertex", 0)); AddObject(new TClonesArray("AliAODv0", 0)); + AddObject(new TClonesArray("AliAODcascade", 0)); AddObject(new AliAODTracklets()); AddObject(new TClonesArray("AliAODJet", 0)); AddObject(new AliAODCaloCells()); @@ -198,6 +266,7 @@ void AliAODEvent::CreateStdContent() AddObject(new TClonesArray("AliAODCaloCluster", 0)); AddObject(new TClonesArray("AliAODFmdCluster", 0)); AddObject(new TClonesArray("AliAODPmdCluster", 0)); + AddObject(new TClonesArray("AliAODDimuon", 0)); // set names SetStdNames(); @@ -246,6 +315,7 @@ void AliAODEvent::SetStdNames() void AliAODEvent::CreateStdFolders() { // Create the standard folder structure + if(fAODFolder)delete fAODFolder; fAODFolder = gROOT->GetRootFolder()->AddFolder("AOD", "AOD"); if(fAODObjects->GetEntries()==kAODListN){ for(int i = 0;i < fAODObjects->GetEntries();i++){ @@ -271,6 +341,7 @@ void AliAODEvent::GetStdContent() fTracks = (TClonesArray*)fAODObjects->FindObject("tracks"); fVertices = (TClonesArray*)fAODObjects->FindObject("vertices"); fV0s = (TClonesArray*)fAODObjects->FindObject("v0s"); + fCascades = (TClonesArray*)fAODObjects->FindObject("cascades"); fTracklets = (AliAODTracklets*)fAODObjects->FindObject("tracklets"); fJets = (TClonesArray*)fAODObjects->FindObject("jets"); fEmcalCells = (AliAODCaloCells*)fAODObjects->FindObject("emcalCells"); @@ -278,18 +349,23 @@ void AliAODEvent::GetStdContent() fCaloClusters = (TClonesArray*)fAODObjects->FindObject("caloClusters"); fFmdClusters = (TClonesArray*)fAODObjects->FindObject("fmdClusters"); fPmdClusters = (TClonesArray*)fAODObjects->FindObject("pmdClusters"); + fDimuons = (TClonesArray*)fAODObjects->FindObject("dimuons"); } //______________________________________________________________________________ void AliAODEvent::ResetStd(Int_t trkArrSize, Int_t vtxArrSize, - Int_t v0ArrSize, + Int_t v0ArrSize, + Int_t cascadeArrSize, Int_t jetSize, Int_t caloClusSize, Int_t fmdClusSize, - Int_t pmdClusSize) + Int_t pmdClusSize, + Int_t dimuonArrSize + ) { // deletes content of standard arrays and resets size + fTracks->Delete(); if (trkArrSize > fTracks->GetSize()) fTracks->Expand(trkArrSize); @@ -297,13 +373,17 @@ void AliAODEvent::ResetStd(Int_t trkArrSize, fVertices->Delete(); if (vtxArrSize > fVertices->GetSize()) fVertices->Expand(vtxArrSize); - + fV0s->Delete(); if (v0ArrSize > fV0s->GetSize()) fV0s->Expand(v0ArrSize); - + + fCascades->Delete(); + if (cascadeArrSize > fCascades->GetSize()) + fCascades->Expand(cascadeArrSize); + fJets->Delete(); - if (jetSize > fJets->GetSize()) + if (jetSize > fJets->GetSize()) fJets->Expand(jetSize); fCaloClusters->Delete(); @@ -317,6 +397,10 @@ void AliAODEvent::ResetStd(Int_t trkArrSize, fPmdClusters->Delete(); if (pmdClusSize > fPmdClusters->GetSize()) fPmdClusters->Expand(pmdClusSize); + + fDimuons->Delete(); + if (dimuonArrSize > fDimuons->GetSize()) + fDimuons->Expand(dimuonArrSize); // Reset the tracklets fTracklets->DeleteContainer(); @@ -332,6 +416,7 @@ void AliAODEvent::ClearStd() fTracks ->Delete(); fVertices ->Delete(); fV0s ->Delete(); + fCascades ->Delete(); fTracklets ->DeleteContainer(); fJets ->Delete(); fEmcalCells ->DeleteContainer(); @@ -339,6 +424,7 @@ void AliAODEvent::ClearStd() fCaloClusters ->Delete(); fFmdClusters ->Clear(); fPmdClusters ->Clear(); + fDimuons ->Clear(); } //_________________________________________________________________ @@ -350,9 +436,9 @@ Int_t AliAODEvent::GetPHOSClusters(TRefArray *clusters) const AliAODCaloCluster *cl = 0; Bool_t first = kTRUE; - for (Int_t i = 0; i < GetNCaloClusters() ; i++) { + for (Int_t i = 0; i < GetNumberOfCaloClusters() ; i++) { if ( (cl = GetCaloCluster(i)) ) { - if (cl->IsPHOSCluster()){ + if (cl->IsPHOS()){ if(first) { new (clusters) TRefArray(TProcessID::GetProcessWithUID(cl)); first=kFALSE; @@ -371,12 +457,11 @@ Int_t AliAODEvent::GetEMCALClusters(TRefArray *clusters) const // fills the provided TRefArray with all found emcal clusters clusters->Clear(); - cout<<"AOD event 1: nclus "<IsEMCALCluster()){ + if (cl->IsEMCAL()){ if(first) { new (clusters) TRefArray(TProcessID::GetProcessWithUID(cl)); first=kFALSE; @@ -399,7 +484,8 @@ Int_t AliAODEvent::GetMuonTracks(TRefArray *muonTracks) const AliAODTrack *track = 0; for (Int_t iTrack = 0; iTrack < GetNTracks(); iTrack++) { - if ((track = GetTrack(iTrack))->IsMuonTrack()) { + track = GetTrack(iTrack); + if (track->IsMuonTrack()) { muonTracks->Add(track); } } @@ -408,106 +494,118 @@ Int_t AliAODEvent::GetMuonTracks(TRefArray *muonTracks) const } +//______________________________________________________________________________ +Int_t AliAODEvent::GetNumberOfMuonTracks() const +{ + // get number of muon tracks + Int_t nMuonTracks=0; + AliAODTrack *track = 0; + for (Int_t iTrack = 0; iTrack < GetNTracks(); iTrack++) { + if ((track = GetTrack(iTrack))->IsMuonTrack()) { + nMuonTracks++; + } + } + + return nMuonTracks; +} + void AliAODEvent::ReadFromTree(TTree *tree, Option_t* opt /*= ""*/) { - // Connects aod event to tree + // Connects aod event to tree if(!tree){ Printf("%s %d AliAODEvent::ReadFromTree() Zero Pointer to Tree \n",(char*)__FILE__,__LINE__); return; } - // load the TTree + // load the TTree if(!tree->GetTree())tree->LoadTree(0); - - // Try to find AliAODEvent + + // Try to find AliAODEvent AliAODEvent *aodEvent = 0; aodEvent = (AliAODEvent*)tree->GetTree()->GetUserInfo()->FindObject("AliAODEvent"); if(aodEvent){ - // Check if already connected to tree + // Check if already connected to tree TList* connectedList = (TList*) (tree->GetUserInfo()->FindObject("AODObjectsConnectedToTree")); if (connectedList && (strcmp(opt, "reconnect"))) { - // If connected use the connected list of objects - printf("Delete and reconnect \n"); - + // If connected use the connected list of objects fAODObjects->Delete(); fAODObjects = connectedList; GetStdContent(); fConnected = kTRUE; return; } - // Connect to tree - // prevent a memory leak when reading back the TList - if (!(strcmp(opt, "reconnect"))) fAODObjects->Delete(); - delete fAODObjects; - fAODObjects = 0; - // create a new TList from the UserInfo TList... - // copy constructor does not work... + // Connect to tree + // prevent a memory leak when reading back the TList +// if (!(strcmp(opt, "reconnect"))) fAODObjects->Delete(); + + // create a new TList from the UserInfo TList... + // copy constructor does not work... fAODObjects = (TList*)(aodEvent->GetList()->Clone()); - fAODObjects->SetOwner(kFALSE); + fAODObjects->SetOwner(kTRUE); if(fAODObjects->GetEntries()GetEntries(),kAODListN); + (char*)__FILE__,__LINE__,fAODObjects->GetEntries(),kAODListN); } - // - // Let's find out whether we have friends + // + // Let's find out whether we have friends TList* friendL = tree->GetTree()->GetListOfFriends(); if (friendL) { - TIter next(friendL); - TFriendElement* fe; - while ((fe = (TFriendElement*)next())){ - aodEvent = (AliAODEvent*)(fe->GetTree()->GetUserInfo()->FindObject("AliAODEvent")); - if (!aodEvent) { - printf("No UserInfo on tree \n"); - } else { - - TList* objL = (TList*)(aodEvent->GetList()->Clone()); - printf("Get list of object from tree %d !!\n", objL->GetEntries()); - TIter nextobject(objL); - TObject* obj = 0; - while((obj = nextobject())) - { - printf("Adding object from friend %s !\n", obj->GetName()); - fAODObjects->Add(obj); - } // object "branch" loop - } // has userinfo - } // friend loop + TIter next(friendL); + TFriendElement* fe; + while ((fe = (TFriendElement*)next())){ + aodEvent = (AliAODEvent*)(fe->GetTree()->GetUserInfo()->FindObject("AliAODEvent")); + if (!aodEvent) { + printf("No UserInfo on tree \n"); + } else { + + TList* objL = (TList*)(aodEvent->GetList()->Clone()); + printf("Get list of object from tree %d !!\n", objL->GetEntries()); + TIter nextobject(objL); + TObject* obj = 0; + while((obj = nextobject())) + { + printf("Adding object from friend %s !\n", obj->GetName()); + fAODObjects->Add(obj); + } // object "branch" loop + } // has userinfo + } // friend loop } // has friends - - -// set the branch addresses + + + // set the branch addresses TIter next(fAODObjects); TNamed *el; while((el=(TNamed*)next())){ TString bname(el->GetName()); - // check if branch exists under this Name + // check if branch exists under this Name TBranch *br = tree->GetTree()->GetBranch(bname.Data()); if(br){ - tree->SetBranchAddress(bname.Data(),fAODObjects->GetObjectRef(el)); + tree->SetBranchAddress(bname.Data(),fAODObjects->GetObjectRef(el)); } else { - br = tree->GetBranch(Form("%s.",bname.Data())); - if(br){ - tree->SetBranchAddress(Form("%s.",bname.Data()),fAODObjects->GetObjectRef(el)); - } - else{ - printf("%s %d AliAODEvent::ReadFromTree() No Branch found with Name %s. \n", - (char*)__FILE__,__LINE__,bname.Data()); - } + br = tree->GetBranch(Form("%s.",bname.Data())); + if(br){ + tree->SetBranchAddress(Form("%s.",bname.Data()),fAODObjects->GetObjectRef(el)); + } + else{ + printf("%s %d AliAODEvent::ReadFromTree() No Branch found with Name %s. \n", + (char*)__FILE__,__LINE__,bname.Data()); + } } } GetStdContent(); - // when reading back we are not owner of the list - // must not delete it - fAODObjects->SetOwner(kFALSE); + // when reading back we are not owner of the list + // must not delete it + fAODObjects->SetOwner(kTRUE); fAODObjects->SetName("AODObjectsConnectedToTree"); - // we are not owner of the list objects - // must not delete it + // we are not owner of the list objects + // must not delete it tree->GetUserInfo()->Add(fAODObjects); fConnected = kTRUE; }// no aodEvent else { - // we can't get the list from the user data, create standard content - // and set it by hand + // we can't get the list from the user data, create standard content + // and set it by hand CreateStdContent(); TIter next(fAODObjects); TNamed *el; @@ -516,16 +614,135 @@ void AliAODEvent::ReadFromTree(TTree *tree, Option_t* opt /*= ""*/) tree->SetBranchAddress(bname.Data(),fAODObjects->GetObjectRef(el)); } GetStdContent(); - // when reading back we are not owner of the list - // must not delete it - fAODObjects->SetOwner(kFALSE); + // when reading back we are not owner of the list + // must not delete it + fAODObjects->SetOwner(kTRUE); + } +} + //______________________________________________________________________________ +Int_t AliAODEvent::GetNumberOfPileupVerticesSPD() const{ + // count number of SPD pileup vertices + Int_t nVertices=GetNumberOfVertices(); + Int_t nPileupVertices=0; + for(Int_t iVert=0; iVertGetType()==AliAODVertex::kPileupSPD) nPileupVertices++; } + return nPileupVertices; +} +//______________________________________________________________________________ +Int_t AliAODEvent::GetNumberOfPileupVerticesTracks() const{ + // count number of track pileup vertices + Int_t nVertices=GetNumberOfVertices(); + Int_t nPileupVertices=0; + for(Int_t iVert=0; iVertGetType()==AliAODVertex::kPileupTracks) nPileupVertices++; + } + return nPileupVertices; +} +//______________________________________________________________________________ +AliAODVertex* AliAODEvent::GetPrimaryVertexSPD() const{ + // + Int_t nVertices=GetNumberOfVertices(); + for(Int_t iVert=0; iVertGetType()==AliAODVertex::kMainSPD) return v; + } + return 0; +} +//______________________________________________________________________________ +AliAODVertex* AliAODEvent::GetPileupVertexSPD(Int_t iV) const{ + // + Int_t nVertices=GetNumberOfVertices(); + Int_t counter=0; + for(Int_t iVert=0; iVertGetType()==AliAODVertex::kPileupSPD){ + if(counter==iV) return v; + ++counter; + } + } + return 0; +} +//______________________________________________________________________________ +AliAODVertex* AliAODEvent::GetPileupVertexTracks(Int_t iV) const{ + // + Int_t nVertices=GetNumberOfVertices(); + Int_t counter=0; + for(Int_t iVert=0; iVertGetType()==AliAODVertex::kPileupTracks){ + if(counter==iV) return v; + ++counter; + } + } + return 0; +} +//______________________________________________________________________________ +Bool_t AliAODEvent::IsPileupFromSPD(Int_t minContributors, + Double_t minZdist, + Double_t nSigmaZdist, + Double_t nSigmaDiamXY, + Double_t nSigmaDiamZ) const{ + // + // This function checks if there was a pile up + // reconstructed with SPD + // + AliAODVertex *mainV=GetPrimaryVertexSPD(); + if(!mainV) return kFALSE; + Int_t nc1=mainV->GetNContributors(); + if(nc1<1) return kFALSE; + Int_t nPileVert=GetNumberOfPileupVerticesSPD(); + if(nPileVert==0) return kFALSE; + Int_t nVertices=GetNumberOfVertices(); + + for(Int_t iVert=0; iVertGetType()!=AliAODVertex::kPileupSPD) continue; + Int_t nc2=pv->GetNContributors(); + if(nc2>=minContributors){ + Double_t z1=mainV->GetZ(); + Double_t z2=pv->GetZ(); + Double_t distZ=TMath::Abs(z2-z1); + Double_t distZdiam=TMath::Abs(z2-GetDiamondZ()); + Double_t cutZdiam=nSigmaDiamZ*TMath::Sqrt(GetSigma2DiamondZ()); + if(GetSigma2DiamondZ()<0.0001)cutZdiam=99999.; //protection for missing z diamond information + if(distZ>minZdist && distZdiamGetX(); + Double_t y2=pv->GetY(); + Double_t distXdiam=TMath::Abs(x2-GetDiamondX()); + Double_t distYdiam=TMath::Abs(y2-GetDiamondY()); + Double_t cov1[6],cov2[6]; + mainV->GetCovarianceMatrix(cov1); + pv->GetCovarianceMatrix(cov2); + Double_t errxDist=TMath::Sqrt(cov2[0]+GetSigma2DiamondX()); + Double_t erryDist=TMath::Sqrt(cov2[2]+GetSigma2DiamondY()); + Double_t errzDist=TMath::Sqrt(cov1[5]+cov2[5]); + Double_t cutXdiam=nSigmaDiamXY*errxDist; + if(GetSigma2DiamondX()<0.0001)cutXdiam=99999.; //protection for missing diamond information + Double_t cutYdiam=nSigmaDiamXY*erryDist; + if(GetSigma2DiamondY()<0.0001)cutYdiam=99999.; //protection for missing diamond information + if( (distXdiamnSigmaZdist*errzDist) ){ + return kTRUE; + } + } + } + } + return kFALSE; } //______________________________________________________________________________ void AliAODEvent::Print(Option_t *) const { - // Something meaningful should be implemented here. + // Print the names of the all branches + TIter next(fAODObjects); + TNamed *el; + Printf(">>>>> AOD Content <<<<<"); + while((el=(TNamed*)next())){ + Printf(">> %s ",el->GetName()); + } + Printf(">>>>> <<<<<"); return; } @@ -541,3 +758,11 @@ void AliAODEvent::AssignIDtoCollection(TCollection* col) while ((obj = next())) TProcessID::AssignID(obj); } + +Bool_t AliAODEvent::IsPileupFromSPDInMultBins() const { + Int_t nTracklets=GetTracklets()->GetNumberOfTracklets(); + if(nTracklets<20) return IsPileupFromSPD(3,0.8); + else if(nTracklets<50) return IsPileupFromSPD(4,0.8); + else return IsPileupFromSPD(5,0.8); +} +