//
// To make laser scan the user interaction neccessary
//
- .x ~/UliStyle.C
+ .x ~/NimStyle.C
gSystem->Load("libANALYSIS");
gSystem->Load("libTPCcalib");
TFile fcalib("CalibObjects.root");
#include "AliTPCcalibDB.h"
#include "AliTPCParam.h"
#include "TTimeStamp.h"
+#include "AliDCSSensorArray.h"
+#include "AliDCSSensor.h"
using namespace std;
AliTPCcalibLaser::AliTPCcalibLaser():
AliTPCcalibBase(),
fESD(0),
- fESDfriend(),
+ fESDfriend(0),
+ fNtracks(0),
fTracksMirror(336),
fTracksEsd(336),
fTracksEsdParam(336),
fDeltaZres2(336), //->2D histo fo residuals
//fDeltaYres3(336), //->2D histo of residuals
//fDeltaZres3(336), //->2D histo fo residuals
- fFitAside(new TVectorD(3)),
- fFitCside(new TVectorD(3)),
- fFitACside(new TVectorD(4)),
+ fFitAside(new TVectorD(5)),
+ fFitCside(new TVectorD(5)),
+ fFitACside(new TVectorD(6)),
fEdgeXcuts(3),
fEdgeYcuts(3),
fNClCuts(5),
AliTPCcalibBase(),
fESD(0),
fESDfriend(0),
+ fNtracks(0),
fTracksMirror(336),
fTracksEsd(336),
fTracksEsdParam(336),
fDeltaZres2(336),
// fDeltaYres3(336),
//fDeltaZres3(336),
- fFitAside(new TVectorD(3)), // drift fit - A side
- fFitCside(new TVectorD(3)), // drift fit - C- side
- fFitACside(new TVectorD(4)), // drift fit - AC- side
+ fFitAside(new TVectorD(5)), // drift fit - A side
+ fFitCside(new TVectorD(5)), // drift fit - C- side
+ fFitACside(new TVectorD(6)), // drift fit - AC- side
fEdgeXcuts(3), // cuts in local x direction; used in the refit of the laser tracks
fEdgeYcuts(3), // cuts in local y direction; used in the refit of the laser tracks
fNClCuts(5), // cuts on the number of clusters per tracklet; used in the refit of the laser tracks
AliTPCcalibBase(calibLaser),
fESD(0),
fESDfriend(0),
+ fNtracks(0),
fTracksMirror(336),
fTracksEsd(336),
fTracksEsdParam(336),
fDeltaZres2(((calibLaser.fDeltaZres))),
// fDeltaYres3(((calibLaser.fDeltaYres))),
//fDeltaZres3(((calibLaser.fDeltaZres))),
- fFitAside(new TVectorD(3)), // drift fit - A side
- fFitCside(new TVectorD(3)), // drift fit - C- side
- fFitACside(new TVectorD(4)), // drift fit - C- side
+ fFitAside(new TVectorD(5)), // drift fit - A side
+ fFitCside(new TVectorD(5)), // drift fit - C- side
+ fFitACside(new TVectorD(6)), // drift fit - C- side
fEdgeXcuts(3), // cuts in local x direction; used in the refit of the laser tracks
fEdgeYcuts(3), // cuts in local y direction; used in the refit of the laser tracks
fNClCuts(5), // cuts on the number of clusters per tracklet; used in the refit of the laser tracks
delete fHisPz2vP2Out; //-> Curv P2outer - parabola
delete fHisPz3vP2IO; //-> Curv P2outerinner - common parabola
}
+ //
+ //
+ //
+ fDeltaZ.SetOwner(); //-> array of histograms of delta z for each track
+ fDeltaP3.SetOwner(); //-> array of histograms of P3 for each track
+ fDeltaP4.SetOwner(); //-> array of histograms of P4 for each track
+ fDeltaPhi.SetOwner(); //-> array of histograms of delta z for each track
+ fDeltaPhiP.SetOwner(); //-> array of histograms of delta z for each track
+ fSignals.SetOwner(); //->Array of dedx signals
+
+ fDeltaZ.Delete(); //-> array of histograms of delta z for each track
+ fDeltaP3.Delete(); //-> array of histograms of P3 for each track
+ fDeltaP4.Delete(); //-> array of histograms of P4 for each track
+ fDeltaPhi.Delete(); //-> array of histograms of delta z for each track
+ fDeltaPhiP.Delete(); //-> array of histograms of delta z for each track
+ fSignals.Delete(); //->Array of dedx signals
+
+ fDeltaYres.SetOwner();
+ fDeltaYres.Delete();
+ fDeltaZres.SetOwner();
+ fDeltaZres.Delete();
+ fDeltaYres2.SetOwner();
+ fDeltaYres2.Delete();
+ fDeltaZres2.SetOwner();
+ fDeltaZres2.Delete();
+
+
}
fClusterCounter[id]=0;
fClusterSatur[id]=0;
}
- static Bool_t init=kFALSE;
- if (!init){
- init = kTRUE; // way around for PROOF - to be investigated
- MakeFitHistos();
- }
//
Int_t n=fESD->GetNumberOfTracks();
Int_t counter=0;
for (Int_t i=0;i<n;++i) {
AliESDfriendTrack *friendTrack=fESDfriend->GetTrack(i);
+ if (!friendTrack) continue;
AliESDtrack *track=fESD->GetTrack(i);
TObject *calibObject=0;
AliTPCseed *seed=0;
for (Int_t j=0;(calibObject=friendTrack->GetCalibObject(j));++j)
if ((seed=dynamic_cast<AliTPCseed*>(calibObject)))
break;
- if (track&&seed) {
+ if (track&&seed &&TMath::Abs(track->Pt()) >1 ) {
+ //filter CE tracks
Int_t id = FindMirror(track,seed);
if (id>0) counter++;
}
//
- }
+ }
+ fNtracks=counter;
if (counter<kMinTracks) return;
FitDriftV();
if (!fFullCalib) return;
+ static Bool_t init=kFALSE;
+ if (!init){
+ init = kTRUE; // way around for PROOF - to be investigated
+ MakeFitHistos();
+ }
//
for (Int_t id=0; id<336; id++){
//
fdriftA.GetParameters(fitA);
npointsA= fdriftA.GetNpoints();
chi2A = fdriftA.GetChisquare()/fdriftA.GetNpoints();
- if (chi2A<kChi2Cut ||(*fFitAside)[0]==0 ) (*fFitAside) = fitA;
+ if (chi2A<kChi2Cut ||(*fFitAside)[0]==0 ) {
+ if (fFitAside->GetNoElements()<5) fFitAside->ResizeTo(5);
+ (*fFitAside)[0] = fitA[0];
+ (*fFitAside)[1] = fitA[1];
+ (*fFitAside)[2] = fitA[2];
+ (*fFitAside)[3] = fdriftA.GetNpoints();
+ (*fFitAside)[4] = chi2A;
+ }
}
if (fdriftC.GetNpoints()>10){
fdriftC.Eval();
fdriftC.GetParameters(fitC);
npointsC= fdriftC.GetNpoints();
chi2C = fdriftC.GetChisquare()/fdriftC.GetNpoints();
- if (chi2C<kChi2Cut||(*fFitCside)[0]==0) (*fFitCside) = fitC;
+ if (chi2C<kChi2Cut||(*fFitCside)[0]==0) {
+ if (fFitCside->GetNoElements()<5) fFitCside->ResizeTo(5);
+ (*fFitCside)[0] = fitC[0];
+ (*fFitCside)[1] = fitC[1];
+ (*fFitCside)[2] = fitC[2];
+ (*fFitCside)[3] = fdriftC.GetNpoints();
+ (*fFitCside)[4] = chi2C;
+ }
}
if (fdriftAC.GetNpoints()>10&&fdriftC.GetNpoints()>10&&fdriftA.GetNpoints()>10){
Double_t ptrelative1 = AliTPCcalibDB::GetPTRelative(tstamp,fRun,1);
Double_t temp0 = AliTPCcalibDB::GetTemperature(tstamp,fRun,0);
Double_t temp1 = AliTPCcalibDB::GetTemperature(tstamp,fRun,1);
+ TVectorD vecGoofie(20);
+ AliDCSSensorArray* goofieArray = AliTPCcalibDB::Instance()->GetGoofieSensors(fRun);
+ if (goofieArray)
+ for (Int_t isensor=0; isensor<goofieArray->NumSensors();isensor++){
+ AliDCSSensor *gsensor = goofieArray->GetSensor(isensor);
+ if (gsensor) vecGoofie[isensor]=gsensor->GetValue(tstamp);
+ }
if (cstream){
(*cstream)<<"driftv"<<
"pt1="<<ptrelative1<<
"temp0="<<temp0<<
"temp1="<<temp1<<
+ "vecGoofie.="<<&vecGoofie<<
//
//
"iter="<<iter<<
//
Float_t radius=TMath::Abs(ltrp->GetX());
AliTracker::PropagateTrackTo(¶m,radius,0.10566,0.01,kTRUE);
+ param.Rotate(ltrp->GetAlpha());
//
if (!fTracksMirror.At(id)) fTracksMirror.AddAt(ltrp,id);
Bool_t accept=kTRUE;
//=============================================//
// Linear Fitters for the Different Approaches //
//=============================================//
- //linear fit model in y and z; inner - outer sector
+ //linear fit model in y and z; inner - outer sector, combined with offset
static TLinearFitter fy1I(2,"hyp1");
static TLinearFitter fy1O(2,"hyp1");
static TLinearFitter fz1I(2,"hyp1");
static TLinearFitter fz1O(2,"hyp1");
+ static TLinearFitter fy1IO(3,"hyp2");
+ static TLinearFitter fz1IO(3,"hyp2");
//quadratic fit model in y and z; inner - sector
static TLinearFitter fy2I(3,"hyp2");
static TLinearFitter fy2O(3,"hyp2");
TVectorD vecy1resOuter(2),vecz1resOuter(2); //pol1 fit parameters outer
TVectorD vecy2resOuter(3),vecz2resOuter(3); //pol2 fit parameters outer
TVectorD vecy4res(5),vecz4res(5);
+ TVectorD vecy1resIO(3),vecz1resIO(3);
// cluster and track positions for each row - used for residuals
TVectorD vecgX(159); // global X
TVectorD vecgY(159); // global Y
TVectorD vecZkalman(159); // z from kalman fit
TVectorD vecY1(159); // y from pol1 fit per ROC
TVectorD vecZ1(159); // z from pol1 fit per ROC
+ TVectorD vecY1IO(159); // y from pol1 fit per ROC
+ TVectorD vecZ1IO(159); // z from pol1 fit per ROC
TVectorD vecY2(159); // y from pol2 fit per ROC
TVectorD vecZ2(159); // z from pol2 fit per ROC
TVectorD vecY4(159); // y from sector fit
Double_t chi2I1y=0; // chi2 of pol1 fit in y (inner)
Double_t chi2O1z=0; // chi2 of pol1 fit in z (outer)
Double_t chi2O1y=0; // chi2 of pol1 fit in y (outer)
+ Double_t chi2IO1z=0; // chi2 of pol1 fit in z (outer)
+ Double_t chi2IO1y=0; // chi2 of pol1 fit in y (outer)
Double_t chi2I2z=0; // chi2 of pol2 fit in z (inner)
Double_t chi2I2y=0; // chi2 of pol2 fit in y (inner)
Double_t chi2O2z=0; // chi2 of pol2 fit in z (outer)
vecClY[irow] = c->GetY();
vecClZ[irow] = c->GetZ();
//
- Float_t gxyz[3];
- c->GetGlobalXYZ(gxyz);
- vecgX[irow] = gxyz[0];
- vecgY[irow] = gxyz[1];
- vecgZ[irow] = gxyz[2];
+// Float_t gxyz[3];
+// c->GetGlobalXYZ(gxyz);
+// vecgX[irow] = gxyz[0];
+// vecgY[irow] = gxyz[1];
+// vecgZ[irow] = gxyz[2];
//
Double_t x = vecX[irow]-133.4; //reference is between IROC and OROC
Double_t y = vecClY[irow];
//
Double_t x2[2]={x,x*x}; //linear and parabolic parameters
Double_t x4[4]={0,0,0,0}; //hyp4 parameters
+ Double_t xIO[2]={0,x}; //common linear + offset IROC-OROC
if ( roc == innerSector ) {
x4[0]=1; //offset inner - outer sector
x4[1]=x; //slope parameter inner sector
+ xIO[0]=1;
} else {
x4[2]=x; //slope parameter outer sector
}
}
fy4.AddPoint(x4,y);
fz4.AddPoint(x4,z);
+ fy1IO.AddPoint(xIO,y);
+ fz1IO.AddPoint(xIO,z);
}
if (nclI>0) {
msigmaYIn/=nclI;
fz4.GetParameters(vecz4res);
chi2IOz=fz4.GetChisquare()/(fz4.GetNpoints()-5);
}
+ if (fy1IO.GetNpoints()>0) {
+ fy1IO.Eval();
+ fy1IO.GetParameters(vecy1resIO);
+ chi2IO1y=fy1IO.GetChisquare()/(fy1IO.GetNpoints()-3);
+ }
+ if (fz1IO.GetNpoints()>0) {
+ fz1IO.Eval();
+ fz1IO.GetParameters(vecz1resIO);
+ chi2IO1z=fz1IO.GetChisquare()/(fz1IO.GetNpoints()-3);
+ }
}
//clear points
fy4.ClearPoints(); fz4.ClearPoints();
fz1I.ClearPoints(); fz1O.ClearPoints();
fy2I.ClearPoints(); fy2O.ClearPoints();
fz2I.ClearPoints(); fz2O.ClearPoints();
+ fy1IO.ClearPoints(); fz1IO.ClearPoints();
//==============================//
// calculate tracklet positions //
//==============================//
//
Double_t yoffInner=0;
Double_t zoffInner=0;
+ Double_t yoffInner1=0;
+ Double_t zoffInner1=0;
Double_t yslopeInner=0;
Double_t yslopeOuter=0;
Double_t zslopeInner=0;
vecY2[irow]=vecy2resInner[0]+vecy2resInner[1]*xref+vecy2resInner[2]*xref*xref;
vecZ2[irow]=vecz2resInner[0]+vecz2resInner[1]*xref+vecz2resInner[2]*xref*xref;
yoffInner=vecy4res[1];
- zoffInner=vecz4res[1];
+ zoffInner=vecz4res[1];
+ yoffInner1=vecy1resIO[1];
+ zoffInner1=vecz1resIO[1];
yslopeInner=vecy4res[2];
zslopeInner=vecz4res[2];
}
+ vecY1IO[irow]=vecy1resIO[0]+yoffInner1+vecy1resIO[2]*xref;
+ vecZ1IO[irow]=vecz1resIO[0]+zoffInner1+vecz1resIO[2]*xref;
vecY4[irow]=vecy4res[0]+yoffInner+yslopeInner*xref+yslopeOuter*xref+vecy4res[4]*xref*xref;
vecZ4[irow]=vecz4res[0]+zoffInner+zslopeInner*xref+zslopeOuter*xref+vecz4res[4]*xref*xref;
//positions of kalman fits
"dEdx=" << dedx <<
"LTr.=" << ltrp <<
"Tr.=" << extparam <<
- "yPol1In.=" << &vecy1resInner <<
- "zPol1In.=" << &vecz1resInner <<
- "yPol2In.=" << &vecy2resInner <<
+ "yPol1In.=" << &vecy1resInner <<
+ "zPol1In.=" << &vecz1resInner <<
+ "yPol1InOut.="<< &vecy1resIO <<
+ "zPol1InOut.="<< &vecz1resIO <<
+ "yPol2In.=" << &vecy2resInner <<
"zPol2In.=" << &vecz2resInner <<
"yPol1Out.=" << &vecy1resOuter <<
"zPol1Out.=" << &vecz1resOuter <<
"zPol2Out.=" << &vecz2resOuter <<
"yInOut.=" << &vecy4res <<
"zInOut.=" << &vecz4res <<
- "chi2y1In=" << chi2I1y <<
- "chi2z1In=" << chi2I1z <<
- "chi2y1Out=" << chi2O1y <<
+ "chi2y1In=" << chi2I1y <<
+ "chi2z1In=" << chi2I1z <<
+ "chi2y1InOut="<< chi2IO1y <<
+ "chi2z1InOut="<< chi2IO1z <<
+ "chi2y1Out=" << chi2O1y <<
"chi2z1Out=" << chi2O1z <<
"chi2y2In=" << chi2I2y <<
"chi2z2In=" << chi2I2z <<
"TrZpol1.=" << &vecZ1 <<
"TrYpol2.=" << &vecY2 <<
"TrZpol2.=" << &vecZ2 <<
- "TrYInOut.=" << &vecY4 <<
- "TrZInOut.=" << &vecZ4 <<
- "ClY.=" << &vecClY <<
+ "TrYpol1InOut.="<< &vecY1IO <<
+ "TrZpol1InOut.="<< &vecZ1IO <<
+ "TrYInOut.=" << &vecY4 <<
+ "TrZInOut.=" << &vecZ4 <<
+ "ClY.=" << &vecClY <<
"ClZ.=" << &vecClZ <<
"isReject.=" << &isReject<<
"sec.=" << &vecSec <<
"chi2z1In=" << chi2I1z <<
"chi2y1Out=" << chi2O1y <<
"chi2z1Out=" << chi2O1z <<
- "chi2y2In=" << chi2I2y <<
+ "chi2y1InOut="<< chi2IO1y <<
+ "chi2z1InOut="<< chi2IO1z <<
+ "chi2y2In=" << chi2I2y <<
"chi2z2In=" << chi2I2z <<
"chi2y2Out=" << chi2O2y <<
"chi2z2Out=" << chi2O2z <<
"zPol2In.=" << &vecz2resInner <<
"yPol1Out.=" << &vecy1resOuter <<
"zPol1Out.=" << &vecz1resOuter <<
- "yPol2Out.=" << &vecy2resOuter <<
+ "yPol1InOut.="<< &vecy1resIO <<
+ "zPol1InOut.="<< &vecz1resIO <<
+ "yPol2Out.=" << &vecy2resOuter <<
"zPol2Out.=" << &vecz2resOuter <<
"\n";
Float_t rmsphiP = hisphiP->GetRMS();
Float_t meanZ = hisZ->GetMean();
Float_t rmsZ = hisZ->GetRMS();
- hisphi->Fit(&fg,"","",hisphi->GetMean()-4*hisphi->GetRMS(),hisphi->GetMean()+4*hisphi->GetRMS());
+ if (hisphi->GetRMS()>0)
+ hisphi->Fit(&fg,"","",hisphi->GetMean()-4*hisphi->GetRMS(),hisphi->GetMean()+4*hisphi->GetRMS());
Double_t gphi1 = fg.GetParameter(1);
Double_t gphi2 = fg.GetParameter(2);
- hisphiP->Fit(&fg,"","",hisphiP->GetMean()-4*hisphiP->GetRMS(),hisphiP->GetMean()+4*hisphiP->GetRMS());
+ if (hisphiP->GetRMS()>0)
+ hisphiP->Fit(&fg,"","",hisphiP->GetMean()-4*hisphiP->GetRMS(),hisphiP->GetMean()+4*hisphiP->GetRMS());
Double_t gphiP1 = fg.GetParameter(1);
Double_t gphiP2 = fg.GetParameter(2);
//
- hisZ->Fit(&fg,"","",hisZ->GetMean()-4*hisZ->GetRMS(),hisZ->GetMean()+4*hisZ->GetRMS());
+ if (hisZ->GetRMS()>0)
+ hisZ->Fit(&fg,"","",hisZ->GetMean()-4*hisZ->GetRMS()-0.1,hisZ->GetMean()+4*hisZ->GetRMS()+0.1);
Double_t gz1 = fg.GetParameter(1);
Double_t gz2 = fg.GetParameter(2);
//
- hisP3->Fit(&fg,"","",hisP3->GetMean()-4*hisP3->GetRMS(),hisP3->GetMean()+4*hisP3->GetRMS());
+ if (hisP3->GetRMS()>0)
+ hisP3->Fit(&fg,"","",hisP3->GetMean()-4*hisP3->GetRMS(),hisP3->GetMean()+4*hisP3->GetRMS());
Double_t gp31 = fg.GetParameter(1);
Double_t gp32 = fg.GetParameter(2);
//
- hisP4->Fit(&fg,"","",hisP4->GetMean()-4*hisP4->GetRMS(),hisP4->GetMean()+4*hisP4->GetRMS());
+ if (hisP4->GetRMS()>0)
+ hisP4->Fit(&fg,"","",hisP4->GetMean()-4*hisP4->GetRMS(),hisP4->GetMean()+4*hisP4->GetRMS());
Double_t gp41 = fg.GetParameter(1);
Double_t gp42 = fg.GetParameter(2);
//
-void AliTPCcalibLaser::DumpScanInfo(TTree * chain){
+void AliTPCcalibLaser::DumpScanInfo(TTree * chain, const char * cutUser){
//
//
//
Double_t pphi[3];
Double_t pphiP[3];
Double_t pmZ[3];
+
//
for (Int_t id=0; id<336; id++){
// id =205;
- sprintf(cut,"isOK&&fId==%d",id);
+ sprintf(cut,"fId==%d&&%s",id,cutUser);
Int_t entries = chain->Draw("bz",cut,"goff");
if (entries<3) continue;
AliTPCLaserTrack *ltrp = 0;
//
chain->Draw("gphi1",cut,"goff");
memcpy(mphi, chain->GetV1(), entries*sizeof(Double_t));
- chain->Draw("0.05*abs(mphi)+gphi2",cut,"goff");
+ chain->Draw("0.05*abs(mphi)+abs(gphi2)*0.5+0.05",cut,"goff");
memcpy(smphi, chain->GetV1(), entries*sizeof(Double_t));
//
chain->Draw("gphiP1",cut,"goff");
memcpy(mphiP, chain->GetV1(), entries*sizeof(Double_t));
- chain->Draw("0.05*abs(mphiP)+gphiP2",cut,"goff");
+ chain->Draw("0.05*abs(mphiP)+abs(gphiP2)*0.5+0.001",cut,"goff");
memcpy(smphiP, chain->GetV1(), entries*sizeof(Double_t));
//
chain->Draw("gz1",cut,"goff");
memcpy(mZ, chain->GetV1(), entries*sizeof(Double_t));
- chain->Draw("0.01*abs(meanZ)+gz2",cut,"goff");
+ chain->Draw("0.01*abs(meanZ)+abs(gz2)*0.5+0.1",cut,"goff");
memcpy(smZ, chain->GetV1(), entries*sizeof(Double_t));
//
//
// store data
// phi
f->cd("dirphi");
+ Float_t phiB0 =0;
+ Float_t phiPB0=0;
+ Float_t zB0=0;
+ for (Int_t ientry=0; ientry<entries; ientry++){
+ if (TMath::Abs(bz[ientry])<0.05){
+ phiB0 = mphi[ientry];
+ phiPB0 = mphiP[ientry];
+ zB0 = mZ[ientry];
+ }
+ }
TGraphErrors *grphi = new TGraphErrors(entries,bz,mphi,sbz,smphi);
grphi->Draw("a*");
grphi->Fit(&fp);
gPad->SaveAs(Form("pic/z/z_%s.gif",grnamefull));
grmZ->Write();
-
+ //
+ // P4
+ //
for (Int_t ientry=0; ientry<entries; ientry++){
(*pcstream)<<"Mean"<<
"lpx1="<<lpxyz[1]<< // reference y
"lpx2="<<lpxyz[2]<< // refernece z
//values
+ "phiB0="<<phiB0<< // position shift at 0 field
+ "phiPB0="<<phiPB0<< // angular shift at 0 field
+ "zB0="<<zB0<< // z shift for 0 field
+ //
"gphi1="<<mphi[ientry]<< // mean - from gaus fit
"pphi0="<<pphi[0]<< // offset
- "pphi1="<<pphi[1]<< // mean
+ "pphi1="<<pphi[1]<< // slope
"pphi2="<<pphi[2]<< // norm chi2
//
"gphiP1="<<mphiP[ientry]<< // mean - from gaus fit
"pphiP0="<<pphiP[0]<< // offset
- "pphiP1="<<pphiP[1]<< // mean
+ "pphiP1="<<pphiP[1]<< // slope
"pphiP2="<<pphiP[2]<< // norm chi2
//
"gz1="<<mZ[ientry]<<
"pmZ0="<<pmZ[0]<< // offset
- "pmZ1="<<pmZ[1]<< // mean
+ "pmZ1="<<pmZ[1]<< // slope
"pmZ2="<<pmZ[2]<< // norm chi2
"\n";
}
static Int_t counter0=0;
while ((cal = (AliTPCcalibLaser*)iter->Next())) {
if (!cal->InheritsFrom(AliTPCcalibLaser::Class())) {
- Error("Merge","Attempt to add object of class %s to a %s", cal->ClassName(), this->ClassName());
+ // Error("Merge","Attempt to add object of class %s to a %s", cal->ClassName(), this->ClassName());
return -1;
}
printf("Marging number %d\n", counter0);
// merge ProfileY histograms -0
h2m = (TH2F*)cal->fDeltaYres.At(id);
h2 = (TH2F*)fDeltaYres.At(id);
- if (h2m) h2->Add(h2m);
+ if (h2m&&h2) h2->Add(h2m);
//
h2m = (TH2F*)cal->fDeltaZres.At(id);
h2 = (TH2F*)fDeltaZres.At(id);
- if (h2m) h->Add(h2m);
+ if (h2m&&h2) h2->Add(h2m);
// merge ProfileY histograms - 2
h2m = (TH2F*)cal->fDeltaYres2.At(id);
h2 = (TH2F*)fDeltaYres2.At(id);
- if (h2m) h2->Add(h2m);
+ if (h2m&&h2) h2->Add(h2m);
//
h2m = (TH2F*)cal->fDeltaZres2.At(id);
h2 = (TH2F*)fDeltaZres2.At(id);
- if (h2m) h->Add(h2m);
+ if (h2m&&h2) h2->Add(h2m);
// merge ProfileY histograms - 3
//h2m = (TH2F*)cal->fDeltaYres3.At(id);
//h2 = (TH2F*)fDeltaYres3.At(id);