1 #include "AliHBTWeightasCorrFctn.h"
5 ///////////////////////////////////////////////////////
7 // AliHBTWeightasCorrFctn.h //
9 // Class for calculating 3D Weightas correlation //
12 ///////////////////////////////////////////////////////
14 ClassImp(AliHBTWeightasCorrFctn)
16 AliHBTWeightasCorrFctn::AliHBTWeightasCorrFctn(const char* name, const char* title):
17 AliHBTTwoPairFctn1D(name,title),
27 /******************************************************************/
28 AliHBTWeightasCorrFctn::AliHBTWeightasCorrFctn(const char* name, const char* title, Int_t nbins, Float_t maxXval, Float_t minXval):
29 AliHBTTwoPairFctn1D(name,title,nbins,maxXval,minXval),
32 fNum(new TObjArray()),
33 fDen(new TObjArray()),
36 SetParams(nbins,maxXval, minXval);
39 /******************************************************************/
40 AliHBTWeightasCorrFctn::AliHBTWeightasCorrFctn(const AliHBTWeightasCorrFctn& in):
41 AliHBTTwoPairFctn1D(in),
45 fNum((in.fNum)?(TObjArray*)in.fNum->Clone():0x0),
46 fDen((in.fDen)?(TObjArray*)in.fDen->Clone():0x0),
47 fRat((in.fRat)?(TObjArray*)in.fRat->Clone():0x0)
52 /******************************************************************/
54 AliHBTWeightasCorrFctn::~AliHBTWeightasCorrFctn()
64 /******************************************************************/
65 void AliHBTWeightasCorrFctn::Write()
69 // Int_t n=GetNumberOfIntervals();
72 for(i=0;i<fNumberOfIntervals;i++){
73 TH1D *num = ((TH1D*)fNum->At(i));
74 TH1D *den = ((TH1D*)fDen->At(i));
75 TH1D &rat = *((TH1D*)fRat->At(i));
76 scale = Scale(num,den);
77 Info("Write():","Scale in interval %d = %lf",i,scale);
78 rat.Divide(num,den,scale);
88 //-------------------------------------
89 void AliHBTWeightasCorrFctn::ProcessSameEventParticles(AliHBTPair* trackpair, AliHBTPair* partpair)
91 //Fills the numerator using pair from the same event
92 trackpair = CheckPair(trackpair);
93 if(partpair == 0x0) return;
94 if(trackpair == 0x0) return;
96 Double_t weight = 1.0;
98 int n = fNumberOfIntervals;
99 Double_t rplane=0.; //reaction plane angle - 2 B determined
100 Double_t phi=(trackpair->Particle1()->Phi()+trackpair->Particle2()->Phi())/2.-rplane; //deltaphi bo nie mam nic innego pod reka
102 phi=phi*360/(2*TMath::Pi());
103 Double_t q=GetValue(trackpair, partpair);
105 ntv = (int)(phi*n/(360.));
107 TH1D *num = ((TH1D*)fNum->At(ntv));
110 if ( trackpair && partpair)
112 if ( ( trackpair->Particle1()->GetPdgCode() == partpair->Particle1()->GetPdgCode()) &&
113 ( trackpair->Particle2()->GetPdgCode() == partpair->Particle2()->GetPdgCode()) )
115 weight=partpair->GetWeight();
116 // Info("ProcessSameEvent","weight=%lf",weight);
122 /****************************************************************/
123 void AliHBTWeightasCorrFctn::Init()
127 /****************************************************************/
130 void AliHBTWeightasCorrFctn::ProcessDiffEventParticles(AliHBTPair* trackpair, AliHBTPair* partpair)
132 //process particles from different events
133 Double_t rplane=0.; //reaction plane angle - 2 B determined
134 Double_t phi=(trackpair->Particle1()->Phi()+trackpair->Particle2()->Phi())/2.-rplane; //deltaphi bo nie mam nic innego pod reka
135 phi=phi*360/(2*TMath::Pi());
136 trackpair = CheckPair(trackpair);
139 int n = fNumberOfIntervals;
142 ntv = (int)(phi*n/(360.));
144 TH1D &den = *((TH1D*)fDen->At(ntv));
145 if ( trackpair && partpair)
147 Double_t qout=GetValue(trackpair, partpair);
153 /******************************************************************/
156 void AliHBTWeightasCorrFctn::SetParams(Int_t nbins, Float_t maxXval, Float_t minXval)
158 //set histogram parameters
163 TH1* AliHBTWeightasCorrFctn::GetResult()
165 //just for compatibility
166 TH1D *den = ((TH1D*)fDen->UncheckedAt(1));
173 ClassImp(AliHBTQOutWeightasCorrFctn)
175 AliHBTQOutWeightasCorrFctn::AliHBTQOutWeightasCorrFctn(const char* name, const char* title, Int_t nbins, Float_t maxXval, Float_t minXval):
176 AliHBTWeightasCorrFctn(name,title,nbins,maxXval,minXval)
182 void AliHBTQOutWeightasCorrFctn::BuildHistos()
184 //buils histograms (allocates memory etc)
186 int n=GetNumberOfIntervals();
188 int nbins=Getnbins();
190 double max = GetmaxXval();
191 double min = GetminXval();
200 TString nameNum = "WeightNumOut";
201 TString nameDen = "WeightDenOut";
202 TString nameRat = "WeightRatOut";
206 sprintf(buff,"%d",i);
208 nameNum +=TString(buff);
210 nameDen +=TString(buff);
211 nameRat +=TString(buff);
214 num = new TH1D(nameNum.Data(),nameNum.Data(),nbins,min,max);
215 den = new TH1D(nameDen.Data(),nameDen.Data(),nbins,min,max);
216 rat = new TH1D(nameRat.Data(),nameRat.Data(),nbins,min,max);
230 nameNum = TString("WeightNumOut");
231 nameDen = TString("WeightDenOut");
232 nameRat = TString("WeightRatOut");
239 ClassImp(AliHBTQSideWeightasCorrFctn)
241 AliHBTQSideWeightasCorrFctn::AliHBTQSideWeightasCorrFctn(const char* name, const char* title, Int_t nbins, Float_t maxXval, Float_t minXval):
242 AliHBTWeightasCorrFctn(name,title,nbins,maxXval,minXval)
248 void AliHBTQSideWeightasCorrFctn::BuildHistos()
252 int n=GetNumberOfIntervals();
253 int nbins=Getnbins();
255 double max = GetmaxXval();
256 double min = GetminXval();
266 TString nameNum = "WeightNumSide";
267 TString nameDen = "WeightDenSide";
268 TString nameRat = "WeightRatSide";
272 sprintf(buff,"%d",i);
274 nameNum +=TString(buff);
276 nameDen +=TString(buff);
277 nameRat +=TString(buff);
280 num = new TH1D(nameNum.Data(),nameNum.Data(),nbins,min,max);
281 den = new TH1D(nameDen.Data(),nameDen.Data(),nbins,min,max);
282 rat = new TH1D(nameRat.Data(),nameRat.Data(),nbins,min,max);
296 nameNum = TString("WeightNumSide");
297 nameDen = TString("WeightDenSide");
298 nameRat = TString("WeightRatSide");
305 ClassImp(AliHBTQLongWeightasCorrFctn)
307 AliHBTQLongWeightasCorrFctn::AliHBTQLongWeightasCorrFctn(const char* name, const char* title, Int_t nbins, Float_t maxXval, Float_t minXval):
308 AliHBTWeightasCorrFctn(name,title,nbins,maxXval,minXval)
314 void AliHBTQLongWeightasCorrFctn::BuildHistos()
318 int n=GetNumberOfIntervals();
319 int nbins=Getnbins();
321 double max = GetmaxXval();
322 double min = GetminXval();
331 TString nameNum = "WeightNumLong";
332 TString nameDen = "WeightDenLong";
333 TString nameRat = "WeightRatLong";
337 sprintf(buff,"%d",i);
339 nameNum +=TString(buff);
341 nameDen +=TString(buff);
342 nameRat +=TString(buff);
345 num = new TH1D(nameNum.Data(),nameNum.Data(),nbins,min,max);
346 den = new TH1D(nameDen.Data(),nameDen.Data(),nbins,min,max);
347 rat = new TH1D(nameRat.Data(),nameRat.Data(),nbins,min,max);
361 nameNum = TString("WeightNumLong");
362 nameDen = TString("WeightDenLong");
363 nameRat = TString("WeightRatLong");
370 /********************************************************************/
371 ClassImp(AliHBTasWeightQOSLCorrFctn)
372 AliHBTasWeightQOSLCorrFctn::AliHBTasWeightQOSLCorrFctn(const char* name, const char* title):
373 AliHBTTwoPairFctn3D(name,title),
378 // fNumberOfIntervals(1)
385 /******************************************************************/
386 AliHBTasWeightQOSLCorrFctn::AliHBTasWeightQOSLCorrFctn(const char* name, const char* title, Int_t nXbins, Double_t maxXval, Double_t minXval, Int_t nYbins, Double_t maxYval, Double_t minYval,Int_t nZbins, Double_t maxZval, Double_t minZval):
387 AliHBTTwoPairFctn3D(name,title,nXbins,maxXval,minXval,nYbins,maxYval,minYval,nZbins,maxZval,minZval),
390 fNum(new TObjArray()),
391 fDen(new TObjArray()),
392 fRat(new TObjArray())
393 // fNumberOfIntervals(1)
396 SetParams(nXbins,maxXval,minXval,nYbins,maxYval,minYval,nZbins,maxZval,minZval);
399 /******************************************************************/
400 AliHBTasWeightQOSLCorrFctn::AliHBTasWeightQOSLCorrFctn(const AliHBTasWeightQOSLCorrFctn& in):
401 AliHBTTwoPairFctn3D(in),
405 fNum((in.fNum)?(TObjArray*)in.fNum->Clone():0x0),
406 fDen((in.fDen)?(TObjArray*)in.fDen->Clone():0x0),
407 fRat((in.fRat)?(TObjArray*)in.fRat->Clone():0x0)
412 /******************************************************************/
414 AliHBTasWeightQOSLCorrFctn::~AliHBTasWeightQOSLCorrFctn()
424 /******************************************************************/
425 void AliHBTasWeightQOSLCorrFctn::Write()
429 // Int_t n=GetNumberOfIntervals();
432 for(i=0;i<fNumberOfIntervals;i++){
433 Info("Write()","%d",i);
434 TH3D *num = ((TH3D*)fNum->UncheckedAt(i));
435 TH3D *den = ((TH3D*)fDen->UncheckedAt(i));
436 TH3D &rat = *((TH3D*)fRat->At(i));
437 // scale = Scale(num,den);
438 // Info("Write():","Scale in interval %d = %lf",i,scale);
439 rat.Divide(num,den);//,scale);
449 //-------------------------------------
450 void AliHBTasWeightQOSLCorrFctn::ProcessSameEventParticles(AliHBTPair* trackpair, AliHBTPair* partpair)
452 //Fills the numerator using pair from the same event
453 trackpair = CheckPair(trackpair);
454 if(partpair == 0x0) return;
455 if(trackpair == 0x0) return;
457 Double_t weight = 1.0;
459 int n = fNumberOfIntervals;
460 Double_t rplane=0.; //reaction plane angle - 2 B determined
461 Double_t phi=(trackpair->Particle1()->Phi()+trackpair->Particle2()->Phi())/2.-rplane; //deltaphi bo nie mam nic innego pod reka
463 phi=phi*360/(2*TMath::Pi());
464 Double_t out = TMath::Abs(trackpair->GetQOutLCMS());
465 Double_t side = TMath::Abs(trackpair->GetQSideLCMS());
466 Double_t lon = TMath::Abs(trackpair->GetQLongLCMS());
470 ntv = (int)(phi*n/(360.));
472 TH3D *num = ((TH3D*)fNum->At(ntv));
475 if ( trackpair && partpair)
477 if ( ( trackpair->Particle1()->GetPdgCode() == partpair->Particle1()->GetPdgCode()) &&
478 ( trackpair->Particle2()->GetPdgCode() == partpair->Particle2()->GetPdgCode()) )
480 weight=partpair->GetWeight();
481 // Info("ProcessSameEvent","weight=%lf",weight);
483 num->Fill(out,side,lon,weight);
487 /****************************************************************/
488 void AliHBTasWeightQOSLCorrFctn::Init()
492 /****************************************************************/
495 void AliHBTasWeightQOSLCorrFctn::ProcessDiffEventParticles(AliHBTPair* trackpair, AliHBTPair* partpair)
498 Double_t rplane=0.; //reaction plane angle - 2 B determined
499 Double_t phi=(trackpair->Particle1()->Phi()+trackpair->Particle2()->Phi())/2.-rplane; //deltaphi bo nie mam nic innego pod reka
500 phi=phi*360/(2*TMath::Pi());
502 Double_t out = TMath::Abs(trackpair->GetQOutLCMS());
503 Double_t side = TMath::Abs(trackpair->GetQSideLCMS());
504 Double_t lon = TMath::Abs(trackpair->GetQLongLCMS());
506 int n = fNumberOfIntervals;
509 ntv = (int)(phi*n/(360.));
511 TH3D &den = *((TH3D*)fDen->At(ntv));
512 if ( trackpair && partpair)
514 den.Fill(out,side,lon);
519 /******************************************************************/
522 void AliHBTasWeightQOSLCorrFctn::SetParams(Int_t nXbins, Float_t maxXval, Float_t minXval,Int_t nYbins, Float_t maxYval, Float_t minYval,Int_t nZbins, Float_t maxZval, Float_t minZval)
524 //set histogram parametera
538 TH1* AliHBTasWeightQOSLCorrFctn::GetResult()
540 //just for compatibility
541 TH1D *den = ((TH1D*)fDen->UncheckedAt(1));
545 void AliHBTasWeightQOSLCorrFctn::BuildHistos()
549 int n=GetNumberOfIntervals();
550 int nXbins=GetnXbins();
551 double maxX = GetmaxXval();
552 double minX = GetminXval();
554 int nYbins=GetnYbins();
555 double maxY = GetmaxXval();
556 double minY = GetminXval();
557 int nZbins=GetnZbins();
558 double maxZ = GetmaxZval();
559 double minZ = GetminZval();
566 TString nameNum = "OSLWeightNum";
567 TString nameDen = "OSLWeightDen";
568 TString nameRat = "OSLWeightRat";
572 sprintf(buff,"%d",i);
574 nameNum +=TString(buff);
576 nameDen +=TString(buff);
577 nameRat +=TString(buff);
580 num = new TH3D(nameNum.Data(),nameNum.Data(),nXbins,minX,maxX,nYbins,minY,maxY,nZbins,minZ,maxZ);
581 den = new TH3D(nameDen.Data(),nameDen.Data(),nXbins,minX,maxX,nYbins,minY,maxY,nZbins,minZ,maxZ);
582 rat = new TH3D(nameRat.Data(),nameRat.Data(),nXbins,minX,maxX,nYbins,minY,maxY,nZbins,minZ,maxZ);
596 nameNum = TString("OSLWeightNumLong");
597 nameDen = TString("OSLWeightDenLong");
598 nameRat = TString("OSLWeightRatLong");
602 Double_t AliHBTasWeightQOSLCorrFctn::Scale(TH3D *num, TH3D *den)
604 //scale histograms method, the default one didn't like me so I've done this one :)
605 if (AliVAODParticle::GetDebug()>0) Info("Scale","Enetered Scale()");
608 Error("Scale","No numerator");
613 Error("Scale","No denominator");
617 if( (fNBinsToScaleX < 1) || (fNBinsToScaleY < 1) || (fNBinsToScaleZ < 1))
619 Error("Scale","Number of bins for scaling is smaller thnan 1");
622 UInt_t nbinsX = num->GetNbinsX();
623 if (fNBinsToScaleX > nbinsX)
625 Error("Scale","Number of X bins for scaling is bigger thnan number of bins in histograms");
629 UInt_t nbinsY = num->GetNbinsX();
630 if (fNBinsToScaleY > nbinsY)
632 Error("Scale","Number of Y bins for scaling is bigger thnan number of bins in histograms");
636 UInt_t nbinsZ = num->GetNbinsZ();
637 if (fNBinsToScaleZ > nbinsZ)
639 Error("Scale","Number of Z bins for scaling is bigger thnan number of bins in histograms");
643 if (AliVAODParticle::GetDebug()>0) Info("Scale","No errors detected");
644 Int_t offsetX = nbinsX - fNBinsToScaleX - 1; //bin that we start loop over bins in axis X
645 Int_t offsetY = nbinsY - fNBinsToScaleY - 1; //bin that we start loop over bins in axis Y
646 Int_t offsetZ = nbinsZ - fNBinsToScaleZ - 1; //bin that we start loop over bins in axis Z
647 Double_t densum = 0.0;
648 Double_t numsum = 0.0;
650 for (UInt_t k = offsetZ; k<nbinsZ; k++)
651 for (UInt_t j = offsetY; j<nbinsY; j++)
652 for (UInt_t i = offsetX; i<nbinsX; i++)
654 if ( num->GetBinContent(i,j,k) > 0.0 )
656 densum += den->GetBinContent(i,j,k);
657 numsum += num->GetBinContent(i,j,k);
660 if(AliVAODParticle::GetDebug() > 0)
661 Info("Scale","numsum=%f densum=%f fNBinsToScaleX=%d fNBinsToScaleY=%d fNBinsToScaleZ=%d",
662 numsum,densum,fNBinsToScaleX,fNBinsToScaleY,fNBinsToScaleZ);
663 if (numsum == 0) return 0.0;
664 Double_t ret = densum/numsum;
665 if(AliVAODParticle::GetDebug() > 0) Info("Scale","returning %f",ret);