//
//
-/*
+/*
marian.ivanov@cern.ch
Usage:
-
+
.L $ALICE_ROOT/STEER/AliGenInfo.C+
//be sure you created genTracks file before
.L $ALICE_ROOT/STEER/AliESDComparisonMI.C+
-
//
-ESDCmpTr *t2 = new ESDCmpTr("genTracks.root","cmpESDTracks.root","galice.root",-1,1,0);
+ESDCmpTr *t2 = new ESDCmpTr("genTracks.root","cmpESDTracks.root","galice.root",-1,0,0);
t2->Exec();
//
TCut cprim("cprim","TMath::Sqrt(MC.fVDist[0]**2+MC.fVDist[1]**2)<0.01&&abs(MC.fVDist[2])<0.01")
//TCut cprim("cprim","TMath::Sqrt(MC.fVDist[0]**2+MC.fVDist[1]**2)<0.5&&abs(MC.fVDist[2])<0.5")
//TCut citsin("citsin","TMath::Sqrt(MC.fVDist[0]**2+MC.fVDist[1]**2)<3.9");
-TCut citsin("citsin","TMath::Sqrt(MC.fVDist[0]**2+MC.fVDist[1]**2)<15");
-
+TCut citsin("citsin","TMath::Sqrt(MC.fVDist[0]**2+MC.fVDist[1]**2)<5");
TCut csec("csec","TMath::Sqrt(MC.fVDist[0]**2+MC.fVDist[1]**2)>0.5");
TCut crec("crec","fReconstructed==1");
TCut cteta1("cteta1","abs(MC.fParticle.Theta()/3.1415-0.5)<0.25");
+TCut cteta05("cteta05","abs(MC.fParticle.Theta()/3.1415-0.5)<0.1");
+
TCut cpos1("cpos1","abs(MC.fParticle.fVz/sqrt(MC.fParticle.fVx*MC.fParticle.fVx+MC.fParticle.fVy*MC.fParticle.fVy))<1");
TCut csens("csens","abs(sqrt(fVDist[0]**2+fVDist[1]**2)-170)<50");
TCut cmuon("cmuon","abs(MC.fParticle.fPdgCode==-13)");
comp.fTree->SetAlias("decaydir","MC.fTRdecay.fX*MC.fTRdecay.fPx+MC.fTRdecay.fY*MC.fTRdecay.fPy");
comp.fTree->SetAlias("theta","MC.fTrackRef.Theta()");
comp.fTree->SetAlias("primdca","sqrt(RC.fITStrack.fD[0]**2+RC.fITStrack.fD[1]**2)");
-
+comp.fTree->SetAlias("trdchi2","fTRDtrack.fChi2/fTRDtrack.fN");
comp.fTree->SetAlias("trdchi2","fTRDtrack.fChi2/fTRDtrack.fN");
+
TH1F his("his","his",100,0,20);
TH1F hpools("hpools","hpools",100,-7,7);
TH1F hfake("hfake","hfake",1000,0,150);
TProfile profp0("profp0","profp0",20,-0.4,0.9)
-comp.DrawLogXY("fTPCinP0[3]","fTPCDelta[4]/fTPCinP1[3]","fReconstructed==1"+cprim,"1",4,0.2,1.5,-0.06,0.06)
+comp.DrawXY("fTPCinP0[3]","fTPCDelta[4]/fTPCinP1[3]","fReconstructed==1"+cprim,"1",4,0.2,1.5,-0.06,0.06)
comp.fRes->Draw();
comp.fMean->Draw();
-comp.DrawLogXY("fITSinP0[3]","fITSDelta[4]/fITSinP1[3]","fReconstructed==1&&fITSOn"+cprim,"1",4,0.2,1.5,-0.06,0.06)
+comp.DrawXY("fITSinP0[3]","fITSDelta[4]/fITSinP1[3]","fReconstructed==1&&fITSOn"+cprim,"1",4,0.2,1.5,-0.06,0.06)
comp.fRes->Draw();
comp.Eff("fTPCinP0[3]","fRowsWithDigits>120"+cteta1+cpos1+cprim,"fTPCOn",20,0.2,1.5)
TH1F his("his","his",100,0,20);
TH1F hpools("hpools","hpools",100,-7,7);
-TH2F * hdedx0 = new TH2F("dEdx0","dEdx0",100, 0,2,200,0,550); hdedx0->SetMarkerColor(2);
-TH2F * hdedx1 = new TH2F("dEdx1","dEdx1",100, 0,2,200,0,550); hdedx1->SetMarkerColor(3);
-TH2F * hdedx2 = new TH2F("dEdx2","dEdx2",100, 0,2,200,0,550); hdedx2->SetMarkerColor(4);
-TH2F * hdedx3 = new TH2F("dEdx3","dEdx3",100, 0,2,200,0,550); hdedx3->SetMarkerColor(6);
+TH2F * hdedx0 = new TH2F("dEdx0","dEdx0",100, 0,2,200,0,550); hdedx0->SetMarkerColor(1);
+TH2F * hdedx1 = new TH2F("dEdx1","dEdx1",100, 0,2,200,0,550); hdedx1->SetMarkerColor(4);
+TH2F * hdedx2 = new TH2F("dEdx2","dEdx2",100, 0,2,200,0,550); hdedx2->SetMarkerColor(3);
+TH2F * hdedx3 = new TH2F("dEdx3","dEdx3",100, 0,2,200,0,550); hdedx3->SetMarkerColor(2);
-comp.fTree->Draw("fESDTrack.fITSsignal:MC.fParticle.P()>>dEdx0","fITSOn&&MC.fParticle.P()<2&&abs(fPdg)==211&&fITStrack.fN==6"+cprim)
-comp.fTree->Draw("fESDTrack.fITSsignal:MC.fParticle.P()>>dEdx1","fITSOn&&MC.fParticle.P()<2&&abs(fPdg)==2212&&fITStrack.fN==6"+cprim)
-comp.fTree->Draw("fESDTrack.fITSsignal:MC.fParticle.P()>>dEdx2","fITSOn&&MC.fParticle.P()<2&&abs(fPdg)==321&&fITStrack.fN==6"+cprim)
-comp.fTree->Draw("fESDTrack.fITSsignal:MC.fParticle.P()>>dEdx3","fITSOn&&MC.fParticle.P()<2&&abs(fPdg)==11&&fITStrack.fN==6"+cprim)
+comp.fTree->Draw("fESDTrack.fITSsignal:MC.fParticle.P()>>dEdx0","fITSOn&&abs(fPdg)==211&&fITStrack.fN==6"+cprim)
+comp.fTree->Draw("fESDTrack.fITSsignal:MC.fParticle.P()>>dEdx1","fITSOn&&abs(fPdg)==2212&&fITStrack.fN==6"+cprim)
+comp.fTree->Draw("fESDTrack.fITSsignal:MC.fParticle.P()>>dEdx2","fITSOn&&abs(fPdg)==321&&fITStrack.fN==6"+cprim)
+comp.fTree->Draw("fESDTrack.fITSsignal:MC.fParticle.P()>>dEdx3","fITSOn&&abs(fPdg)==11&&fITStrack.fN==6"+cprim)
-comp.fTree->Draw("fESDTrack.fTRDsignal:MC.fParticle.P()>>dEdx0","fTRDOn&&MC.fParticle.P()<2&&abs(fPdg)==211&&fTRDtrack.fN>40&&abs(fESDTrack.fTRDLabel)==abs(fESDTrack.fTPCLabel)")
-comp.fTree->Draw("fESDTrack.fTRDsignal:MC.fParticle.P()>>dEdx1","fTRDOn&&MC.fParticle.P()<2&&abs(fPdg)==2212&&fTRDtrack.fN>40&&abs(fESDTrack.fTRDLabel)==abs(fESDTrack.fTPCLabel)")
-comp.fTree->Draw("fESDTrack.fTRDsignal:MC.fParticle.P()>>dEdx2","fTRDOn&&MC.fParticle.P()<2&&abs(fPdg)==321&&fTRDtrack.fN>40&&abs(fESDTrack.fTRDLabel)==abs(fESDTrack.fTPCLabel)")
-comp.fTree->Draw("fESDTrack.fTRDsignal:MC.fParticle.P()>>dEdx3","fTRDOn&&MC.fParticle.P()<2&&abs(fPdg)==11&&fTRDtrack.fN>40&&abs(fESDTrack.fTRDLabel)==abs(fESDTrack.fTPCLabel)")
+comp.fTree->Draw("fESDTrack.fTRDsignal:MC.fParticle.P()>>dEdx0","fTRDOn&&abs(fPdg)==211&&fTRDtrack.fN>40&&fStatus[2]>1")
+comp.fTree->Draw("fESDTrack.fTRDsignal:MC.fParticle.P()>>dEdx1","fTRDOn&&abs(fPdg)==2212&&fTRDtrack.fN>40&&fStatus[2]>1")
+comp.fTree->Draw("fESDTrack.fTRDsignal:MC.fParticle.P()>>dEdx2","fTRDOn&&abs(fPdg)==321&&fTRDtrack.fN>40&&fStatus[2]>1")
+comp.fTree->Draw("fESDTrack.fTRDsignal:MC.fParticle.P()>>dEdx3","fTRDOn&&abs(fPdg)==11&&fTRDtrack.fN>40&&fStatus[2]>1")
+comp.fTree->Draw("fESDTrack.fTPCsignal:fTPCinP0[4]>>dEdx0","fTPCOn&&abs(fPdg)==211&&fESDTrack.fTPCncls>180&&fESDTrack.fTPCsignal>10"+cteta1);
+comp.fTree->Draw("fESDTrack.fTPCsignal:fTPCinP0[4]>>dEdx1","fTPCOn&&abs(fPdg)==2212&&fESDTrack.fTPCncls>180&&fESDTrack.fTPCsignal>10"+cteta1);
+comp.fTree->Draw("fESDTrack.fTPCsignal:fTPCinP0[4]>>dEdx2","fTPCOn&&abs(fPdg)==321&&fESDTrack.fTPCncls>180&&fESDTrack.fTPCsignal>10"+cteta1);
+comp.fTree->Draw("fESDTrack.fTPCsignal:fTPCinP0[4]>>dEdx3","fTPCOn&&abs(fPdg)==11&&fESDTrack.fTPCncls>180&&fESDTrack.fTPCsignal>10"+cteta1);
-hdedx1->Draw(); hdedx0->Draw("same"); hdedx2->Draw("same"); hdedx3->Draw("same");
+hdedx3->SetXTitle("P(GeV/c)");
+hdedx3->SetYTitle("dEdx(unit)");
+hdedx3->Draw(); hdedx1->Draw("same"); hdedx2->Draw("same"); hdedx0->Draw("same");
comp.DrawXY("fITSinP0[3]","fITSPools[4]","fReconstructed==1&&fPdg==-211&&fITSOn"+cprim,"1",4,0.2,1.0,-8,8)
+TProfile prof("prof","prof",10,0.5,5);
+
+
+
+
*/
#include "AliESDVertex.h"
#include "AliExternalTrackParam.h"
#include "AliESDkink.h"
-#include "AliESDV0MI.h"
+#include "AliESDv0.h"
#endif
#include "AliGenInfo.h"
+
+void MakeAliases(AliESDComparisonDraw&comp)
+{
+ //
+ // aliases definition
+ //
+ comp.fTree->SetAlias("radius","TMath::Sqrt(MC.fVDist[0]**2+MC.fVDist[1]**2)");
+ comp.fTree->SetAlias("direction","MC.fParticle.fVx*MC.fParticle.fPx+MC.fParticle.fVy*MC.fParticle.fPy");
+ comp.fTree->SetAlias("decaydir","MC.fTRdecay.fX*MC.fTRdecay.fPx+MC.fTRdecay.fY*MC.fTRdecay.fPy");
+ comp.fTree->SetAlias("theta","MC.fTrackRef.Theta()");
+ comp.fTree->SetAlias("primdca","sqrt(RC.fITStrack.fD[0]**2+RC.fITStrack.fD[1]**2)");
+ comp.fTree->SetAlias("trdchi2","fTRDtrack.fChi2/fTRDtrack.fN");
+ comp.fTree->SetAlias("trdchi2","fTRDtrack.fChi2/fTRDtrack.fN");
+
+ comp.fTree->SetAlias("trddedx","(RC.fESDTrack.fTRDsignals[0]+RC.fESDTrack.fTRDsignals[1]+RC.fESDTrack.fTRDsignals[2]+RC.fESDTrack.fTRDsignals[3]+RC.fESDTrack.fTRDsignals[4]+RC.fESDTrack.fTRDsignals[5])/6.");
+
+ comp.fTree->SetAlias("dtofmc2","fESDTrack.fTrackTime[2]-(10^12*MC.fTOFReferences[0].fTime)");
+ comp.fTree->SetAlias("dtofrc2","(fESDTrack.fTrackTime[2]-fESDTrack.fTOFsignal)");
+
+ comp.fTree->SetAlias("psum","fESDTrack.fTOFr[4]+fESDTrack.fTOFr[3]+fESDTrack.fTOFr[2]+fESDTrack.fTOFr[1]+fESDTrack.fTOFr[0]");
+ comp.fTree->SetAlias("P0","fESDTrack.fTOFr[0]/psum");
+ comp.fTree->SetAlias("P1","fESDTrack.fTOFr[1]/psum");
+ comp.fTree->SetAlias("P2","fESDTrack.fTOFr[2]/psum");
+ comp.fTree->SetAlias("P3","fESDTrack.fTOFr[3]/psum");
+ comp.fTree->SetAlias("P4","fESDTrack.fTOFr[4]/psum");
+ comp.fTree->SetAlias("MaxP","max(max(max(P0,P1),max(P2,P3)),P4)");
+}
+
+
+
+
void AliESDRecInfo::UpdatePoints(AliESDtrack*track)
{
//
fTPCPoints[0]=i;
}
//
+ // Density at the last 30 padrows
+ //
+ //
+ nall = 0;
+ ngood = 0;
+ for (Int_t i=159;i>0;i--){
+ if (iclusters[i]==-1) continue; //dead zone
+ nall++;
+ if (iclusters[i]>0) ngood++;
+ if (nall>20) break;
+ }
+ fTPCPoints[4] = Float_t(ngood)/Float_t(nall);
+ //
if ((track->GetStatus()&AliESDtrack::kITSrefit)>0) fTPCPoints[0]=-1;
+ //
+ //
+ // check TRDPoints
+ /*
+ nclusters=track->GetTRDclusters(iclusters);
+ for (Int_t i=nclusters;i>0;i--){
+
+ }
+ */
+
+
}
//
//
-void AliESDRecInfo::Update(AliMCInfo* info,AliTPCParam * par, Bool_t reconstructed)
+void AliESDRecInfo::Update(AliMCInfo* info,AliTPCParam * /*par*/, Bool_t reconstructed, AliESD *event)
{
//
//
fStatus[1] =2;
}
else{
- fStatus[1]=1;
+ if ((fESDTrack.GetStatus()&AliESDtrack::kTPCin)>0)
+ fStatus[1]=1;
+ }
+ }
+ //
+ if ((fESDTrack.GetStatus()&AliESDtrack::kITSout)>0){
+ fStatus[0] =2;
+ }
+ else{
+ if ((fESDTrack.GetStatus()&AliESDtrack::kITSrefit)>0){
+ fStatus[0] =1;
+ }
+ else{
+ fStatus[0]=0;
}
}
+
//
//
if ((fESDTrack.GetStatus()&AliESDtrack::kTRDrefit)>0){
Int_t toflabel[3];
fESDTrack.GetTOFLabel(toflabel);
Bool_t toffake=kTRUE;
+ Bool_t tofdaughter=kFALSE;
for (Int_t i=0;i<3;i++){
- if (toflabel[i]<0) continue;
+ if (toflabel[i]<0) continue;
if (toflabel[i]== TMath::Abs(fESDTrack.GetLabel())) toffake=kFALSE;
+ if (toflabel[i]==info->fParticle.GetDaughter(0) || (toflabel[i]==info->fParticle.GetDaughter(1))) tofdaughter=kTRUE; // decay product of original particle
fStatus[3]=1;
}
- if (toffake) fStatus[3] =2;
+ if (toffake) fStatus[3] =3; //total fake
+ if (tofdaughter) fStatus[3]=2; //fake because of decay
}else{
fStatus[3]=0;
}
- if (fStatus[1]>0 &&info->fNTPCRef>0){
+ if (fStatus[1]>0 &&info->fNTPCRef>0&&TMath::Abs(fTPCinP0[3])>0.0001){
//TPC
fESDTrack.GetInnerXYZ(fTPCinR1);
fTPCinR1[3] = TMath::Sqrt(fTPCinR1[0]*fTPCinR1[0]+fTPCinR1[1]*fTPCinR1[1]);
fTPCinP1[4] = TMath::Sqrt(fTPCinP1[3]*fTPCinP1[3]+fTPCinP1[2]*fTPCinP1[2]);
//
//
- if (fTPCinP1[3]>0.0000001){
+ if (fTPCinP1[3]>0.000000000000001){
fTPCAngle1[0] = TMath::ATan2(fTPCinP1[1],fTPCinP1[0]);
fTPCAngle1[1] = TMath::ATan(fTPCinP1[2]/fTPCinP1[3]);
}
- Double_t cov[15], param[5],x;
+ Double_t cov[15], param[5],x, alpha;
fESDTrack.GetInnerExternalCovariance(cov);
- fESDTrack.GetInnerExternalParameters(x,param);
- // if (x<50) return
+ fESDTrack.GetInnerExternalParameters(alpha, x,param);
+ if (x<50) return ;
//
fTPCDelta[0] = (fTPCinR0[4]-fTPCinR1[4])*fTPCinR1[3]; //delta rfi
fTPCPools[0] = fTPCDelta[0]/TMath::Sqrt(cov[0]);
fTPCDelta[4] = (fTPCinP0[3]-fTPCinP1[3]);
Double_t sign = (param[4]>0)? 1.:-1;
fSign =sign;
- fTPCPools[4] = sign*(1./fTPCinP0[3]-1./fTPCinP1[3])/TMath::Sqrt(cov[14]);
+ fTPCPools[4] = sign*(1./fTPCinP0[3]-1./fTPCinP1[3])/TMath::Sqrt(TMath::Abs(cov[14]));
}
if (fITSOn){
// ITS
Double_t param[5],x;
- //fESDTrack.GetExternalParameters(x,param);
- fESDTrack.GetConstrainedExternalParameters(x,param);
+ fESDTrack.GetExternalParameters(x,param);
+ // fESDTrack.GetConstrainedExternalParameters(x,param);
Double_t cov[15];
fESDTrack.GetExternalCovariance(cov);
- fESDTrack.GetConstrainedExternalCovariance(cov);
+ //fESDTrack.GetConstrainedExternalCovariance(cov);
if (TMath::Abs(param[4])<0.0000000001) return;
fESDTrack.GetXYZ(fITSinR1);
//
Double_t xd[3],pd[3],signd;
Double_t xm[3],pm[3],signm;
- for (Int_t i=0;i<3;i++){
- xd[i] = fT2.fTPCinR1[i];
- pd[i] = fT2.fTPCinP1[i];
- xm[i] = fT1.fTPCinR1[i];
- pm[i] = fT1.fTPCinP1[i];
+ //
+ //
+ if (fT1.fITSOn&&fT2.fITSOn){
+ for (Int_t i=0;i<3;i++){
+ xd[i] = fT2.fITSinR1[i];
+ pd[i] = fT2.fITSinP1[i];
+ xm[i] = fT1.fITSinR1[i];
+ pm[i] = fT1.fITSinP1[i];
+ }
+ }
+ else{
+
+ for (Int_t i=0;i<3;i++){
+ xd[i] = fT2.fTPCinR1[i];
+ pd[i] = fT2.fTPCinP1[i];
+ xm[i] = fT1.fTPCinR1[i];
+ pm[i] = fT1.fTPCinP1[i];
+ }
}
+ //
+ //
signd = fT2.fSign<0 ? -1:1;
signm = fT1.fSign<0 ? -1:1;
Double_t delta1=10000,delta2=10000;
if (points==1){
- fMinR = TMath::Sqrt(radius[0]);
+ fRs[0] = TMath::Sqrt(radius[0]);
+ fRs[1] = TMath::Sqrt(radius[0]);
}
if (points==2){
- fMinR =TMath::Min(TMath::Sqrt(radius[0]),TMath::Sqrt(radius[1]));
+ fRs[0] =TMath::Min(TMath::Sqrt(radius[0]),TMath::Sqrt(radius[1]));
+ fRs[1] =TMath::Max(TMath::Sqrt(radius[0]),TMath::Sqrt(radius[1]));
}
if (points>0){
dhelix1.LinearDCA(mhelix,phase[1][0],phase[1][1],radius[1],delta2);
}
if (points==1){
- fMinR = TMath::Sqrt(radius[0]);
+ fRs[0] = TMath::Sqrt(radius[0]);
+ fRs[1] = TMath::Sqrt(radius[0]);
fDistMinR = delta1;
}
if (points==2){
if (radius[0]<radius[1]){
- fMinR = TMath::Sqrt(radius[0]);
+ fRs[0] = TMath::Sqrt(radius[0]);
+ fRs[1] = TMath::Sqrt(radius[1]);
fDistMinR = delta1;
}
else{
- fMinR = TMath::Sqrt(radius[1]);
+ fRs[0] = TMath::Sqrt(radius[1]);
+ fRs[1] = TMath::Sqrt(radius[0]);
fDistMinR = delta2;
}
}
}
distance2 = TMath::Min(delta1,delta2);
+ if (distance2>100) fDist2 =100;
+ return;
if (delta1<delta2){
//get V0 info
dhelix1.Evaluate(phase[0][0],fXr);
if (fDist2<10.5){
Double_t x,alpha,param[5],cov[15];
//
- fT1.fESDTrack.GetInnerExternalParameters(x,param);
+ fT1.fESDTrack.GetInnerExternalParameters(alpha,x,param);
fT1.fESDTrack.GetInnerExternalCovariance(cov);
- alpha = fT1.fESDTrack.GetInnerAlpha();
AliExternalTrackParam paramm(x,alpha,param,cov);
//
- fT2.fESDTrack.GetInnerExternalParameters(x,param);
+ fT2.fESDTrack.GetInnerExternalParameters(alpha,x,param);
fT2.fESDTrack.GetInnerExternalCovariance(cov);
- alpha = fT2.fESDTrack.GetInnerAlpha();
AliExternalTrackParam paramd(x,alpha,param,cov);
}
//
if (fDist2<10.5){
Double_t x,alpha,param[5],cov[15];
//
- fT1.fESDTrack.GetInnerExternalParameters(x,param);
+ fT1.fESDTrack.GetInnerExternalParameters(alpha,x,param);
fT1.fESDTrack.GetInnerExternalCovariance(cov);
- alpha = fT1.fESDTrack.GetInnerAlpha();
AliExternalTrackParam paramm(x,alpha,param,cov);
//
- fT2.fESDTrack.GetInnerExternalParameters(x,param);
+ fT2.fESDTrack.GetInnerExternalParameters(alpha,x,param);
fT2.fESDTrack.GetInnerExternalCovariance(cov);
- alpha = fT2.fESDTrack.GetInnerAlpha();
AliExternalTrackParam paramd(x,alpha,param,cov);
/*
AliESDkink kink;
cerr<<"restricted number of events availaible"<<endl;
}
AliMagF * magf = gAlice->Field();
- AliTracker::SetFieldMap(magf);
+ AliTracker::SetFieldMap(magf,0);
}
fNextTreeGenEntryToRead = 0;
fNextKinkToRead = 0;
+ fNextV0ToRead =0;
cerr<<"fFirstEventNr, fNEvents: "<<fFirstEventNr<<" "<<fNEvents<<endl;
for (Int_t eventNr = fFirstEventNr; eventNr < fFirstEventNr+fNEvents;
eventNr++) {
SetIO(fEventNr);
fNParticles = gAlice->GetEvent(fEventNr);
- fIndexRecTracks = new Int_t[fNParticles*20]; //write at maximum 4 tracks corresponding to particle
- fIndexRecKinks = new Int_t[fNParticles*20]; //write at maximum 20 tracks corresponding to particle
- fIndexRecV0 = new Int_t[fNParticles*20]; //write at maximum 20 tracks corresponding to particle
+ fIndexRecTracks = new Short_t[fNParticles*20]; //write at maximum 4 tracks corresponding to particle
+ fIndexRecKinks = new Short_t[fNParticles*20]; //write at maximum 20 tracks corresponding to particle
+ fIndexRecV0 = new Short_t[fNParticles*20]; //write at maximum 20 tracks corresponding to particle
- fFakeRecTracks = new Int_t[fNParticles];
- fMultiRecTracks = new Int_t[fNParticles];
- fMultiRecKinks = new Int_t[fNParticles];
- fMultiRecV0 = new Int_t[fNParticles];
+ fFakeRecTracks = new Short_t[fNParticles];
+ fMultiRecTracks = new Short_t[fNParticles];
+ fMultiRecKinks = new Short_t[fNParticles];
+ fMultiRecV0 = new Short_t[fNParticles];
for (Int_t i = 0; i<fNParticles; i++) {
for (Int_t j=0;j<20;j++){
fRecInfo = new AliESDRecInfo;
AliESDtrack * esdTrack = new AliESDtrack;
// AliITStrackMI * itsTrack = new AliITStrackMI;
- fTreeCmp->Branch("MC","AliMCInfo",&fMCInfo);
- fTreeCmp->Branch("RC","AliESDRecInfo",&fRecInfo);
- fTreeCmp->Branch("fESDTrack","AliESDtrack",&esdTrack);
+ fTreeCmp->Branch("MC","AliMCInfo",&fMCInfo,256000);
+ fTreeCmp->Branch("RC","AliESDRecInfo",&fRecInfo,256000);
+ // fTreeCmp->Branch("fESDTrack","AliESDtrack",&esdTrack);
// fTreeCmp->Branch("ITS","AliITStrackMI",&itsTrack);
delete esdTrack;
//
fTreeCmpKinks = new TTree("ESDcmpKinks","ESDcmpKinks");
fGenKinkInfo = new AliGenKinkInfo;
fRecKinkInfo = new AliESDRecKinkInfo;
- fTreeCmpKinks->Branch("MC.","AliGenKinkInfo",&fGenKinkInfo);
- fTreeCmpKinks->Branch("RC.","AliESDRecKinkInfo",&fRecKinkInfo);
+ fTreeCmpKinks->Branch("MC.","AliGenKinkInfo",&fGenKinkInfo,256000);
+ fTreeCmpKinks->Branch("RC.","AliESDRecKinkInfo",&fRecKinkInfo,256000);
//
//
fTreeCmpV0 = new TTree("ESDcmpV0","ESDcmpV0");
fGenV0Info = new AliGenV0Info;
fRecV0Info = new AliESDRecV0Info;
- fTreeCmpV0->Branch("MC.","AliGenV0Info", &fGenV0Info);
- fTreeCmpV0->Branch("RC.","AliESDRecV0Info",&fRecV0Info);
+ fTreeCmpV0->Branch("MC.","AliGenV0Info", &fGenV0Info,256000);
+ fTreeCmpV0->Branch("RC.","AliESDRecV0Info",&fRecV0Info,256000);
//
fTreeCmp->AutoSave();
fTreeCmpKinks->AutoSave();
Float_t x[3] = { trackRef->X(),trackRef->Y(),trackRef->Z()};
Int_t index[4];
paramTPC->Transform0to1(x,index);
- paramTPC->Transform1to2(x,index);
+ paramTPC->Transform1to2Ideal(x,index);
return TVector3(x);
}
////////////////////////////////////////////////////////////////////////
//
Int_t nEntries = (Int_t)fEvent->GetNumberOfTracks();
Int_t nKinks = (Int_t) fEvent->GetNumberOfKinks();
- Int_t nV0MIs = (Int_t) fEvent->GetNumberOfV0MIs();
- fSignedKinks = new Int_t[nKinks];
- fSignedV0 = new Int_t[nV0MIs];
+ Int_t nV0MIs = (Int_t) fEvent->GetNumberOfV0s();
+ fSignedKinks = new Short_t[nKinks];
+ fSignedV0 = new Short_t[nV0MIs];
//
// load kinks to the memory
for (Int_t i=0; i<nKinks;i++){
}
//
for (Int_t i=0; i<nV0MIs;i++){
- AliESDV0MI * v0MI =fEvent->GetV0MI(i);
+ AliESDv0 * v0MI =fEvent->GetV0(i);
fSignedV0[i]=0;
if (v0MI->fStatus<0) continue;
}
//
Int_t label0 = TMath::Abs(kink->fLab[0]);
Int_t label1 = TMath::Abs(kink->fLab[1]);
-
Int_t absLabel = TMath::Min(label0,label1);
if (absLabel < fNParticles) {
if (fMultiRecKinks[absLabel]>0){
}
// --sort reconstructed V0
//
- AliESDV0MI * v0MI=0;
+ AliESDv0 * v0MI=0;
for (Int_t iEntry=0; iEntry<nV0MIs;iEntry++){
- v0MI = fEvent->GetV0MI(iEntry);
+ v0MI = fEvent->GetV0(iEntry);
if (!v0MI) continue;
//
- Int_t label0 = TMath::Abs(v0MI->fLab[0]);
- Int_t label1 = TMath::Abs(v0MI->fLab[1]);
-
- Int_t absLabel = TMath::Min(label0,label1);
- if (absLabel < fNParticles) {
- if (fMultiRecV0[absLabel]>0){
- if (fMultiRecV0[absLabel]<20)
- fIndexRecV0[absLabel*20+fMultiRecV0[absLabel]] = iEntry;
+ // Int_t label0 = TMath::Abs(v0MI->fLab[0]);
+ //Int_t label1 = TMath::Abs(v0MI->fLab[1]);
+ //
+ for (Int_t i=0;i<2;i++){
+ // Int_t absLabel = TMath::Min(label0,label1);
+ Int_t absLabel = TMath::Abs(v0MI->fLab[i]);
+ if (absLabel < fNParticles) {
+ if (fMultiRecV0[absLabel]>0){
+ if (fMultiRecV0[absLabel]<20)
+ fIndexRecV0[absLabel*20+fMultiRecV0[absLabel]] = iEntry;
+ }
+ else
+ fIndexRecV0[absLabel*20] = iEntry;
+ fMultiRecV0[absLabel]++;
}
- else
- fIndexRecV0[absLabel*20] = iEntry;
- fMultiRecV0[absLabel]++;
}
}
TBranch * branch = fTreeCmp->GetBranch("RC");
branch->SetAddress(&fRecInfo); // set all pointers
fRecArray = new TObjArray(fNParticles);
+ AliESDtrack dummytrack; //
while (entry < nParticlesTR) {
fTreeGenTracks->GetEntry(entry);
}
}
//
- fRecInfo->fESDTrack =*track;
+ if (track) {
+ new (&(fRecInfo->fESDTrack)) AliESDtrack(*track);
+ }else{
+ fRecInfo->fESDTrack = dummytrack;
+ }
+
if (track->GetITStrack())
fRecInfo->fITStrack = *((AliITStrackMI*)track->GetITStrack());
+ else{
+ fRecInfo->fITStrack = *track;
+ }
if (track->GetTRDtrack()){
fRecInfo->fTRDtrack = *((AliTRDtrack*)track->GetTRDtrack());
}
fRecInfo->fFake = fFakeRecTracks[fMCInfo->fLabel];
fRecInfo->fMultiple = fMultiRecTracks[fMCInfo->fLabel];
//
- fRecInfo->Update(fMCInfo,fParamTPC,kTRUE);
+ fRecInfo->Update(fMCInfo,fParamTPC,kTRUE, fEvent);
}
else{
- fRecInfo->Update(fMCInfo,fParamTPC,kFALSE);
+ fRecInfo->fESDTrack = dummytrack;
+ fRecInfo->Update(fMCInfo,fParamTPC,kFALSE, fEvent);
}
fRecArray->AddAt(new AliESDRecInfo(*fRecInfo),fMCInfo->fLabel);
fTreeCmp->Fill();
if (fMultiRecKinks[label]>0){
// for (Int_t j=0;j<TMath::Min(fMultiRecKinks[label],100);j++){
- for (Int_t j=TMath::Min(fMultiRecKinks[label],20)-1;j>=0;j--){
+ for (Int_t j=TMath::Min(fMultiRecKinks[label],Short_t(20))-1;j>=0;j--){
Int_t index = fIndexRecKinks[label*20+j];
//AliESDkink *kink2 = (AliESDkink*)fKinks->At(index);
AliESDkink *kink2 = (AliESDkink*)fEvent->GetKink(index);
if (TMath::Abs(kink2->fLab[0])==label &&TMath::Abs(kink2->fLab[1])==label2) {
- kink =kink2;
fRecKinkInfo->fKinkMultiple++;
fSignedKinks[index]=1;
+ Int_t c0=0;
+ if (kink){
+ // if (kink->fTRDOn) c0++;
+ //if (kink->fITSOn) c0++;
+ if (kink->GetStatus(2)>0) c0++;
+ if (kink->GetStatus(0)>0) c0++;
+ }
+ Int_t c2=0;
+ // if (kink2->fTRDOn) c2++;
+ //if (kink2->fITSOn) c2++;
+ if (kink2->GetStatus(2)>0) c2++;
+ if (kink2->GetStatus(0)>0) c2++;
+
+ if (c2<c0) continue;
+ kink =kink2;
}
if (TMath::Abs(kink2->fLab[1])==label &&TMath::Abs(kink2->fLab[0])==label2) {
- kink =kink2;
fRecKinkInfo->fKinkMultiple++;
fSignedKinks[index]=1;
+ Int_t c0=0;
+ if (kink){
+ //if (kink->fTRDOn) c0++;
+ //if (kink->fITSOn) c0++;
+ if (kink->GetStatus(2)>0) c0++;
+ if (kink->GetStatus(0)>0) c0++;
+
+ }
+ Int_t c2=0;
+ // if (kink2->fTRDOn) c2++;
+ //if (kink2->fITSOn) c2++;
+ if (kink2->GetStatus(2)>0) c2++;
+ if (kink2->GetStatus(0)>0) c2++;
+
+ if (c2<c0) continue;
+ kink =kink2;
}
}
}
return 0;
}
+
+
+void ESDCmpTr::MakePoints(AliESDtrack * track, AliPointsMI &points)
+{
+ //
+ // make points in global coordinate frame
+ //
+ return;
+ /*
+ UInt_t itscl[10];
+ Int_t nits = track->GetITSclusters(itscl);
+ Int_t tpccl[1000];
+ Int_t ntpc = track->GetTPcclusters(tpccl);
+ UInt_t trdcl[1000];
+ Int_t ntrd = track->GetTRDclusters(trdcl);
+ //
+ AliLoader *itsloader = fLoader->GetLoader("ITSLoader");
+ AliLoader *tpcloader = fLoader->GetLoader("TPCLoader");
+ AliLoader *trdloader = fLoader->GetLoader("TRDLoader");
+ //
+ AliITStrackerMI itstracker();
+ */
+}
+
+
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
+
+
Int_t ESDCmpTr::BuildV0Info(Int_t eventNr)
{
//
//
// TPC V0 Info
Double_t x,alpha, param[5],cov[15];
- fRecV0Info->fT1.fESDTrack.GetInnerExternalParameters(x,param);
- fRecV0Info->fT1.fESDTrack.GetInnerExternalCovariance(cov);
- alpha = fRecV0Info->fT1.fESDTrack.GetInnerAlpha();
- AliExternalTrackParam paramP(x,alpha,param,cov);
- //
- fRecV0Info->fT2.fESDTrack.GetInnerExternalParameters(x,param);
- fRecV0Info->fT2.fESDTrack.GetInnerExternalCovariance(cov);
- alpha = fRecV0Info->fT2.fESDTrack.GetInnerAlpha();
- AliExternalTrackParam paramM(x,alpha,param,cov);
- //
- fRecV0Info->fV0tpc.SetM(paramM);
- fRecV0Info->fV0tpc.SetP(paramP);
- Double_t pid1[5],pid2[5];
- fRecV0Info->fT1.fESDTrack.GetESDpid(pid1);
- fRecV0Info->fT1.fESDTrack.GetESDpid(pid2);
- //
- fRecV0Info->fV0tpc.UpdatePID(pid1,pid2);
- fRecV0Info->fV0tpc.Update(vertex);
- //
- //
- fRecV0Info->fT1.fESDTrack.GetExternalParameters(x,param);
- fRecV0Info->fT1.fESDTrack.GetExternalCovariance(cov);
- alpha = fRecV0Info->fT1.fESDTrack.GetAlpha();
- new (¶mP) AliExternalTrackParam(x,alpha,param,cov);
- //
- fRecV0Info->fT2.fESDTrack.GetExternalParameters(x,param);
- fRecV0Info->fT2.fESDTrack.GetExternalCovariance(cov);
- alpha = fRecV0Info->fT2.fESDTrack.GetAlpha();
- new (¶mM) AliExternalTrackParam(x,alpha,param,cov);
- //
- fRecV0Info->fV0its.SetM(paramM);
- fRecV0Info->fV0its.SetP(paramP);
- fRecV0Info->fV0its.UpdatePID(pid1,pid2);
- fRecV0Info->fV0its.Update(vertex);
-
+ if ( fRecV0Info->fT1.fESDTrack.GetInnerParam() && fRecV0Info->fT2.fESDTrack.GetInnerParam()){
+ fRecV0Info->fT1.fESDTrack.GetInnerExternalParameters(alpha,x,param);
+ fRecV0Info->fT1.fESDTrack.GetInnerExternalCovariance(cov);
+ AliExternalTrackParam paramP(x,alpha,param,cov);
+ //
+ fRecV0Info->fT2.fESDTrack.GetInnerExternalParameters(alpha,x,param);
+ fRecV0Info->fT2.fESDTrack.GetInnerExternalCovariance(cov);
+ AliExternalTrackParam paramM(x,alpha,param,cov);
+ //
+ fRecV0Info->fV0tpc.SetM(paramM);
+ fRecV0Info->fV0tpc.SetP(paramP);
+ Double_t pid1[5],pid2[5];
+ fRecV0Info->fT1.fESDTrack.GetESDpid(pid1);
+ fRecV0Info->fT1.fESDTrack.GetESDpid(pid2);
+ //
+ fRecV0Info->fV0tpc.UpdatePID(pid1,pid2);
+ fRecV0Info->fV0tpc.Update(vertex);
+
+ //
+ //
+ fRecV0Info->fT1.fESDTrack.GetExternalParameters(x,param);
+ fRecV0Info->fT1.fESDTrack.GetExternalCovariance(cov);
+ alpha = fRecV0Info->fT1.fESDTrack.GetAlpha();
+ new (¶mP) AliExternalTrackParam(x,alpha,param,cov);
+ //
+ fRecV0Info->fT2.fESDTrack.GetExternalParameters(x,param);
+ fRecV0Info->fT2.fESDTrack.GetExternalCovariance(cov);
+ alpha = fRecV0Info->fT2.fESDTrack.GetAlpha();
+ new (¶mM) AliExternalTrackParam(x,alpha,param,cov);
+ //
+ fRecV0Info->fV0its.SetM(paramM);
+ fRecV0Info->fV0its.SetP(paramP);
+ fRecV0Info->fV0its.UpdatePID(pid1,pid2);
+ fRecV0Info->fV0its.Update(vertex);
+ }
}
if (TMath::Abs(fGenV0Info->fMCm.fPdg)==11 &&TMath::Abs(fGenV0Info->fMCd.fPdg)==11){
if (fRecV0Info->fDist2>10){
Int_t label = TMath::Min(fGenV0Info->fMCm.fLabel,fGenV0Info->fMCd.fLabel);
Int_t label2 = TMath::Max(fGenV0Info->fMCm.fLabel,fGenV0Info->fMCd.fLabel);
- AliESDV0MI *v0MI=0;
+ AliESDv0 *v0MI=0;
fRecV0Info->fRecStatus =0;
fRecV0Info->fMultiple = fMultiRecV0[label];
fRecV0Info->fV0Multiple=0;
//
- if (fMultiRecV0[label]>0){
+ if (fMultiRecV0[label]>0 || fMultiRecV0[label2]>0){
// for (Int_t j=0;j<TMath::Min(fMultiRecV0s[label],100);j++){
- for (Int_t j=TMath::Min(fMultiRecV0[label],20)-1;j>=0;j--){
+ for (Int_t j=TMath::Min(fMultiRecV0[label],Short_t(20))-1;j>=0;j--){
Int_t index = fIndexRecV0[label*20+j];
- AliESDV0MI *v0MI2 = fEvent->GetV0MI(index);
+ if (index<0) continue;
+ AliESDv0 *v0MI2 = fEvent->GetV0(index);
if (TMath::Abs(v0MI2->fLab[0])==label &&TMath::Abs(v0MI2->fLab[1])==label2) {
v0MI =v0MI2;
fRecV0Info->fV0Multiple++;
//
// write fake v0s
- Int_t nV0MIs = fEvent->GetNumberOfV0MIs();
+ Int_t nV0MIs = fEvent->GetNumberOfV0s();
for (Int_t i=0;i<nV0MIs;i++){
if (fSignedV0[i]==0){
- AliESDV0MI *v0MI = fEvent->GetV0MI(i);
+ AliESDv0 *v0MI = fEvent->GetV0(i);
if (!v0MI) continue;
//
fRecV0Info->fV0rec = *v0MI;
fRecV0Info->fT2 = (*fRecInfo2);
fRecV0Info->fRecStatus =-1;
}
+ fRecV0Info->Update(vertex);
fTreeCmpV0->Fill();
}
}
fTreeCmpV0->AutoSave();
- fRecArray->Delete();
printf("Time spended in BuilV0Info Loop\n");
timer.Print();
if (fDebug > 2) cerr<<"end of BuildV0Info Loop"<<endl;