+
+
+void AliESD::AddObject(TObject* obj)
+{
+ // Add an object to the list of object.
+ // Please be aware that in order to increase performance you should
+ // refrain from using TObjArrays (if possible). Use TClonesArrays, instead.
+ fESDObjects->AddLast(obj);
+}
+
+
+void AliESD::GetStdContent()
+{
+ // set pointers for standard content
+
+ fESDRun = (AliESDRun*)fESDObjects->At(kESDRun);
+ fHeader = (AliESDHeader*)fESDObjects->At(kHeader);
+ fESDZDC = (AliESDZDC*)fESDObjects->At(kESDZDC);
+ fESDFMD = (AliESDFMD*)fESDObjects->At(kESDFMD);
+ fESDVZERO = (AliESDVZERO*)fESDObjects->At(kESDVZERO);
+ fESDTZERO = (AliESDTZERO*)fESDObjects->At(kESDTZERO);
+ fSPDVertex = (AliESDVertex*)fESDObjects->At(kSPDVertex);
+ fPrimaryVertex = (AliESDVertex*)fESDObjects->At(kPrimaryVertex);
+ fSPDMult = (AliMultiplicity*)fESDObjects->At(kSPDMult);
+ fPHOSTrigger = (AliESDCaloTrigger*)fESDObjects->At(kPHOSTrigger);
+ fEMCALTrigger = (AliESDCaloTrigger*)fESDObjects->At(kEMCALTrigger);
+ fTracks = (TClonesArray*)fESDObjects->At(kTracks);
+ fMuonTracks = (TClonesArray*)fESDObjects->At(kMuonTracks);
+ fPmdTracks = (TClonesArray*)fESDObjects->At(kPmdTracks);
+ fTrdTracks = (TClonesArray*)fESDObjects->At(kTrdTracks);
+ fV0s = (TClonesArray*)fESDObjects->At(kV0s);
+ fCascades = (TClonesArray*)fESDObjects->At(kCascades);
+ fKinks = (TClonesArray*)fESDObjects->At(kKinks);
+ fCaloClusters = (TClonesArray*)fESDObjects->At(kCaloClusters);
+ fErrorLogs = (TClonesArray*)fESDObjects->At(kErrorLogs);
+
+}
+
+void AliESD::SetStdNames(){
+ // Set the names of the standard contents
+ fSPDVertex->SetName("SPDVertex");
+ fPrimaryVertex->SetName("PrimaryVertex");
+ fPHOSTrigger->SetName("PHOSTrigger");
+ fEMCALTrigger->SetName("EMCALTrigger");
+ fTracks->SetName("Tracks");
+ fMuonTracks->SetName("MuonTracks");
+ fPmdTracks->SetName("PmdTracks");
+ fTrdTracks->SetName("TrdTracks");
+ fV0s->SetName("V0s");
+ fCascades->SetName("Cascades");
+ fKinks->SetName("Kinks");
+ fCaloClusters->SetName("CaloClusters");
+
+}
+
+void AliESD::CreateStdContent()
+{
+ // create the standard AOD content and set pointers
+
+ // create standard objects and add them to the TList of objects
+ AddObject(new AliESDRun());
+ AddObject(new AliESDHeader());
+ AddObject(new AliESDZDC());
+ AddObject(new AliESDFMD());
+ AddObject(new AliESDVZERO());
+ AddObject(new AliESDTZERO());
+ AddObject(new AliESDVertex());
+ AddObject(new AliESDVertex());
+ AddObject(new AliMultiplicity());
+ AddObject(new AliESDCaloTrigger());
+ AddObject(new AliESDCaloTrigger());
+ AddObject(new TClonesArray("AliESDtrack",0));
+ AddObject(new TClonesArray("AliESDMuonTrack",0));
+ AddObject(new TClonesArray("AliESDPmdTrack",0));
+ AddObject(new TClonesArray("AliESDTrdTrack",0));
+ AddObject(new TClonesArray("AliESDv0",0));
+ AddObject(new TClonesArray("AliESDcascade",0));
+ AddObject(new TClonesArray("AliESDkink",0));
+ AddObject(new TClonesArray("AliESDCaloCluster",0));
+ AddObject(new TClonesArray("AliRawDataErrorLog",0));
+
+ // check the order of the indices against enum...
+
+ // read back pointers
+ GetStdContent();
+ // set names
+ SetStdNames();
+
+}
+
+void AliESD::ReadFromTree(TTree *tree){
+
+
+ // is this really so smart that an ESDObject has a pointer to a list
+ // of another ESDObject...
+
+ fESDObjects = (TList*)((AliESD*)tree->GetTree()->GetUserInfo()->FindObject("AliESD"))->GetList();
+
+ // if list is empty
+ // we could still set the branch adresses based on
+ // tree->GetListOfBranches() CKB
+ // or create standard list
+
+ if(fESDObjects->GetEntries()<kESDListN){
+ printf("%s %d AliESD::ReadFromTree() TList contains less than the standard contents %d < %d \n",(char*)__FILE__,__LINE__,fESDObjects->GetEntries(),kESDListN);
+ }
+
+
+
+ // set the branch addresses
+ TIter next(fESDObjects);
+ TNamed *el;
+ while((el=(TNamed*)next())){
+ TString bname(el->GetName());
+
+ if(bname.CompareTo("AliESDfriend")==0)
+ {
+ // AliESDfriend does not have a name ...
+ tree->SetBranchStatus("ESDfriend.*",1);
+ tree->SetBranchAddress("ESDfriend.",fESDObjects->GetObjectRef(el));
+
+
+ }
+ else{
+ tree->SetBranchAddress(bname.Data(),fESDObjects->GetObjectRef(el));
+ }
+ }
+
+ GetStdContent();
+}
+
+
+