X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=STEER%2FCreateAODfromESD.C;h=4f1e7521761cab8d4cfaf577e952387cce630bcf;hb=4caead95b5f531ae9ac0351a31473cd5f367a335;hp=2e2778c26552550cb00e61269bfaafa35d01779a;hpb=31fd97b2cd216f3b5e5d0382f9a7f12fced3c09e;p=u%2Fmrichter%2FAliRoot.git diff --git a/STEER/CreateAODfromESD.C b/STEER/CreateAODfromESD.C index 2e2778c2655..4f1e7521761 100644 --- a/STEER/CreateAODfromESD.C +++ b/STEER/CreateAODfromESD.C @@ -13,6 +13,7 @@ #include "AliESD.h" #include "AliESDtrack.h" +#include "AliESDMuonTrack.h" #include "AliESDVertex.h" #include "AliESDv0.h" #include "AliESDcascade.h" @@ -43,6 +44,14 @@ void CreateAODfromESD(const char *inFileName = "AliESDs.root", Int_t nEvents = b->GetEntries(); + // set arrays and pointers + Float_t posF[3]; + Double_t pos[3]; + Double_t p[3]; + Double_t covVtx[6]; + Double_t covTr[21]; + Double_t pid[10]; + // loop over events and fill them for (Int_t iEvent = 0; iEvent < nEvents; ++iEvent) { b->GetEntry(iEvent); @@ -57,11 +66,18 @@ void CreateAODfromESD(const char *inFileName = "AliESDs.root", aod->AddHeader(new AliAODHeader(esd->GetRunNumber(), esd->GetBunchCrossNumber(), esd->GetOrbitNumber(), + esd->GetPeriodNumber(), nTracks, nPosTracks, nTracks-nPosTracks, esd->GetMagneticField(), + -999., // fill muon magnetic field -999., // centrality; to be filled, still + esd->GetZDCN1Energy(), + esd->GetZDCP1Energy(), + esd->GetZDCN2Energy(), + esd->GetZDCP2Energy(), + esd->GetZDCEMEnergy(), esd->GetTriggerMask(), esd->GetTriggerCluster(), esd->GetEventType())); @@ -72,6 +88,7 @@ void CreateAODfromESD(const char *inFileName = "AliESDs.root", Int_t nVertices = nV0s + nCascades + nKinks; aod->ResetStd(nTracks, nVertices); + AliAODTrack *aodTrack; // Array to take into account the tracks already added to the AOD @@ -105,13 +122,11 @@ void CreateAODfromESD(const char *inFileName = "AliESDs.root", // after the loops on the composite objects (V0, cascades, kinks) const AliESDVertex *vtx = esd->GetPrimaryVertex(); - Double_t pos[3]; vtx->GetXYZ(pos); // position - Double_t covVtx[6]; // We have to give changing names to the variables (like cov?, x?, and p?) because CINT doesn't recognize blocks correctly. vtx->GetCovMatrix(covVtx); //covariance matrix AliAODVertex * primary = new(vertices[jVertices++]) - AliAODVertex(pos, covVtx, vtx->GetChi2(), NULL, AliAODVertex::kPrimary); + AliAODVertex(pos, covVtx, vtx->GetChi2toNDF(), NULL, AliAODVertex::kPrimary); // Create vertices starting from the most complex objects @@ -119,15 +134,13 @@ void CreateAODfromESD(const char *inFileName = "AliESDs.root", for (Int_t nCascade = 0; nCascade < nCascades; ++nCascade) { AliESDcascade *cascade = esd->GetCascade(nCascade); - Double_t posXi[3]; - cascade->GetXYZ(posXi[0], posXi[1], posXi[2]); - Double_t covXi[6]; - cascade->GetPosCovXi(covXi); + cascade->GetXYZ(pos[0], pos[1], pos[2]); + cascade->GetPosCovXi(covVtx); // Add the cascade vertex - AliAODVertex * vcascade = new(vertices[jVertices++]) AliAODVertex(posXi, - covXi, - cascade->GetChi2Xi(), + AliAODVertex * vcascade = new(vertices[jVertices++]) AliAODVertex(pos, + covVtx, + cascade->GetChi2Xi(), // = chi2/NDF since NDF = 2*2-3 primary, AliAODVertex::kCascade); @@ -164,14 +177,12 @@ void CreateAODfromESD(const char *inFileName = "AliESDs.root", usedV0[indV0] = kTRUE; - Double_t posV0[3]; - v0->GetXYZ(posV0[0], posV0[1], posV0[2]); - Double_t covV0_1[6]; - v0->GetPosCov(covV0_1); + v0->GetXYZ(pos[0], pos[1], pos[2]); + v0->GetPosCov(covVtx); - vV0FromCascade = new(vertices[jVertices++]) AliAODVertex(posV0, - covV0_1, - v0->GetChi2V0(), + vV0FromCascade = new(vertices[jVertices++]) AliAODVertex(pos, + covVtx, + v0->GetChi2V0(), // = chi2/NDF since NDF = 2*2-3 vcascade, AliAODVertex::kV0); } else { @@ -181,14 +192,12 @@ void CreateAODfromESD(const char *inFileName = "AliESDs.root", << " The V0 " << indV0 << " doesn't exist in the array of V0s or was used!" << endl; - Double_t posV0_2[3]; - cascade->GetXYZ(posV0_2[0], posV0_2[1], posV0_2[2]); - Double_t covV0_2[6]; - cascade->GetPosCov(covV0_2); + cascade->GetXYZ(pos[0], pos[1], pos[2]); + cascade->GetPosCov(covVtx); - vV0FromCascade = new(vertices[jVertices++]) AliAODVertex(posV0_2, - covV0_2, - v0->GetChi2V0(), + vV0FromCascade = new(vertices[jVertices++]) AliAODVertex(pos, + covVtx, + v0->GetChi2V0(), // = chi2/NDF since NDF = 2*2-3 vcascade, AliAODVertex::kV0); vcascade->AddDaughter(vV0FromCascade); @@ -201,33 +210,28 @@ void CreateAODfromESD(const char *inFileName = "AliESDs.root", usedTrack[posFromV0] = kTRUE; AliESDtrack *esdTrack = esd->GetTrack(posFromV0); + esdTrack->GetPxPyPz(p); + esdTrack->GetXYZ(pos); + esdTrack->GetCovarianceXYZPxPyPz(covTr); + esdTrack->GetESDpid(pid); - Double_t p1[3]; - esdTrack->GetPxPyPz(p1); - - Double_t x1[3]; - esdTrack->GetXYZ(x1); - - Double_t covV0PosTr[21]; - esdTrack->GetCovarianceXYZPxPyPz(covV0PosTr); - - Double_t pid1[10]; - esdTrack->GetESDpid(pid1); - - vV0FromCascade->AddDaughter( + vV0FromCascade->AddDaughter(aodTrack = new(tracks[jTracks++]) AliAODTrack(esdTrack->GetID(), esdTrack->GetLabel(), - p1, + p, kTRUE, - x1, + pos, kFALSE, - covV0PosTr, + covTr, (Short_t)esdTrack->GetSign(), esdTrack->GetITSClusterMap(), - pid1, + pid, vV0FromCascade, + kTRUE, // check if this is right + kFALSE, // check if this is right AliAODTrack::kSecondary) ); + aodTrack->ConvertAliPIDtoAODPID(); } else { cerr << "Error: event " << iEvent << " cascade " << nCascade @@ -241,33 +245,28 @@ void CreateAODfromESD(const char *inFileName = "AliESDs.root", usedTrack[negFromV0] = kTRUE; AliESDtrack *esdTrack = esd->GetTrack(negFromV0); + esdTrack->GetPxPyPz(p); + esdTrack->GetXYZ(pos); + esdTrack->GetCovarianceXYZPxPyPz(covTr); + esdTrack->GetESDpid(pid); - Double_t p2[3]; - esdTrack->GetPxPyPz(p2); - - Double_t x2[3]; - esdTrack->GetXYZ(x2); - - Double_t covV0NegTr[21]; - esdTrack->GetCovarianceXYZPxPyPz(covV0NegTr); - - Double_t pid2[10]; - esdTrack->GetESDpid(pid2); - - vV0FromCascade->AddDaughter( + vV0FromCascade->AddDaughter(aodTrack = new(tracks[jTracks++]) AliAODTrack(esdTrack->GetID(), esdTrack->GetLabel(), - p2, + p, kTRUE, - x2, + pos, kFALSE, - covV0NegTr, + covTr, (Short_t)esdTrack->GetSign(), esdTrack->GetITSClusterMap(), - pid2, + pid, vV0FromCascade, + kTRUE, // check if this is right + kFALSE, // check if this is right AliAODTrack::kSecondary) ); + aodTrack->ConvertAliPIDtoAODPID(); } else { cerr << "Error: event " << iEvent << " cascade " << nCascade @@ -283,34 +282,29 @@ void CreateAODfromESD(const char *inFileName = "AliESDs.root", usedTrack[bachelor] = kTRUE; AliESDtrack *esdTrack = esd->GetTrack(bachelor); - - Double_t p3[3]; - esdTrack->GetPxPyPz(p3); - - Double_t x3[3]; - esdTrack->GetXYZ(x3); - - Double_t covXiTr[21]; - esdTrack->GetCovarianceXYZPxPyPz(covXiTr); - - Double_t pid3[10]; - esdTrack->GetESDpid(pid3); + esdTrack->GetPxPyPz(p); + esdTrack->GetXYZ(pos); + esdTrack->GetCovarianceXYZPxPyPz(covTr); + esdTrack->GetESDpid(pid); - vcascade->AddDaughter( + vcascade->AddDaughter(aodTrack = new(tracks[jTracks++]) AliAODTrack(esdTrack->GetID(), esdTrack->GetLabel(), - p3, + p, kTRUE, - x3, + pos, kFALSE, - covXiTr, + covTr, (Short_t)esdTrack->GetSign(), esdTrack->GetITSClusterMap(), - pid3, + pid, vcascade, + kTRUE, // check if this is right + kFALSE, // check if this is right AliAODTrack::kSecondary) ); - } + aodTrack->ConvertAliPIDtoAODPID(); + } else { cerr << "Error: event " << iEvent << " cascade " << nCascade << " track " << bachelor << " has already been used!" << endl; @@ -328,15 +322,13 @@ void CreateAODfromESD(const char *inFileName = "AliESDs.root", AliESDv0 *v0 = esd->GetV0(nV0); - Double_t posV0_3[3]; - v0->GetXYZ(posV0_3[0], posV0_3[1], posV0_3[2]); - Double_t covV0_3[6]; - v0->GetPosCov(covV0_3); + v0->GetXYZ(pos[0], pos[1], pos[2]); + v0->GetPosCov(covVtx); AliAODVertex * vV0 = - new(vertices[jVertices++]) AliAODVertex(posV0_3, - covV0_3, - v0->GetChi2V0(), + new(vertices[jVertices++]) AliAODVertex(pos, + covVtx, + v0->GetChi2V0(), // = chi2/NDF since NDF = 2*2-3 primary, AliAODVertex::kV0); primary->AddDaughter(vV0); @@ -351,33 +343,28 @@ void CreateAODfromESD(const char *inFileName = "AliESDs.root", usedTrack[posFromV0] = kTRUE; AliESDtrack *esdTrack = esd->GetTrack(posFromV0); - - Double_t p4[3]; - esdTrack->GetPxPyPz(p4); - - Double_t x4[3]; - esdTrack->GetXYZ(x4); - - Double_t covV0PosTr_2[21]; - esdTrack->GetCovarianceXYZPxPyPz(covV0PosTr_2); - - Double_t pid4[10]; - esdTrack->GetESDpid(pid4); + esdTrack->GetPxPyPz(p); + esdTrack->GetXYZ(pos); + esdTrack->GetCovarianceXYZPxPyPz(covTr); + esdTrack->GetESDpid(pid); - vV0->AddDaughter( + vV0->AddDaughter(aodTrack = new(tracks[jTracks++]) AliAODTrack(esdTrack->GetID(), esdTrack->GetLabel(), - p4, + p, kTRUE, - x4, + pos, kFALSE, - covV0PosTr_2, + covTr, (Short_t)esdTrack->GetSign(), esdTrack->GetITSClusterMap(), - pid4, + pid, vV0, + kTRUE, // check if this is right + kFALSE, // check if this is right AliAODTrack::kSecondary) ); + aodTrack->ConvertAliPIDtoAODPID(); } else { cerr << "Error: event " << iEvent << " V0 " << nV0 @@ -391,33 +378,28 @@ void CreateAODfromESD(const char *inFileName = "AliESDs.root", usedTrack[negFromV0] = kTRUE; AliESDtrack *esdTrack = esd->GetTrack(negFromV0); - - Double_t p5[3]; - esdTrack->GetPxPyPz(p5); - - Double_t x5[3]; - esdTrack->GetXYZ(x5); - - Double_t covV0NegTr_2[21]; - esdTrack->GetCovarianceXYZPxPyPz(covV0NegTr_2); - - Double_t pid5[10]; - esdTrack->GetESDpid(pid5); + esdTrack->GetPxPyPz(p); + esdTrack->GetXYZ(pos); + esdTrack->GetCovarianceXYZPxPyPz(covTr); + esdTrack->GetESDpid(pid); - vV0->AddDaughter( + vV0->AddDaughter(aodTrack = new(tracks[jTracks++]) AliAODTrack(esdTrack->GetID(), esdTrack->GetLabel(), - p5, + p, kTRUE, - x5, + pos, kFALSE, - covV0NegTr_2, + covTr, (Short_t)esdTrack->GetSign(), esdTrack->GetITSClusterMap(), - pid5, + pid, vV0, + kTRUE, // check if this is right + kFALSE, // check if this is right AliAODTrack::kSecondary) ); + aodTrack->ConvertAliPIDtoAODPID(); } else { cerr << "Error: event " << iEvent << " V0 " << nV0 @@ -433,10 +415,9 @@ void CreateAODfromESD(const char *inFileName = "AliESDs.root", for (Int_t iTrack=0; iTrackGetTrack(iTrack); - + AliESDtrack * esdTrack = esd->GetTrack(iTrack); - Int_t ikink = track->GetKinkIndex(0); + Int_t ikink = esdTrack->GetKinkIndex(0); if (ikink) { // Negative kink index: mother, positive: daughter @@ -445,9 +426,9 @@ void CreateAODfromESD(const char *inFileName = "AliESDs.root", for (Int_t jTrack = iTrack+1; jTrackGetTrack(jTrack); + AliESDtrack * esdTrack1 = esd->GetTrack(jTrack); - Int_t jkink = track1->GetKinkIndex(0); + Int_t jkink = esdTrack1->GetKinkIndex(0); if ( TMath::Abs(ikink)==TMath::Abs(jkink) ) { @@ -483,33 +464,28 @@ void CreateAODfromESD(const char *inFileName = "AliESDs.root", usedTrack[imother] = kTRUE; AliESDtrack *esdTrack = esd->GetTrack(imother); - - Double_t p6[3]; - esdTrack->GetPxPyPz(p6); - - Double_t x6[3]; - esdTrack->GetXYZ(x6); - - Double_t covKinkMother[21]; - esdTrack->GetCovarianceXYZPxPyPz(covKinkMother); - - Double_t pid6[10]; - esdTrack->GetESDpid(pid6); + esdTrack->GetPxPyPz(p); + esdTrack->GetXYZ(pos); + esdTrack->GetCovarianceXYZPxPyPz(covTr); + esdTrack->GetESDpid(pid); mother = new(tracks[jTracks++]) AliAODTrack(esdTrack->GetID(), esdTrack->GetLabel(), - p6, + p, kTRUE, - x6, + pos, kFALSE, - covKinkMother, + covTr, (Short_t)esdTrack->GetSign(), esdTrack->GetITSClusterMap(), - pid6, + pid, primary, + kTRUE, // check if this is right + kTRUE, // check if this is right AliAODTrack::kPrimary); primary->AddDaughter(mother); + mother->ConvertAliPIDtoAODPID(); } else { cerr << "Error: event " << iEvent << " kink " << TMath::Abs(ikink)-1 @@ -534,33 +510,28 @@ void CreateAODfromESD(const char *inFileName = "AliESDs.root", usedTrack[idaughter] = kTRUE; AliESDtrack *esdTrack = esd->GetTrack(idaughter); - - Double_t p7[3]; - esdTrack->GetPxPyPz(p7); - - Double_t x7[3]; - esdTrack->GetXYZ(x7); - - Double_t covKinkDaughter[21]; - esdTrack->GetCovarianceXYZPxPyPz(covKinkDaughter); - - Double_t pid7[10]; - esdTrack->GetESDpid(pid7); + esdTrack->GetPxPyPz(p); + esdTrack->GetXYZ(pos); + esdTrack->GetCovarianceXYZPxPyPz(covTr); + esdTrack->GetESDpid(pid); daughter = new(tracks[jTracks++]) AliAODTrack(esdTrack->GetID(), esdTrack->GetLabel(), - p7, + p, kTRUE, - x7, + pos, kFALSE, - covKinkDaughter, + covTr, (Short_t)esdTrack->GetSign(), esdTrack->GetITSClusterMap(), - pid7, + pid, vkink, + kTRUE, // check if this is right + kTRUE, // check if this is right AliAODTrack::kPrimary); vkink->AddDaughter(daughter); + daughter->ConvertAliPIDtoAODPID(); } else { cerr << "Error: event " << iEvent << " kink " << TMath::Abs(ikink)-1 @@ -584,18 +555,10 @@ void CreateAODfromESD(const char *inFileName = "AliESDs.root", if (usedTrack[nTrack]) continue; AliESDtrack *esdTrack = esd->GetTrack(nTrack); - - Double_t p8[3]; - esdTrack->GetPxPyPz(p8); - - Double_t x8[3]; - esdTrack->GetXYZ(x8); - - Double_t covTr[21]; + esdTrack->GetPxPyPz(p); + esdTrack->GetXYZ(pos); esdTrack->GetCovarianceXYZPxPyPz(covTr); - - Double_t pid8[10]; - esdTrack->GetESDpid(pid8); + esdTrack->GetESDpid(pid); Float_t impactXY, impactZ; @@ -604,44 +567,83 @@ void CreateAODfromESD(const char *inFileName = "AliESDs.root", if (impactXY<3) { // track inside the beam pipe - primary->AddDaughter( + primary->AddDaughter(aodTrack = new(tracks[jTracks++]) AliAODTrack(esdTrack->GetID(), esdTrack->GetLabel(), - p8, + p, kTRUE, - x8, + pos, kFALSE, covTr, (Short_t)esdTrack->GetSign(), esdTrack->GetITSClusterMap(), - pid8, + pid, primary, + kTRUE, // check if this is right + kTRUE, // check if this is right AliAODTrack::kPrimary) ); + aodTrack->ConvertAliPIDtoAODPID(); } else { // outside the beam pipe: orphan track + aodTrack = new(tracks[jTracks++]) AliAODTrack(esdTrack->GetID(), esdTrack->GetLabel(), - p8, + p, kTRUE, - x8, + pos, kFALSE, covTr, (Short_t)esdTrack->GetSign(), esdTrack->GetITSClusterMap(), - pid8, + pid, NULL, + kFALSE, // check if this is right + kFALSE, // check if this is right AliAODTrack::kOrphan); + aodTrack->ConvertAliPIDtoAODPID(); } } // end of loop on tracks - - // Access to the AOD container of vertices + // muon tracks + Int_t nMuTracks = esd->GetNumberOfMuonTracks(); + for (Int_t nMuTrack = 0; nMuTrack < nMuTracks; ++nMuTrack) { + + AliESDMuonTrack *esdMuTrack = esd->GetMuonTrack(nMuTrack); + p[0] = esdMuTrack->Px(); + p[1] = esdMuTrack->Py(); + p[2] = esdMuTrack->Pz(); + pos[0] = primary->GetX(); + pos[1] = primary->GetY(); + pos[2] = primary->GetZ(); + + // has to be changed once the muon pid is provided by the ESD + for (Int_t i = 0; i < 10; pid[i++] = 0.); pid[AliAODTrack::kMuon]=1.; + + primary->AddDaughter( + new(tracks[jTracks++]) AliAODTrack(0, // no ID provided + 0, // no label provided + p, + kTRUE, + pos, + kFALSE, + NULL, // no covariance matrix provided + (Short_t)-99, // no charge provided + 0, // no ITSClusterMap + pid, + primary, + kTRUE, // check if this is right + kTRUE, // not used for vertex fit + AliAODTrack::kPrimary) + ); + } + + // Access to the AOD container of clusters TClonesArray &clusters = *(aod->GetClusters()); Int_t jClusters=0; - // Clusters + // Calo Clusters Int_t nClusters = esd->GetNumberOfCaloClusters(); for (Int_t iClust=0; iClustGetID(); Int_t label = -1; Float_t energy = cluster->GetClusterEnergy(); - Float_t x9[3]; - cluster->GetGlobalPosition(x9); - Float_t * covMatrix = NULL; - Float_t * pid9 = NULL; + cluster->GetGlobalPosition(posF); AliAODVertex *prodVertex = primary; AliAODTrack *primTrack = NULL; Char_t ttype=AliAODCluster::kUndef; @@ -672,15 +671,14 @@ void CreateAODfromESD(const char *inFileName = "AliESDs.root", new(clusters[jClusters++]) AliAODCluster(id, label, energy, - x9, - covMatrix, - pid9, + pos, + NULL, // no covariance matrix provided + NULL, // no pid for clusters provided prodVertex, primTrack, ttype); - } // end of loop on clusters - + } // end of loop on calo clusters delete [] usedTrack; delete [] usedV0;