X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=ITS%2FAliITSPlaneEffSPD.cxx;h=be258afe9da5c6cb53ba432580cd34b7b87888f3;hb=d3a1e53bbc527fdc133a71fd477eee0d0f6ecb2c;hp=2df630ee1a4200965b357af37560395b5b782300;hpb=41d18cd25a1025d8ce1783729228cf80e719616a;p=u%2Fmrichter%2FAliRoot.git diff --git a/ITS/AliITSPlaneEffSPD.cxx b/ITS/AliITSPlaneEffSPD.cxx index 2df630ee1a4..be258afe9da 100644 --- a/ITS/AliITSPlaneEffSPD.cxx +++ b/ITS/AliITSPlaneEffSPD.cxx @@ -50,6 +50,10 @@ AliITSPlaneEffSPD::AliITSPlaneEffSPD(): fHisResZclu(0), fHisResXchip(0), fHisResZchip(0), + fProfResXvsPhi(0), + fProfResZvsDip(0), + fProfResXvsPhiclu(0), + fProfResZvsDipclu(0), fHisTrackErrX(0), fHisTrackErrZ(0), fHisClusErrX(0), @@ -83,6 +87,10 @@ fHisResXclu(0), fHisResZclu(0), fHisResXchip(0), fHisResZchip(0), +fProfResXvsPhi(0), +fProfResZvsDip(0), +fProfResXvsPhiclu(0), +fProfResZvsDipclu(0), fHisTrackErrX(0), fHisTrackErrZ(0), fHisClusErrX(0), @@ -110,11 +118,15 @@ fHisClusErrZ(0) for(Int_t clu=0; clu cluster size 1 s.fHisResXclu[i][clu]->Copy(*fHisResXclu[i][clu]); s.fHisResZclu[i][clu]->Copy(*fHisResZclu[i][clu]); + s.fProfResXvsPhiclu[i][clu]->Copy(*fProfResXvsPhiclu[i][clu]); + s.fProfResZvsDipclu[i][clu]->Copy(*fProfResZvsDipclu[i][clu]); } for(Int_t chip=0; chipCopy(*fHisResXchip[i][chip]); s.fHisResZchip[i][chip]->Copy(*fHisResZchip[i][chip]); } + s.fProfResXvsPhi[i]->Copy(*fProfResXvsPhi[i]); + s.fProfResZvsDip[i]->Copy(*fProfResZvsDip[i]); s.fHisTrackErrX[i]->Copy(*fHisTrackErrX[i]); s.fHisTrackErrZ[i]->Copy(*fHisTrackErrZ[i]); s.fHisClusErrX[i]->Copy(*fHisClusErrX[i]); @@ -144,11 +156,15 @@ AliITSPlaneEffSPD& AliITSPlaneEffSPD::operator+=(const AliITSPlaneEffSPD &add){ for(Int_t clu=0; clu cluster size 1 fHisResXclu[i][clu]->Add(add.fHisResXclu[i][clu]); fHisResZclu[i][clu]->Add(add.fHisResZclu[i][clu]); + fProfResXvsPhiclu[i][clu]->Add(add.fProfResXvsPhiclu[i][clu]); + fProfResZvsDipclu[i][clu]->Add(add.fProfResZvsDipclu[i][clu]); } for(Int_t chip=0; chipAdd(add.fHisResXchip[i][chip]); fHisResZchip[i][chip]->Add(add.fHisResZchip[i][chip]); } + fProfResXvsPhi[i]->Add(add.fProfResXvsPhi[i]); + fProfResZvsDip[i]->Add(add.fProfResZvsDip[i]); fHisTrackErrX[i]->Add(add.fHisTrackErrX[i]); fHisTrackErrZ[i]->Add(add.fHisTrackErrZ[i]); fHisClusErrX[i]->Add(add.fHisClusErrX[i]); @@ -197,6 +213,10 @@ void AliITSPlaneEffSPD::CopyHistos(AliITSPlaneEffSPD &target) const { target.fHisResZclu=new TH1F**[kNHisto]; target.fHisResXchip=new TH1F**[kNHisto]; target.fHisResZchip=new TH1F**[kNHisto]; + target.fProfResXvsPhi=new TProfile*[kNHisto]; + target.fProfResZvsDip=new TProfile*[kNHisto]; + target.fProfResXvsPhiclu=new TProfile**[kNHisto]; + target.fProfResZvsDipclu=new TProfile**[kNHisto]; target.fHisTrackErrX=new TH1F*[kNHisto]; target.fHisTrackErrZ=new TH1F*[kNHisto]; target.fHisClusErrX=new TH1F*[kNHisto]; @@ -208,9 +228,13 @@ void AliITSPlaneEffSPD::CopyHistos(AliITSPlaneEffSPD &target) const { target.fHisClusterSize[i] = new TH2I(*fHisClusterSize[i]); target.fHisResXclu[i]=new TH1F*[kNclu]; target.fHisResZclu[i]=new TH1F*[kNclu]; + target.fProfResXvsPhiclu[i]=new TProfile*[kNclu]; + target.fProfResZvsDipclu[i]=new TProfile*[kNclu]; for(Int_t clu=0; clu cluster size 1 target.fHisResXclu[i][clu] = new TH1F(*fHisResXclu[i][clu]); target.fHisResZclu[i][clu] = new TH1F(*fHisResZclu[i][clu]); + target.fProfResXvsPhiclu[i][clu] = new TProfile(*fProfResXvsPhiclu[i][clu]); + target.fProfResZvsDipclu[i][clu] = new TProfile(*fProfResZvsDipclu[i][clu]); } target.fHisResXchip[i]=new TH1F*[kNChip]; target.fHisResZchip[i]=new TH1F*[kNChip]; @@ -218,6 +242,8 @@ void AliITSPlaneEffSPD::CopyHistos(AliITSPlaneEffSPD &target) const { target.fHisResXchip[i][chip] = new TH1F(*fHisResXchip[i][chip]); target.fHisResZchip[i][chip] = new TH1F(*fHisResZchip[i][chip]); } + target.fProfResXvsPhi[i] = new TProfile(*fProfResXvsPhi[i]); + target.fProfResZvsDip[i] = new TProfile(*fProfResZvsDip[i]); target.fHisTrackErrX[i] = new TH1F(*fHisTrackErrX[i]); target.fHisTrackErrZ[i] = new TH1F(*fHisTrackErrZ[i]); target.fHisClusErrX[i] = new TH1F(*fHisClusErrX[i]); @@ -260,7 +286,11 @@ Int_t AliITSPlaneEffSPD::GetMissingTracksForGivenEff(Double_t eff, Double_t RelE if (im>=kNModule || ic>=kNChip) {AliError("GetMissingTracksForGivenEff: you asked for a non existing chip"); return -1;} -else return GetNTracksForGivenEff(eff,RelErr)-fTried[GetKey(im,ic)]; +else { + UInt_t key=GetKey(im,ic); + if(key chip number [0,4] if (im>=kNModule || ic>=kNChip) {AliError("PlaneEff(Uint_t,Uint_t): you asked for a non existing chip"); return -1.;} - Int_t nf=fFound[GetKey(im,ic)]; - Int_t nt=fTried[GetKey(im,ic)]; +UInt_t key=GetKey(im,ic); +Int_t nf=-1; +Int_t nt=-1; +if(key chip number [0,4] if (im>=kNModule || ic>=kNChip) {AliError("ErrPlaneEff(Uint_t,Uint_t): you asked for a non existing chip"); return -1.;} -Int_t nf=fFound[GetKey(im,ic)]; -Int_t nt=fTried[GetKey(im,ic)]; +UInt_t key=GetKey(im,ic); +Int_t nf=-1; +Int_t nt=-1; +if(key=kNModule || ic>=kNChip) {AliError("UpDatePlaneEff: you asked for a non existing chip"); return kFALSE;} - fTried[GetKey(im,ic)]++; - if(Kfound) fFound[GetKey(im,ic)]++; - return kTRUE; + UInt_t key=GetKey(im,ic); + if(keySetName(aux.Data()); fHisResX[nhist]->SetTitle(aux.Data()); aux=histnameResZ; aux+=nhist; - fHisResZ[nhist]=new TH1F("histname","histname",800,-0.32,0.32); // +-3200 micron; 1 bin=8 micron + fHisResZ[nhist]=new TH1F("histname","histname",1200,-0.48,0.48); // +-4800 micron; 1 bin=8 micron fHisResZ[nhist]->SetName(aux.Data()); fHisResZ[nhist]->SetTitle(aux.Data()); aux=histnameResXZ; aux+=nhist; - fHisResXZ[nhist]=new TH2F("histname","histname",40,-0.08,0.08,40,-0.16,0.16); // binning: + fHisResXZ[nhist]=new TH2F("histname","histname",80,-0.16,0.16,80,-0.32,0.32); // binning: fHisResXZ[nhist]->SetName(aux.Data()); // 40 micron in x; fHisResXZ[nhist]->SetTitle(aux.Data()); // 80 micron in z; @@ -665,7 +720,7 @@ void AliITSPlaneEffSPD::InitHistos() { aux+=nhist; aux+="_clu_"; aux+=clu+1; // clu=0 --> cluster size 1 - fHisResXclu[nhist][clu]=new TH1F("histname","histname",800,-0.16,0.16); // +- 1600 micron; 1 bin=4 micron + fHisResXclu[nhist][clu]=new TH1F("histname","histname",1600,-0.32,0.32); // +- 3200 micron; 1 bin=4 micron fHisResXclu[nhist][clu]->SetName(aux.Data()); fHisResXclu[nhist][clu]->SetTitle(aux.Data()); @@ -673,7 +728,7 @@ void AliITSPlaneEffSPD::InitHistos() { aux+=nhist; aux+="_clu_"; aux+=clu+1; // clu=0 --> cluster size 1 - fHisResZclu[nhist][clu]=new TH1F("histname","histname",800,-0.32,0.32); // +-3200 micron; 1 bin=8 micron + fHisResZclu[nhist][clu]=new TH1F("histname","histname",1200,-0.48,0.48); // +-4800 micron; 1 bin=8 micron fHisResZclu[nhist][clu]->SetName(aux.Data()); fHisResZclu[nhist][clu]->SetTitle(aux.Data()); } @@ -685,7 +740,7 @@ void AliITSPlaneEffSPD::InitHistos() { aux+=nhist; aux+="_chip_"; aux+=chip; - fHisResXchip[nhist][chip]=new TH1F("histname","histname",200,-0.08,0.08); // +- 800 micron; 1 bin=8 micron + fHisResXchip[nhist][chip]=new TH1F("histname","histname",800,-0.32,0.32); // +- 3200 micron; 1 bin=8 micron fHisResXchip[nhist][chip]->SetName(aux.Data()); fHisResXchip[nhist][chip]->SetTitle(aux.Data()); @@ -693,14 +748,14 @@ void AliITSPlaneEffSPD::InitHistos() { aux+=nhist; aux+="_chip_"; aux+=chip; - fHisResZchip[nhist][chip]=new TH1F("histname","histname",200,-0.32,0.32); // +-3200 micron; 1 bin=32 micron + fHisResZchip[nhist][chip]=new TH1F("histname","histname",300,-0.48,0.48); // +-4800 micron; 1 bin=32 micron fHisResZchip[nhist][chip]->SetName(aux.Data()); fHisResZchip[nhist][chip]->SetTitle(aux.Data()); } aux=histnameTrackErrX; aux+=nhist; - fHisTrackErrX[nhist]=new TH1F("histname","histname",200,0.,0.16); // 0-1600 micron; 1 bin=8 micron + fHisTrackErrX[nhist]=new TH1F("histname","histname",400,0.,0.32); // 0-3200 micron; 1 bin=8 micron fHisTrackErrX[nhist]->SetName(aux.Data()); fHisTrackErrX[nhist]->SetTitle(aux.Data()); @@ -712,17 +767,52 @@ void AliITSPlaneEffSPD::InitHistos() { aux=histnameClusErrX; aux+=nhist; - fHisClusErrX[nhist]=new TH1F("histname","histname",200,0.,0.04); // 0-400 micron; 1 bin=2 micron + fHisClusErrX[nhist]=new TH1F("histname","histname",400,0.,0.08); // 0-800 micron; 1 bin=2 micron fHisClusErrX[nhist]->SetName(aux.Data()); fHisClusErrX[nhist]->SetTitle(aux.Data()); aux=histnameClusErrZ; aux+=nhist; - fHisClusErrZ[nhist]=new TH1F("histname","histname",200,0.,0.16); // 0-1600 micron; 1 bin=8 micron + fHisClusErrZ[nhist]=new TH1F("histname","histname",400,0.,0.32); // 0-3200 micron; 1 bin=8 micron fHisClusErrZ[nhist]->SetName(aux.Data()); fHisClusErrZ[nhist]->SetTitle(aux.Data()); - } + aux=profnameResXvsPhi; + aux+=nhist; + fProfResXvsPhi[nhist]=new TProfile("histname","histname",40,-40.,40.0); // binning: range: -40°- 40° + fProfResXvsPhi[nhist]->SetName(aux.Data()); // bin width: 2° + fProfResXvsPhi[nhist]->SetTitle(aux.Data()); + + aux=profnameResZvsDip; + aux+=nhist; + fProfResZvsDip[nhist]=new TProfile("histname","histname",48,-72.,72.0); // binning: range: -70°-4° + fProfResZvsDip[nhist]->SetName(aux.Data()); // bin width: 3° + fProfResZvsDip[nhist]->SetTitle(aux.Data()); + + fProfResXvsPhiclu[nhist]=new TProfile*[kNclu]; + fProfResZvsDipclu[nhist]=new TProfile*[kNclu]; + for(Int_t clu=0; clu cluster size 1 + aux=profnameResXvsPhiclu; + aux+=nhist; + aux+="_clu_"; + aux+=clu+1; // clu=0 --> cluster size 1 + fProfResXvsPhiclu[nhist][clu]=new TProfile("histname","histname",40,-40.,40.0); // binning: range: -40°- 40 + fProfResXvsPhiclu[nhist][clu]->SetName(aux.Data()); // bin width: 2° + fProfResXvsPhiclu[nhist][clu]->SetTitle(aux.Data()); + + aux=profnameResZvsDipclu; + aux+=nhist; + aux+="_clu_"; + aux+=clu+1; // clu=0 --> cluster size 1 + fProfResZvsDipclu[nhist][clu]= new TProfile("histname","histname",48,-72.,72.0); // binning: range: -70°-7° + fProfResZvsDipclu[nhist][clu]->SetName(aux.Data()); // bin width: 3° + fProfResZvsDipclu[nhist][clu]->SetTitle(aux.Data()); + } + + } // end loop on module + + TH1::AddDirectory(kTRUE); + return; } //__________________________________________________________ @@ -791,13 +881,36 @@ void AliITSPlaneEffSPD::DeleteHistos() { for (Int_t i=0; i0 && csize[1]<=kNclu) fHisResZclu[id][csize[1]-1]->Fill(resz); fHisResXchip[id][chip]->Fill(resx); fHisResZchip[id][chip]->Fill(resz); + fProfResXvsPhi[id]->Fill(angtrkmod[0],resx); + fProfResZvsDip[id]->Fill(angtrkmod[1],resz); + if(csize[0]>0 && csize[0]<=kNclu) fProfResXvsPhiclu[id][csize[0]-1]->Fill(angtrkmod[0],resx); + if(csize[1]>0 && csize[1]<=kNclu) fProfResZvsDipclu[id][csize[1]-1]->Fill(angtrkmod[1],resz); } fHisTrackErrX[id]->Fill(tr[2]); fHisTrackErrZ[id]->Fill(tr[3]); @@ -843,7 +961,7 @@ Bool_t AliITSPlaneEffSPD::WriteHistosToFile(TString filename, Option_t* option) // Saves the histograms into a tree and saves the trees into a file // if (!fHis) return kFALSE; - if (filename.Data()=="") { + if (filename.IsNull() || filename.IsWhitespace()) { AliWarning("WriteHistosToFile: null output filename!"); return kFALSE; } @@ -860,6 +978,8 @@ Bool_t AliITSPlaneEffSPD::WriteHistosToFile(TString filename, Option_t* option) TH1F *histZchip[kNChip]; TH1F *histTrErrZ,*histTrErrX; TH1F *histClErrZ,*histClErrX; + TProfile *profXvsPhi,*profZvsDip; + TProfile *profXvsPhiclu[kNclu],*profZvsDipclu[kNclu]; histZ=new TH1F(); histX=new TH1F(); @@ -877,6 +997,13 @@ Bool_t AliITSPlaneEffSPD::WriteHistosToFile(TString filename, Option_t* option) histTrErrZ=new TH1F(); histClErrX=new TH1F(); histClErrZ=new TH1F(); + profXvsPhi=new TProfile(); + profZvsDip=new TProfile(); + for(Int_t clu=0;cluBranch("histX","TH1F",&histX,128000,0); SPDTree->Branch("histZ","TH1F",&histZ,128000,0); @@ -898,6 +1025,14 @@ Bool_t AliITSPlaneEffSPD::WriteHistosToFile(TString filename, Option_t* option) SPDTree->Branch("histTrErrZ","TH1F",&histTrErrZ,128000,0); SPDTree->Branch("histClErrX","TH1F",&histClErrX,128000,0); SPDTree->Branch("histClErrZ","TH1F",&histClErrZ,128000,0); + SPDTree->Branch("profXvsPhi","TProfile",&profXvsPhi,128000,0); + SPDTree->Branch("profZvsDip","TProfile",&profZvsDip,128000,0); + for(Int_t clu=0;cluBranch(branchname,"TProfile",&profXvsPhiclu[clu],128000,0); + sprintf(branchname,"profZvsDipclu_%d",clu+1); + SPDTree->Branch(branchname,"TProfile",&profZvsDipclu[clu],128000,0); + } for(Int_t j=0;jFill(); } hFile->Write(); @@ -928,7 +1070,7 @@ Bool_t AliITSPlaneEffSPD::ReadHistosFromFile(TString filename) { // Read histograms from an already existing file // if (!fHis) return kFALSE; - if (filename.Data()=="") { + if (filename.IsNull() || filename.IsWhitespace()) { AliWarning("ReadHistosFromFile: incorrect output filename!"); return kFALSE; } @@ -937,6 +1079,7 @@ Bool_t AliITSPlaneEffSPD::ReadHistosFromFile(TString filename) { TH1F *h = 0; TH2F *h2 = 0; TH2I *h2i= 0; + TProfile *p = 0; TFile *file=TFile::Open(filename.Data(),"READONLY"); @@ -972,6 +1115,16 @@ Bool_t AliITSPlaneEffSPD::ReadHistosFromFile(TString filename) { TBranch *histTrErrZ = (TBranch*) tree->GetBranch("histTrErrZ"); TBranch *histClErrX = (TBranch*) tree->GetBranch("histClErrX"); TBranch *histClErrZ = (TBranch*) tree->GetBranch("histClErrZ"); + TBranch *profXvsPhi = (TBranch*) tree->GetBranch("profXvsPhi"); + TBranch *profZvsDip = (TBranch*) tree->GetBranch("profZvsDip"); + + TBranch *profXvsPhiclu[kNclu], *profZvsDipclu[kNclu]; + for(Int_t clu=0; cluGetBranch(branchname); + sprintf(branchname,"profZvsDipclu_%d",clu+1); + profZvsDipclu[clu]= (TBranch*) tree->GetBranch(branchname); + } gROOT->cd(); @@ -1102,12 +1255,58 @@ Bool_t AliITSPlaneEffSPD::ReadHistosFromFile(TString filename) { fHisClusErrZ[j]->Add(h); } + nevent = (Int_t)profXvsPhi->GetEntries(); + if(nevent!=kNHisto) + {AliWarning("ReadHistosFromFile: trying to read too many or too few histos!"); return kFALSE;} + profXvsPhi->SetAddress(&p); + for(Int_t j=0;jGetEntry(j); + fProfResXvsPhi[j]->Add(p); + } + + nevent = (Int_t)profZvsDip->GetEntries(); + if(nevent!=kNHisto) + {AliWarning("ReadHistosFromFile: trying to read too many or too few histos!"); return kFALSE;} + profZvsDip->SetAddress(&p); + for(Int_t j=0;jGetEntry(j); + fProfResZvsDip[j]->Add(p); + } + + for(Int_t clu=0; cluGetEntries(); + if(nevent!=kNHisto) + {AliWarning("ReadHistosFromFile: trying to read too many or too few histos!"); return kFALSE;} + profXvsPhiclu[clu]->SetAddress(&p); + for(Int_t j=0;jGetEntry(j); + fProfResXvsPhiclu[j][clu]->Add(p); + } + + nevent = (Int_t)profZvsDipclu[clu]->GetEntries(); + if(nevent!=kNHisto) + {AliWarning("ReadHistosFromFile: trying to read too many or too few histos!"); return kFALSE;} + profZvsDipclu[clu]->SetAddress(&p); + for(Int_t j=0;jGetEntry(j); + fProfResZvsDipclu[j][clu]->Add(p); + } + } + + delete h; h=0; delete h2; h2=0; delete h2i; h2i=0; + delete p; p=0; if (file) { file->Close(); } return kTRUE; } +