#include <TParticle.h>
#include <TTree.h>
#include <TClonesArray.h>
+#include <TNtupleD.h>
#include <AliRun.h>
#include <AliSimDigits.h>
<<"Creating histograms..."<<ENDLOG;
fNtuppel = new TNtuple("fNtuppel","Pt resolution","pt_gen:pt_found:nHits");
-
+ fNtuppel->SetDirectory(0);
fPtRes = new TH1F("fPtRes","Relative Pt resolution",30,-10.,10.);
fNGoodTracksPt = new TH1F("fNGoodTracksPt","Good tracks vs pt",nbin,xlow,xup);
fNFoundTracksPt = new TH1F("fNFoundTracksPt","Found tracks vs pt",nbin,xlow,xup);
}
-void AliL3Evaluate::GetGoodParticles(Char_t *path)
+void AliL3Evaluate::GetGoodParticles(Char_t *path,Bool_t sector)
{
//Read the good particles from file. This file should already have been
//generated by macro AliTPCComparison.C.
Char_t filename[1024];
- sprintf(filename,"%s/good_tracks_tpc",path);
+ if(!sector)
+ sprintf(filename,"%s/good_tracks_tpc",path);
+ else
+ sprintf(filename,"%s/good_tracks_tpc_sector",path);//Sectorwise comparison.
ifstream in(filename);
if(!in)
{
while (in>>fGoodTracks[fGoodGen].label>>fGoodTracks[fGoodGen].code>>
fGoodTracks[fGoodGen].px>>fGoodTracks[fGoodGen].py>>fGoodTracks[fGoodGen].pz>>
- fGoodTracks[fGoodGen].x>>fGoodTracks[fGoodGen].y >>fGoodTracks[fGoodGen].z>>fGoodTracks[fGoodGen].nhits)
+ fGoodTracks[fGoodGen].x>>fGoodTracks[fGoodGen].y >>fGoodTracks[fGoodGen].z>>fGoodTracks[fGoodGen].nhits>>fGoodTracks[fGoodGen].sector)
{
fGoodGen++;
break;
}
}
-
}
+
void AliL3Evaluate::FillEffHistos()
{
if(!fGoodTracks)
cerr<<"AliL3Evaluate::FillEffHistos : No good tracks"<<endl;
return;
}
- cout<<"Comparing..."<<endl;
+ cout<<"Comparing "<<fGoodGen<<" good tracks ..."<<endl;
for(Int_t i=0; i<fGoodGen; i++)
{
//cout<<"Checking particle "<<i<<endl;
if(fGoodTracks[i].nhits < fMinHitsFromParticle) continue;
Float_t ptg = TMath::Sqrt(fGoodTracks[i].px*fGoodTracks[i].px + fGoodTracks[i].py*fGoodTracks[i].py);
+ if(ptg < fMinGoodPt) continue;
Float_t pzg=fGoodTracks[i].pz;
Float_t dipangle=TMath::ATan2(pzg,ptg)*180./TMath::Pi();
else {fNFakeTracksPt->Fill(ptg); fNFakeTracksEta->Fill(dipangle);}
Float_t pt=track->GetPt();
fPtRes->Fill((pt-ptg)/ptg*100.);
- //fNtuppel->Fill(ptg,pt,nHits);
+ fNtuppel->Fill(ptg,pt,nHits);
break;
}
+ if(!found)
+ cout<<"Track "<<fGoodTracks[i].label<<" was not found"<<endl;
}
}
}
-TNtuple *AliL3Evaluate::CalculateResiduals()
+TNtupleD *AliL3Evaluate::CalculateResiduals(Char_t *datapath)
{
- TNtuple *ntuppel=new TNtuple("ntuppel","Residuals","residual_trans:residual_long:zHit:pt:dipangle:beta:padrow:nHits");
-
+ TNtupleD *ntuppel=new TNtupleD("ntuppel","Residuals","residual_trans:residual_long:zHit:pt:dipangle:beta:padrow:nHits");
+ ntuppel->SetDirectory(0);
+
for(int f=fMinSlice; f<=fMaxSlice; f++)
{
AliL3FileHandler *tfile = new AliL3FileHandler();
char fname[256];
- sprintf(fname,"tracks_tr_%d_0.raw",f);
+ sprintf(fname,"%s/tracks_tr_%d_0.raw",datapath,f);
if(!tfile->SetBinaryInput(fname)){
LOG(AliL3Log::kError,"AliL3Evaluation::Setup","File Open")
<<"Inputfile "<<fname<<" does not exist"<<ENDLOG;
AliL3Track *track = (AliL3Track*)fTracks->GetCheckedTrack(i);
if(!track) continue;
+ if(track->GetNHits() < fMinPointsOnTrack) continue;
track->CalculateHelix();
UInt_t *hitnum = track->GetHitNumbers();
xyz[1] = points[pos].fY;
xyz[2] = points[pos].fZ;
padrow = points[pos].fPadRow;
- //AliL3Transform::Global2Local(xyz,slice);
+ AliL3Transform::Global2Local(xyz,slice);
Float_t xyz_cross[3];
track->GetCrossingPoint(padrow,xyz_cross);