#include "AliMultiDimVector.h"
#include "AliSignificanceCalculator.h"
#include "TMath.h"
#include "AliLog.h"
ClassImp(AliSignificanceCalculator)
AliSignificanceCalculator::AliSignificanceCalculator():
fSignal(0),
fErrSquareSignal(0),
fBackground(0),
fErrSquareBackground(0),
fSignificance(0),
fErrSignificance(0),
fNormSig(1.),
fNormBkg(1.)
{
fSignal=new AliMultiDimVector();
fBackground=new AliMultiDimVector();
}
AliSignificanceCalculator::AliSignificanceCalculator(AliMultiDimVector* sig, AliMultiDimVector* bkg, Float_t normsig, Float_t normbkg):
fSignal(sig),
fErrSquareSignal(0),
fBackground(bkg),
fErrSquareBackground(0),
fSignificance(0),
fErrSignificance(0),
fNormSig(normsig),
fNormBkg(normbkg)
{
if(fSignal && fBackground) CalculateSignificance();
}
AliSignificanceCalculator::AliSignificanceCalculator(AliMultiDimVector* sig, AliMultiDimVector* bkg, AliMultiDimVector* err2sig, AliMultiDimVector* err2bkg, Float_t normsig, Float_t normbkg):
fSignal(sig),
fErrSquareSignal(err2sig),
fBackground(bkg),
fErrSquareBackground(err2bkg),
fSignificance(0),
fErrSignificance(0),
fNormSig(normsig),
fNormBkg(normbkg)
{
if(fSignal && fBackground) CalculateSignificance();
}
AliSignificanceCalculator::~AliSignificanceCalculator(){
if(fSignal) delete fSignal;
if(fBackground) delete fBackground;
if(fSignificance) delete fSignificance;
if(fErrSignificance) delete fErrSignificance;
}
Bool_t AliSignificanceCalculator::Check() const {
if(fSignal==0 || fBackground==0) return kFALSE;
if(fNormSig==0. || fNormBkg==0.) return kFALSE;
if(fSignal->GetNTotCells() != fBackground->GetNTotCells()) return kFALSE;
return kTRUE;
}
void AliSignificanceCalculator::CalculateSignificance(){
if(!Check()) AliFatal("Signal and Background AliMultiDimVector dimensions do not match!");
if(fSignificance) delete fSignificance;
if(fErrSignificance) delete fErrSignificance;
fSignificance=new AliMultiDimVector();
fSignificance->CopyStructure(fSignal);
fErrSignificance=new AliMultiDimVector();
fErrSignificance->CopyStructure(fSignal);
for(ULong64_t i=0;i<fSignal->GetNTotCells();i++) {
if(fSignal->GetElement(i)!=-1 && fBackground->GetElement(i)!=-1){
Float_t s=fSignal->GetElement(i)*fNormSig;
Float_t b=fBackground->GetElement(i)*fNormBkg;
Float_t signif=0.;
Float_t errsig=0.;
if((s+b)>0){
signif=s/TMath::Sqrt(s+b);
Float_t errs,errb;
if(fErrSquareSignal) errs=TMath::Sqrt(fErrSquareSignal->GetElement(i))*fNormSig;
else errs=TMath::Sqrt(fSignal->GetElement(i))*fNormSig;
if(fErrSquareBackground) errb=TMath::Sqrt(fErrSquareBackground->GetElement(i))*fNormBkg;
else errb=TMath::Sqrt(fBackground->GetElement(i))*fNormBkg;
Float_t dsigds=(s+2*b)/2./(s+b)/TMath::Sqrt(s+b);
Float_t dsigdb=-s/2./(s+b)/TMath::Sqrt(s+b);
errsig=TMath::Sqrt(dsigds*dsigds*errs*errs+dsigdb*dsigdb*errb*errb);
}
fSignificance->SetElement(i,signif);
fErrSignificance->SetElement(i,errsig);
}
}
fSignificance->SetNameTitle("Significance","Significance");
fErrSignificance->SetNameTitle("ErrorOnSignificance","ErrorOnSignificance");
}
AliMultiDimVector* AliSignificanceCalculator::CalculatePurity() const {
if(!Check()) AliFatal("Signal and Background AliMultiDimVector dimensions do not match!");
AliMultiDimVector* purity=new AliMultiDimVector();
purity->CopyStructure(fSignal);
for(ULong64_t i=0;i<fSignal->GetNTotCells();i++) {
if(fSignal->GetElement(i)!=-1 && fBackground->GetElement(i)!=-1){
Float_t s=fSignal->GetElement(i)*fNormSig;
Float_t b=fBackground->GetElement(i)*fNormBkg;
Float_t pur=0.;
if((s+b)>0) pur=s/(s+b);
purity->SetElement(i,pur);
}
}
purity->SetNameTitle("Purity","Purity");
return purity;
}
AliMultiDimVector* AliSignificanceCalculator::CalculatePurityError() const {
if(!Check()) AliFatal("Signal and Background AliMultiDimVector dimensions do not match!");
AliMultiDimVector* epurity=new AliMultiDimVector();
epurity->CopyStructure(fSignal);
for(ULong64_t i=0;i<fSignal->GetNTotCells();i++) {
if(fSignal->GetElement(i)!=-1 && fBackground->GetElement(i)!=-1){
Float_t s=fSignal->GetElement(i)*fNormSig;
Float_t b=fBackground->GetElement(i)*fNormBkg;
Float_t epur=0.;
if((s+b)>0){
Float_t errs,errb;
if(fErrSquareSignal) errs=TMath::Sqrt(fErrSquareSignal->GetElement(i))*fNormSig;
else errs=TMath::Sqrt(fSignal->GetElement(i))*fNormSig;
if(fErrSquareBackground) errb=TMath::Sqrt(fErrSquareBackground->GetElement(i))*fNormBkg;
else errb=TMath::Sqrt(fBackground->GetElement(i))*fNormBkg;
Float_t dpurds=b/(s+b)/(s+b);
Float_t dpurdb=-s/(s+b)/(s+b);
epur=TMath::Sqrt(dpurds*dpurds*errs*errs+dpurdb*dpurdb*errb*errb);
}
epurity->SetElement(i,epur);
}
}
epurity->SetNameTitle("ErrorOnPurity","ErrorOnPurity");
return epurity;
}
AliMultiDimVector* AliSignificanceCalculator::CalculateSOverB() const {
if(!Check()) AliFatal("Signal and Background AliMultiDimVector dimensions do not match!");
AliMultiDimVector* sob=new AliMultiDimVector();
sob->CopyStructure(fSignal);
for(ULong64_t i=0;i<fSignal->GetNTotCells();i++) {
if(fSignal->GetElement(i)!=-1 && fBackground->GetElement(i)!=-1){
Float_t s=fSignal->GetElement(i)*fNormSig;
Float_t b=fBackground->GetElement(i)*fNormBkg;
Float_t soverb=0.;
if(b>0) soverb=s/b;
sob->SetElement(i,soverb);
}
}
sob->SetNameTitle("SoverB","SoverB");
return sob;
}
AliMultiDimVector* AliSignificanceCalculator::CalculateSOverBError() const {
if(!Check()) AliFatal("Signal and Background AliMultiDimVector dimensions do not match!");
AliMultiDimVector* esob=new AliMultiDimVector();
esob->CopyStructure(fSignal);
for(ULong64_t i=0;i<fSignal->GetNTotCells();i++) {
if(fSignal->GetElement(i)!=-1 && fBackground->GetElement(i)!=-1){
Float_t s=fSignal->GetElement(i)*fNormSig;
Float_t b=fBackground->GetElement(i)*fNormBkg;
Float_t esoverb=0.;
if(b>0){
Float_t soverb=s/b;
Float_t errs,errb;
if(fErrSquareSignal) errs=TMath::Sqrt(fErrSquareSignal->GetElement(i))*fNormSig;
else errs=TMath::Sqrt(fSignal->GetElement(i))*fNormSig;
if(fErrSquareBackground) errb=TMath::Sqrt(fErrSquareBackground->GetElement(i))*fNormBkg;
else errb=TMath::Sqrt(fBackground->GetElement(i))*fNormBkg;
esoverb=soverb*TMath::Sqrt(errs*errs/s/s+errb*errb/b/b);
}
esob->SetElement(i,esoverb);
}
}
esob->SetNameTitle("ErrorOnSoverB","ErrorOnSoverB");
return esob;
}
AliSignificanceCalculator.cxx:1 AliSignificanceCalculator.cxx:2 AliSignificanceCalculator.cxx:3 AliSignificanceCalculator.cxx:4 AliSignificanceCalculator.cxx:5 AliSignificanceCalculator.cxx:6 AliSignificanceCalculator.cxx:7 AliSignificanceCalculator.cxx:8 AliSignificanceCalculator.cxx:9 AliSignificanceCalculator.cxx:10 AliSignificanceCalculator.cxx:11 AliSignificanceCalculator.cxx:12 AliSignificanceCalculator.cxx:13 AliSignificanceCalculator.cxx:14 AliSignificanceCalculator.cxx:15 AliSignificanceCalculator.cxx:16 AliSignificanceCalculator.cxx:17 AliSignificanceCalculator.cxx:18 AliSignificanceCalculator.cxx:19 AliSignificanceCalculator.cxx:20 AliSignificanceCalculator.cxx:21 AliSignificanceCalculator.cxx:22 AliSignificanceCalculator.cxx:23 AliSignificanceCalculator.cxx:24 AliSignificanceCalculator.cxx:25 AliSignificanceCalculator.cxx:26 AliSignificanceCalculator.cxx:27 AliSignificanceCalculator.cxx:28 AliSignificanceCalculator.cxx:29 AliSignificanceCalculator.cxx:30 AliSignificanceCalculator.cxx:31 AliSignificanceCalculator.cxx:32 AliSignificanceCalculator.cxx:33 AliSignificanceCalculator.cxx:34 AliSignificanceCalculator.cxx:35 AliSignificanceCalculator.cxx:36 AliSignificanceCalculator.cxx:37 AliSignificanceCalculator.cxx:38 AliSignificanceCalculator.cxx:39 AliSignificanceCalculator.cxx:40 AliSignificanceCalculator.cxx:41 AliSignificanceCalculator.cxx:42 AliSignificanceCalculator.cxx:43 AliSignificanceCalculator.cxx:44 AliSignificanceCalculator.cxx:45 AliSignificanceCalculator.cxx:46 AliSignificanceCalculator.cxx:47 AliSignificanceCalculator.cxx:48 AliSignificanceCalculator.cxx:49 AliSignificanceCalculator.cxx:50 AliSignificanceCalculator.cxx:51 AliSignificanceCalculator.cxx:52 AliSignificanceCalculator.cxx:53 AliSignificanceCalculator.cxx:54 AliSignificanceCalculator.cxx:55 AliSignificanceCalculator.cxx:56 AliSignificanceCalculator.cxx:57 AliSignificanceCalculator.cxx:58 AliSignificanceCalculator.cxx:59 AliSignificanceCalculator.cxx:60 AliSignificanceCalculator.cxx:61 AliSignificanceCalculator.cxx:62 AliSignificanceCalculator.cxx:63 AliSignificanceCalculator.cxx:64 AliSignificanceCalculator.cxx:65 AliSignificanceCalculator.cxx:66 AliSignificanceCalculator.cxx:67 AliSignificanceCalculator.cxx:68 AliSignificanceCalculator.cxx:69 AliSignificanceCalculator.cxx:70 AliSignificanceCalculator.cxx:71 AliSignificanceCalculator.cxx:72 AliSignificanceCalculator.cxx:73 AliSignificanceCalculator.cxx:74 AliSignificanceCalculator.cxx:75 AliSignificanceCalculator.cxx:76 AliSignificanceCalculator.cxx:77 AliSignificanceCalculator.cxx:78 AliSignificanceCalculator.cxx:79 AliSignificanceCalculator.cxx:80 AliSignificanceCalculator.cxx:81 AliSignificanceCalculator.cxx:82 AliSignificanceCalculator.cxx:83 AliSignificanceCalculator.cxx:84 AliSignificanceCalculator.cxx:85 AliSignificanceCalculator.cxx:86 AliSignificanceCalculator.cxx:87 AliSignificanceCalculator.cxx:88 AliSignificanceCalculator.cxx:89 AliSignificanceCalculator.cxx:90 AliSignificanceCalculator.cxx:91 AliSignificanceCalculator.cxx:92 AliSignificanceCalculator.cxx:93 AliSignificanceCalculator.cxx:94 AliSignificanceCalculator.cxx:95 AliSignificanceCalculator.cxx:96 AliSignificanceCalculator.cxx:97 AliSignificanceCalculator.cxx:98 AliSignificanceCalculator.cxx:99 AliSignificanceCalculator.cxx:100 AliSignificanceCalculator.cxx:101 AliSignificanceCalculator.cxx:102 AliSignificanceCalculator.cxx:103 AliSignificanceCalculator.cxx:104 AliSignificanceCalculator.cxx:105 AliSignificanceCalculator.cxx:106 AliSignificanceCalculator.cxx:107 AliSignificanceCalculator.cxx:108 AliSignificanceCalculator.cxx:109 AliSignificanceCalculator.cxx:110 AliSignificanceCalculator.cxx:111 AliSignificanceCalculator.cxx:112 AliSignificanceCalculator.cxx:113 AliSignificanceCalculator.cxx:114 AliSignificanceCalculator.cxx:115 AliSignificanceCalculator.cxx:116 AliSignificanceCalculator.cxx:117 AliSignificanceCalculator.cxx:118 AliSignificanceCalculator.cxx:119 AliSignificanceCalculator.cxx:120 AliSignificanceCalculator.cxx:121 AliSignificanceCalculator.cxx:122 AliSignificanceCalculator.cxx:123 AliSignificanceCalculator.cxx:124 AliSignificanceCalculator.cxx:125 AliSignificanceCalculator.cxx:126 AliSignificanceCalculator.cxx:127 AliSignificanceCalculator.cxx:128 AliSignificanceCalculator.cxx:129 AliSignificanceCalculator.cxx:130 AliSignificanceCalculator.cxx:131 AliSignificanceCalculator.cxx:132 AliSignificanceCalculator.cxx:133 AliSignificanceCalculator.cxx:134 AliSignificanceCalculator.cxx:135 AliSignificanceCalculator.cxx:136 AliSignificanceCalculator.cxx:137 AliSignificanceCalculator.cxx:138 AliSignificanceCalculator.cxx:139 AliSignificanceCalculator.cxx:140 AliSignificanceCalculator.cxx:141 AliSignificanceCalculator.cxx:142 AliSignificanceCalculator.cxx:143 AliSignificanceCalculator.cxx:144 AliSignificanceCalculator.cxx:145 AliSignificanceCalculator.cxx:146 AliSignificanceCalculator.cxx:147 AliSignificanceCalculator.cxx:148 AliSignificanceCalculator.cxx:149 AliSignificanceCalculator.cxx:150 AliSignificanceCalculator.cxx:151 AliSignificanceCalculator.cxx:152 AliSignificanceCalculator.cxx:153 AliSignificanceCalculator.cxx:154 AliSignificanceCalculator.cxx:155 AliSignificanceCalculator.cxx:156 AliSignificanceCalculator.cxx:157 AliSignificanceCalculator.cxx:158 AliSignificanceCalculator.cxx:159 AliSignificanceCalculator.cxx:160 AliSignificanceCalculator.cxx:161 AliSignificanceCalculator.cxx:162 AliSignificanceCalculator.cxx:163 AliSignificanceCalculator.cxx:164 AliSignificanceCalculator.cxx:165 AliSignificanceCalculator.cxx:166 AliSignificanceCalculator.cxx:167 AliSignificanceCalculator.cxx:168 AliSignificanceCalculator.cxx:169 AliSignificanceCalculator.cxx:170 AliSignificanceCalculator.cxx:171 AliSignificanceCalculator.cxx:172 AliSignificanceCalculator.cxx:173 AliSignificanceCalculator.cxx:174 AliSignificanceCalculator.cxx:175 AliSignificanceCalculator.cxx:176 AliSignificanceCalculator.cxx:177 AliSignificanceCalculator.cxx:178 AliSignificanceCalculator.cxx:179 AliSignificanceCalculator.cxx:180 AliSignificanceCalculator.cxx:181 AliSignificanceCalculator.cxx:182 AliSignificanceCalculator.cxx:183 AliSignificanceCalculator.cxx:184 AliSignificanceCalculator.cxx:185 AliSignificanceCalculator.cxx:186 AliSignificanceCalculator.cxx:187 AliSignificanceCalculator.cxx:188 AliSignificanceCalculator.cxx:189 AliSignificanceCalculator.cxx:190 AliSignificanceCalculator.cxx:191 AliSignificanceCalculator.cxx:192 AliSignificanceCalculator.cxx:193 AliSignificanceCalculator.cxx:194 AliSignificanceCalculator.cxx:195 AliSignificanceCalculator.cxx:196 AliSignificanceCalculator.cxx:197 AliSignificanceCalculator.cxx:198 AliSignificanceCalculator.cxx:199 AliSignificanceCalculator.cxx:200 AliSignificanceCalculator.cxx:201 AliSignificanceCalculator.cxx:202 AliSignificanceCalculator.cxx:203 AliSignificanceCalculator.cxx:204 AliSignificanceCalculator.cxx:205 AliSignificanceCalculator.cxx:206 AliSignificanceCalculator.cxx:207 AliSignificanceCalculator.cxx:208 AliSignificanceCalculator.cxx:209 AliSignificanceCalculator.cxx:210 AliSignificanceCalculator.cxx:211 AliSignificanceCalculator.cxx:212 AliSignificanceCalculator.cxx:213 AliSignificanceCalculator.cxx:214 AliSignificanceCalculator.cxx:215 AliSignificanceCalculator.cxx:216 AliSignificanceCalculator.cxx:217 AliSignificanceCalculator.cxx:218 AliSignificanceCalculator.cxx:219 AliSignificanceCalculator.cxx:220