X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=ITS%2FAliITSPlaneEffSPD.cxx;h=30f6b3a0af4b589e8489bb80fdd9e97c722c5b92;hb=52a03fbef06b8f02ad17dd66b5185213a1cc99ed;hp=1c75f031f0c2cb1936fe2280880e3d14f312eabd;hpb=943fb20f68d979109497911102eb7444cfbeb6d6;p=u%2Fmrichter%2FAliRoot.git diff --git a/ITS/AliITSPlaneEffSPD.cxx b/ITS/AliITSPlaneEffSPD.cxx index 1c75f031f0c..30f6b3a0af4 100644 --- a/ITS/AliITSPlaneEffSPD.cxx +++ b/ITS/AliITSPlaneEffSPD.cxx @@ -57,8 +57,14 @@ AliITSPlaneEffSPD::AliITSPlaneEffSPD(): fHisTrackErrX(0), fHisTrackErrZ(0), fHisClusErrX(0), - fHisClusErrZ(0){ - for (UInt_t i=0; iCopy(*fHisTrackErrZ[i]); s.fHisClusErrX[i]->Copy(*fHisClusErrX[i]); s.fHisClusErrZ[i]->Copy(*fHisClusErrZ[i]); + for(Int_t phas=0; phasCopy(*fHisTrackXFOtrue[i][phas]); + s.fHisTrackZFOtrue[i][phas]->Copy(*fHisTrackXFOtrue[i][phas]); + s.fHisTrackXFOfalse[i][phas]->Copy(*fHisTrackXFOtrue[i][phas]); + s.fHisTrackZFOfalse[i][phas]->Copy(*fHisTrackXFOtrue[i][phas]); + s.fHisTrackXZFOtrue[i][phas]->Copy(*fHisTrackXFOtrue[i][phas]); + s.fHisTrackXZFOfalse[i][phas]->Copy(*fHisTrackXFOtrue[i][phas]); + } } } } @@ -143,7 +163,7 @@ AliITSPlaneEffSPD& AliITSPlaneEffSPD::operator+=(const AliITSPlaneEffSPD &add){ // none. // Return: // none - for (UInt_t i=0; iAdd(add.fHisTrackErrZ[i]); fHisClusErrX[i]->Add(add.fHisClusErrX[i]); fHisClusErrZ[i]->Add(add.fHisClusErrZ[i]); + for(Int_t phas=0; phasAdd(add.fHisTrackXFOtrue[i][phas]); + fHisTrackZFOtrue[i][phas]->Add(add.fHisTrackXFOtrue[i][phas]); + fHisTrackXFOfalse[i][phas]->Add(add.fHisTrackXFOtrue[i][phas]); + fHisTrackZFOfalse[i][phas]->Add(add.fHisTrackXFOtrue[i][phas]); + fHisTrackXZFOtrue[i][phas]->Add(add.fHisTrackXFOtrue[i][phas]); + fHisTrackXZFOfalse[i][phas]->Add(add.fHisTrackXFOtrue[i][phas]); + } } } return *this; @@ -185,6 +213,8 @@ AliITSPlaneEffSPD& AliITSPlaneEffSPD::operator=(const // Return: if(this==&s) return *this; + this->~AliITSPlaneEffSPD(); + new(this) AliITSPlaneEffSPD(); s.Copy(*this); return *this; } @@ -193,7 +223,7 @@ void AliITSPlaneEffSPD::Copy(TObject &obj) const { // protected method. copy this to obj AliITSPlaneEff::Copy(obj); AliITSPlaneEffSPD& target = (AliITSPlaneEffSPD &) obj; - for(Int_t i=0;i Expected efficiency (e.g. those from actual estimate) // RelErr -> tollerance [0,1] - // im -> module number [0,249] + // im -> module number [0,239] // ic -> chip number [0,4] // Outputs: none // Return: the estimated n. of tracks @@ -277,53 +328,91 @@ else { } } //_________________________________________________________________________ -Double_t AliITSPlaneEffSPD::PlaneEff(const UInt_t im,const UInt_t ic) const { +Double_t AliITSPlaneEffSPD::PlaneEff(const UInt_t im,const UInt_t ic, const Bool_t fo, const UInt_t bcm4) const { // Compute the efficiency for a basic block, // Inputs: -// im -> module number [0,249] +// im -> module number [0,239] // ic -> chip number [0,4] +// fo -> boolean, true in case of Fast Or studies +// bcm4 -> for Fast Or: bunch crossing % 4 if (im>=kNModule || ic>=kNChip) {AliError("PlaneEff(Uint_t,Uint_t): you asked for a non existing chip"); return -1.;} -UInt_t key=GetKey(im,ic); +if(fo && bcm4>=kNClockPhase) + {AliError("PlaneEff(Uint_t,Uint_t): you asked for Fast Or in a wrong phase"); return -1.;} Int_t nf=-1; Int_t nt=-1; -if(key module number [0,249] + // im -> module number [0,239] // ic -> chip number [0,4] +// fo -> boolean, true in case of Fast Or studies +// bcm4 -> for Fast Or: bunch crossing % 4 if (im>=kNModule || ic>=kNChip) {AliError("ErrPlaneEff(Uint_t,Uint_t): you asked for a non existing chip"); return -1.;} -UInt_t key=GetKey(im,ic); +if(fo && bcm4>=kNClockPhase) + {AliError("PlaneEff(Uint_t,Uint_t): you asked for Fast Or in a wrong phase"); return -1.;} Int_t nf=-1; Int_t nt=-1; -if(key=kNModule || ic>=kNChip) {AliError("UpDatePlaneEff: you asked for a non existing chip"); return kFALSE;} +if(fo && bcm4>=kNClockPhase) + {AliError("UpDatePlaneEff: you asked for Fast Or in a wrong phase"); return kFALSE;} +if (!fo) { UInt_t key=GetKey(im,ic); if(key=kNCol*kNChip) return col/kNCol; } //__________________________________________________________________________ -UInt_t AliITSPlaneEffSPD::GetKey(const UInt_t mod, const UInt_t chip) const { +UInt_t AliITSPlaneEffSPD::GetKey(const UInt_t mod, const UInt_t chip, const Bool_t FO, const UInt_t BCm4) const { // get key given a basic block +UInt_t key=99999; if(mod>=kNModule || chip>=kNChip) - {AliWarning("GetKey: you asked for a non existing block"); return 99999;} -return mod*kNChip+chip; + {AliDebug(1,"GetKey: you asked for a non existing block"); return 99999;} +key = mod*kNChip+chip; +if(FO) { + if(BCm4>= kNClockPhase) {AliDebug(1,"GetKey: you have asked Fast OR and a non exisiting BC modulo 4"); return 99999;} + key += kNModule*kNChip*(BCm4+1); +} +return key; +} +//__________________________________________________________________________ +UInt_t AliITSPlaneEffSPD::SwitchChipKeyNumbering(UInt_t key) const { + +// methods to switch from offline chip key numbering +// to online Raw Stream chip numbering and viceversa. +// Used for Fast-Or studies. +// Implemented by valerio.altini@ba.infn.it + +if(key>=kNModule*kNChip*(kNClockPhase+1)) + {AliDebug(1,"SwitchChipKeyNumbering: you asked for a non existing key"); return 99999;} +UInt_t mod=9999,chip=9999,phase=9999; +GetModAndChipFromKey(key,mod,chip); +if(mod=kNModule*kNChip) +if(key>=kNModule*kNChip*(kNClockPhase+1)) {AliError("GetModFromKey: you asked for a non existing key"); return 9999;} -return key/kNChip; +return (key%(kNModule*kNChip))/kNChip; } //__________________________________________________________________________ UInt_t AliITSPlaneEffSPD::GetChipFromKey(const UInt_t key) const { // retrieves chip from key -if(key>=kNModule*kNChip) +if(key>=kNModule*kNChip*(kNClockPhase+1)) {AliError("GetChipFromKey: you asked for a non existing key"); return 999;} -return (key%(kNModule*kNChip))%kNChip; +return ((key%(kNModule*kNChip))%(kNModule*kNChip))%kNChip; +} +//__________________________________________________________________________ +UInt_t AliITSPlaneEffSPD::GetBCm4FromKey(const UInt_t key) const { + // retrieves the "Bunch Crossing modulo 4" (for Fast Or studies) +if(key>=kNModule*kNChip*(kNClockPhase+1)) + {AliError("GetBCm4FromKey: you asked for a non existing key"); return 999;} +if(key=kNModule*kNChip) return kTRUE; +else return kFALSE; } //__________________________________________________________________________ void AliITSPlaneEffSPD::GetModAndChipFromKey(const UInt_t key,UInt_t& mod,UInt_t& chip) const { // get module and chip from a key -if(key>=kNModule*kNChip) +if(key>=kNModule*kNChip*(kNClockPhase+1)) {AliError("GetModAndChipFromKey: you asked for a non existing key"); mod=9999; chip=999; return;} -mod=key/kNChip; -chip=(key%(kNModule*kNChip))%kNChip; +mod=GetModFromKey(key); +chip=GetChipFromKey(key); return; } //____________________________________________________________________________ @@ -426,6 +554,19 @@ if(cdbSPDDead) { AliError("GetDeadAndNoisyInChip: did not find Calib/SPDDead."); return; } +// retrieve map of sparse dead Pixel +AliCDBEntry *cdbSPDSparseDead = man->Get("ITS/Calib/SPDSparseDead", fRunNumber); +TObjArray* spdSparseDead; +if(cdbSPDSparseDead) { + spdSparseDead = (TObjArray*)cdbSPDSparseDead->GetObject(); + if(!spdSparseDead) + {AliError("GetDeadAndNoisyInChip: SPDSparseDead not found in CDB"); + return;} +} else { + AliError("GetDeadAndNoisyInChip: did not find Calib/SPDSparseDead."); + return; +} + // retrieve map of noisy Pixel AliCDBEntry *cdbSPDNoisy = man->Get("ITS/Calib/SPDNoisy", fRunNumber); TObjArray* spdNoisy; @@ -447,6 +588,12 @@ UInt_t nrDead = calibSPD->GetNrBad(); for (UInt_t index=0; indexGetBadColAt(index))==chip) nrDeadInChip++; } +// add the number of sparse dead to the previous dead +calibSPD=(AliITSCalibrationSPD*) spdSparseDead->At(mod); +UInt_t nrSparseDead = calibSPD->GetNrBad(); +for (UInt_t index=0; indexGetBadColAt(index))==chip) nrDeadInChip++; +} calibSPD=(AliITSCalibrationSPD*) spdNoisy->At(mod); UInt_t nrNoisy = calibSPD->GetNrBad(); for (UInt_t index=0; index=kNModule*kNChip) - {AliWarning("GetBlockBoundaries: you asked for a non existing key"); return kFALSE;} + {AliDebug(1,"GetBlockBoundaries: you asked for a non existing key"); return kFALSE;} UInt_t chip=GetChipFromKey(key); zmn=GetLocZFromCol(chip*kNCol); zmx=GetLocZFromCol((chip+1)*kNCol); @@ -651,6 +798,12 @@ void AliITSPlaneEffSPD::InitHistos() { TString histnameTrackErrZ="HistTrackErrZ_mod_"; TString histnameClusErrX="HistClusErrX_mod_"; TString histnameClusErrZ="HistClusErrZ_mod_"; + TString histnameTrackXFOtrue="HistTrackXFOok_mod_"; + TString histnameTrackZFOtrue="HistTrackZFOok_mod_"; + TString histnameTrackXFOfalse="HistTrackXFOko_mod_"; + TString histnameTrackZFOfalse="HistTrackZFOko_mod_"; + TString histnameTrackXZFOtrue="HistTrackZvsXFOok_mod_"; + TString histnameTrackXZFOfalse="HistTrackZvsXFOko_mod_"; // TH1::AddDirectory(kFALSE); @@ -671,6 +824,12 @@ void AliITSPlaneEffSPD::InitHistos() { fHisTrackErrZ=new TH1F*[kNHisto]; fHisClusErrX=new TH1F*[kNHisto]; fHisClusErrZ=new TH1F*[kNHisto]; + fHisTrackXFOtrue=new TH1F**[kNHisto]; + fHisTrackZFOtrue=new TH1F**[kNHisto]; + fHisTrackXFOfalse=new TH1F**[kNHisto]; + fHisTrackZFOfalse=new TH1F**[kNHisto]; + fHisTrackXZFOtrue=new TH2F**[kNHisto]; + fHisTrackXZFOfalse=new TH2F**[kNHisto]; for (Int_t nhist=0;nhist cluster size 1 aux=histnameResXclu; aux+=nhist; @@ -781,7 +947,7 @@ void AliITSPlaneEffSPD::InitHistos() { 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]->SetName(aux.Data()); // bin width: 2° fProfResXvsPhiclu[nhist][clu]->SetTitle(aux.Data()); aux=profnameResZvsDipclu; @@ -793,6 +959,61 @@ void AliITSPlaneEffSPD::InitHistos() { fProfResZvsDipclu[nhist][clu]->SetTitle(aux.Data()); } + fHisTrackXFOtrue[nhist]=new TH1F*[kNClockPhase]; + fHisTrackZFOtrue[nhist]=new TH1F*[kNClockPhase]; + fHisTrackXFOfalse[nhist]=new TH1F*[kNClockPhase]; + fHisTrackZFOfalse[nhist]=new TH1F*[kNClockPhase]; + fHisTrackXZFOtrue[nhist]=new TH2F*[kNClockPhase]; + fHisTrackXZFOfalse[nhist]=new TH2F*[kNClockPhase]; + for(Int_t phas=0; phasSetName(aux.Data()); + fHisTrackXFOtrue[nhist][phas]->SetTitle(aux.Data()); + + aux=histnameTrackZFOtrue; + aux+=nhist; + aux+="_BCmod4_"; + aux+=phas; + fHisTrackZFOtrue[nhist][phas]=new TH1F("histname","histname",350,-3.5,3.5); // +- 35. mm; 1 bin=0.2 mm + fHisTrackZFOtrue[nhist][phas]->SetName(aux.Data()); + fHisTrackZFOtrue[nhist][phas]->SetTitle(aux.Data()); + + aux=histnameTrackXFOfalse; + aux+=nhist; + aux+="_BCmod4_"; + aux+=phas; + fHisTrackXFOfalse[nhist][phas]=new TH1F("histname","histname",128,-0.64,0.64); // +- 6.4 mm; 1 bin=0.1 mm + fHisTrackXFOfalse[nhist][phas]->SetName(aux.Data()); + fHisTrackXFOfalse[nhist][phas]->SetTitle(aux.Data()); + + aux=histnameTrackZFOfalse; + aux+=nhist; + aux+="_BCmod4_"; + aux+=phas; + fHisTrackZFOfalse[nhist][phas]=new TH1F("histname","histname",350,-3.5,3.5); // +- 35. mm; 1 bin=0.2 mm + fHisTrackZFOfalse[nhist][phas]->SetName(aux.Data()); + fHisTrackZFOfalse[nhist][phas]->SetTitle(aux.Data()); + + aux=histnameTrackXZFOtrue; + aux+=nhist; + aux+="_BCmod4_"; + aux+=phas; + fHisTrackXZFOtrue[nhist][phas]=new TH2F("histname","histname",22,-3.5,3.5,32,-0.64,0.64); // localZ +- 35. mm; 1 bin=3.2 mm + fHisTrackXZFOtrue[nhist][phas]->SetName(aux.Data()); // localX +- 6.4 mm; 1 bin=0.4 mm + fHisTrackXZFOtrue[nhist][phas]->SetTitle(aux.Data()); + + aux=histnameTrackXZFOfalse; + aux+=nhist; + aux+="_BCmod4_"; + aux+=phas; + fHisTrackXZFOfalse[nhist][phas]=new TH2F("histname","histname",22,-3.5,3.5,32,-0.64,0.64); // localZ +- 35. mm; 1 bin=3.2 mm + fHisTrackXZFOfalse[nhist][phas]->SetName(aux.Data()); // localX +- 6.4 mm; 1 bin=0.4 mm + fHisTrackXZFOfalse[nhist][phas]->SetTitle(aux.Data()); + } } // end loop on module TH1::AddDirectory(kTRUE); @@ -889,11 +1110,90 @@ void AliITSPlaneEffSPD::DeleteHistos() { delete [] fProfResZvsDipclu; fProfResZvsDipclu = 0; } - + if(fHisTrackXFOtrue) { + for (Int_t i=0; i call FillHistosST +// if key >= 1200 --> call FillHistosFO +if(key>=kNModule*kNChip*(kNClockPhase+1)) + {AliError("GetChipFromKey: you asked for a non existing key"); return kFALSE;} +if(key=kNModule*kNChip*(kNClockPhase+1)) + {AliWarning("FillHistos: you asked for a non existing key"); return kFALSE;} + if(key=kNHisto) + {AliWarning("FillHistos: you want to fill a non-existing histos"); return kFALSE;} + if(found) { + fHisTrackXFOtrue[id][BCm4]->Fill(tr[0]); + fHisTrackZFOtrue[id][BCm4]->Fill(tr[1]); + fHisTrackXZFOtrue[id][BCm4]->Fill(tr[1],tr[0]); + } + else { + fHisTrackXFOfalse[id][BCm4]->Fill(tr[0]); + fHisTrackZFOfalse[id][BCm4]->Fill(tr[1]); + fHisTrackXZFOfalse[id][BCm4]->Fill(tr[1],tr[0]); + } +return kTRUE; +} +//__________________________________________________________ +Bool_t AliITSPlaneEffSPD::FillHistosStd(UInt_t key, Bool_t found, Float_t *tr, Float_t *clu, Int_t *csize, Float_t *angtrkmod) { // this method fill the histograms // input: - key: unique key of the basic block @@ -964,6 +1264,12 @@ Bool_t AliITSPlaneEffSPD::WriteHistosToFile(TString filename, Option_t* option) TH1F *histClErrZ,*histClErrX; TProfile *profXvsPhi,*profZvsDip; TProfile *profXvsPhiclu[kNclu],*profZvsDipclu[kNclu]; + TH1F *histXtrkFOtrue[kNClockPhase]; + TH1F *histZtrkFOtrue[kNClockPhase]; + TH1F *histXtrkFOfalse[kNClockPhase]; + TH1F *histZtrkFOfalse[kNClockPhase]; + TH2F *histXZtrkFOtrue[kNClockPhase]; + TH2F *histXZtrkFOfalse[kNClockPhase]; histZ=new TH1F(); histX=new TH1F(); @@ -977,6 +1283,7 @@ Bool_t AliITSPlaneEffSPD::WriteHistosToFile(TString filename, Option_t* option) histXchip[chip]=new TH1F(); histZchip[chip]=new TH1F(); } + histTrErrX=new TH1F(); histTrErrZ=new TH1F(); histClErrX=new TH1F(); @@ -988,6 +1295,14 @@ Bool_t AliITSPlaneEffSPD::WriteHistosToFile(TString filename, Option_t* option) profZvsDipclu[clu]=new TProfile(); } + for(Int_t phas=0; phasBranch("histX","TH1F",&histX,128000,0); SPDTree->Branch("histZ","TH1F",&histZ,128000,0); @@ -1017,6 +1332,20 @@ Bool_t AliITSPlaneEffSPD::WriteHistosToFile(TString filename, Option_t* option) snprintf(branchname,50,"profZvsDipclu_%d",clu+1); SPDTree->Branch(branchname,"TProfile",&profZvsDipclu[clu],128000,0); } + for(Int_t phas=0; phasBranch(branchname,"TH1F",&histXtrkFOtrue[phas],128000,0); + snprintf(branchname,50,"histTrZFOokBCmod4_%d",phas); + SPDTree->Branch(branchname,"TH1F",&histZtrkFOtrue[phas],128000,0); + snprintf(branchname,50,"histTrXFOkoBCmod4_%d",phas); + SPDTree->Branch(branchname,"TH1F",&histXtrkFOfalse[phas],128000,0); + snprintf(branchname,50,"histTrZFOkoBCmod4_%d",phas); + SPDTree->Branch(branchname,"TH1F",&histZtrkFOfalse[phas],128000,0); + snprintf(branchname,50,"histTrXZFOokBCmod4_%d",phas); + SPDTree->Branch(branchname,"TH2F",&histXZtrkFOtrue[phas],128000,0); + snprintf(branchname,50,"histTrXZFOkoBCmod4_%d",phas); + SPDTree->Branch(branchname,"TH2F",&histXZtrkFOfalse[phas],128000,0); + } for(Int_t j=0;jFill(); } @@ -1110,6 +1447,24 @@ Bool_t AliITSPlaneEffSPD::ReadHistosFromFile(TString filename) { profZvsDipclu[clu]= (TBranch*) tree->GetBranch(branchname); } + TBranch *histXtrkFOtrue[kNClockPhase], *histZtrkFOtrue[kNClockPhase], + *histXtrkFOfalse[kNClockPhase], *histZtrkFOfalse[kNClockPhase], + *histXZtrkFOtrue[kNClockPhase], *histXZtrkFOfalse[kNClockPhase]; + for(Int_t phas=0; phasGetBranch(branchname); + snprintf(branchname,50,"histTrZFOokBCmod4_%d",phas); + histZtrkFOtrue[phas] = (TBranch*) tree->GetBranch(branchname); + snprintf(branchname,50,"histTrXFOkoBCmod4_%d",phas); + histXtrkFOfalse[phas] = (TBranch*) tree->GetBranch(branchname); + snprintf(branchname,50,"histTrZFOkoBCmod4_%d",phas); + histZtrkFOfalse[phas] = (TBranch*) tree->GetBranch(branchname); + snprintf(branchname,50,"histTrXZFOokBCmod4_%d",phas); + histXZtrkFOtrue[phas] = (TBranch*) tree->GetBranch(branchname); + snprintf(branchname,50,"histTrXZFOkoBCmod4_%d",phas); + histXZtrkFOfalse[phas] = (TBranch*) tree->GetBranch(branchname); + } + gROOT->cd(); Int_t nevent = (Int_t)histX->GetEntries(); @@ -1226,7 +1581,6 @@ Bool_t AliITSPlaneEffSPD::ReadHistosFromFile(TString filename) { histClErrZ->GetEntry(j); 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;} @@ -1266,6 +1620,63 @@ Bool_t AliITSPlaneEffSPD::ReadHistosFromFile(TString filename) { } } + for(Int_t phas=0; phasGetEntries(); + if(nevent!=kNHisto) + {AliWarning("ReadHistosFromFile: trying to read too many or too few histos!"); return kFALSE;} + histXtrkFOtrue[phas]->SetAddress(&h); + for(Int_t j=0;jGetEntry(j); + fHisTrackXFOtrue[j][phas]->Add(h); + } + + nevent = (Int_t)histZtrkFOtrue[phas]->GetEntries(); + if(nevent!=kNHisto) + {AliWarning("ReadHistosFromFile: trying to read too many or too few histos!"); return kFALSE;} + histZtrkFOtrue[phas]->SetAddress(&h); + for(Int_t j=0;jGetEntry(j); + fHisTrackZFOtrue[j][phas]->Add(h); + } + + nevent = (Int_t)histXtrkFOfalse[phas]->GetEntries(); + if(nevent!=kNHisto) + {AliWarning("ReadHistosFromFile: trying to read too many or too few histos!"); return kFALSE;} + histXtrkFOfalse[phas]->SetAddress(&h); + for(Int_t j=0;jGetEntry(j); + fHisTrackXFOfalse[j][phas]->Add(h); + } + + nevent = (Int_t)histZtrkFOfalse[phas]->GetEntries(); + if(nevent!=kNHisto) + {AliWarning("ReadHistosFromFile: trying to read too many or too few histos!"); return kFALSE;} + histZtrkFOfalse[phas]->SetAddress(&h); + for(Int_t j=0;jGetEntry(j); + fHisTrackZFOfalse[j][phas]->Add(h); + } + + nevent = (Int_t)histXZtrkFOtrue[phas]->GetEntries(); + if(nevent!=kNHisto) + {AliWarning("ReadHistosFromFile: trying to read too many or too few histos!"); return kFALSE;} + histXZtrkFOtrue[phas]->SetAddress(&h2); + for(Int_t j=0;jGetEntry(j); + fHisTrackXZFOtrue[j][phas]->Add(h2); + } + + nevent = (Int_t)histXZtrkFOfalse[phas]->GetEntries(); + if(nevent!=kNHisto) + {AliWarning("ReadHistosFromFile: trying to read too many or too few histos!"); return kFALSE;} + histXZtrkFOfalse[phas]->SetAddress(&h2); + for(Int_t j=0;jGetEntry(j); + fHisTrackXZFOfalse[j][phas]->Add(h2); + } + + } delete h; delete h2;