#include "AliMillePedeRecord.h"
#include <TMath.h>
#include "AliLog.h"
ClassImp(AliMillePedeRecord)
AliMillePedeRecord::AliMillePedeRecord() :
fSize(0),fNGroups(0),fRunID(0),fGroupID(0),fIndex(0),fValue(0),fWeight(1) {SetUniqueID(0);}
AliMillePedeRecord::AliMillePedeRecord(const AliMillePedeRecord& src) :
TObject(src),fSize(src.fSize),fNGroups(src.fNGroups),fRunID(src.fRunID),fGroupID(0),fIndex(0),fValue(0),fWeight(src.fWeight)
{
fIndex = new Int_t[GetDtBufferSize()];
memcpy(fIndex,src.fIndex,fSize*sizeof(Int_t));
fValue = new Double_t[GetDtBufferSize()];
memcpy(fValue,src.fValue,fSize*sizeof(Double_t));
fGroupID = new UShort_t[GetGrBufferSize()];
memcpy(fGroupID,src.fGroupID,GetGrBufferSize()*sizeof(UShort_t));
}
AliMillePedeRecord& AliMillePedeRecord::operator=(const AliMillePedeRecord& rhs)
{
if (this!=&rhs) {
Reset();
for (int i=0;i<rhs.GetSize();i++) {
Double_t val;
Int_t ind;
rhs.GetIndexValue(i,ind,val);
AddIndexValue(ind,val);
}
fWeight = rhs.fWeight;
fRunID = rhs.fRunID;
for (int i=0;i<rhs.GetNGroups();i++) MarkGroup(rhs.GetGroupID(i));
}
return *this;
}
AliMillePedeRecord::~AliMillePedeRecord() {delete[] fIndex; delete[] fValue; delete[] fGroupID;}
void AliMillePedeRecord::Reset()
{
fSize = 0;
for (int i=fNGroups;i--;) fGroupID[i] = 0;
fNGroups = 0;
fRunID = 0;
fWeight = 1.;
}
void AliMillePedeRecord::Print(const Option_t *) const
{
if (!fSize) {AliInfo("No data"); return;}
int cnt=0,point=0;
if (fNGroups) printf("Groups: ");
for (int i=0;i<fNGroups;i++) printf("%4d |",GetGroupID(i));
printf("Run: %9d Weight: %+.2e\n",fRunID,fWeight);
while(cnt<fSize) {
Double_t resid = fValue[cnt++];
Double_t *derLoc = GetValue()+cnt;
int *indLoc = GetIndex()+cnt;
int nLoc = 0;
while(!IsWeight(cnt)) {nLoc++;cnt++;}
Double_t weight = GetValue(cnt++);
Double_t *derGlo = GetValue()+cnt;
int *indGlo = GetIndex()+cnt;
int nGlo = 0;
while(!IsResidual(cnt) && cnt<fSize) {nGlo++; cnt++;}
printf("\n*** Point#%2d | Residual = %+.4e | Weight = %+.4e\n",point++,resid,weight);
printf("Locals : ");
for (int i=0;i<nLoc;i++) printf("[%5d] %+.4e|",indLoc[i],derLoc[i]); printf("\n");
printf("Globals: ");
for (int i=0;i<nGlo;i++) printf("[%5d] %+.4e|",indGlo[i],derGlo[i]); printf("\n");
}
}
Double_t AliMillePedeRecord::GetGloResWProd(Int_t indx) const
{
if (!fSize) {AliInfo("No data"); return 0;}
int cnt=0;
double prodsum = 0.0;
while(cnt<fSize) {
Double_t resid = fValue[cnt++];
while(!IsWeight(cnt)) cnt++;
Double_t weight = GetValue(cnt++);
Double_t *derGlo = GetValue()+cnt;
int *indGlo = GetIndex()+cnt;
int nGlo = 0;
while(!IsResidual(cnt) && cnt<fSize) {nGlo++; cnt++;}
for (int i=nGlo;i--;) if (indGlo[i]==indx) prodsum += resid*weight*derGlo[i];
}
return prodsum;
}
Double_t AliMillePedeRecord::GetGlobalDeriv(Int_t pnt, Int_t indx) const
{
if (!fSize) {AliError("No data"); return 0;}
int cnt=0,point=0;
while(cnt<fSize) {
cnt++;
while(!IsWeight(cnt)) cnt++;
cnt++;
Double_t *derGlo = GetValue()+cnt;
int *indGlo = GetIndex()+cnt;
int nGlo = 0;
while(!IsResidual(cnt) && cnt<fSize) {nGlo++; cnt++;}
if (pnt != point++) continue;
for (int i=nGlo;i--;) if (indGlo[i]==indx) return derGlo[i];
break;
}
return 0;
}
Double_t AliMillePedeRecord::GetLocalDeriv(Int_t pnt, Int_t indx) const
{
if (!fSize) {AliError("No data"); return 0;}
int cnt=0,point=0;
while(cnt<fSize) {
cnt++;
Double_t *derLoc = GetValue()+cnt;
int *indLoc = GetIndex()+cnt;
int nLoc = 0;
while(!IsWeight(cnt)) {nLoc++;cnt++;}
cnt++;
while(!IsResidual(cnt) && cnt<fSize) cnt++;
if (pnt != point++) continue;
for (int i=nLoc;i--;) if (indLoc[i]==indx) return derLoc[i];
break;
}
return 0;
}
Double_t AliMillePedeRecord::GetResidual(Int_t pnt) const
{
if (!fSize) {AliError("No data"); return 0;}
int cnt=0,point=0;
while(cnt<fSize) {
Double_t resid = fValue[cnt++];
while(!IsWeight(cnt)) cnt++;
cnt++;
while(!IsResidual(cnt) && cnt<fSize) cnt++;
if (pnt != point++) continue;
return resid;
}
return 0;
}
Double_t AliMillePedeRecord::GetWeight(Int_t pnt) const
{
if (!fSize) {AliError("No data"); return 0;}
int cnt=0,point=0;
while(cnt<fSize) {
cnt++;
while(!IsWeight(cnt)) cnt++;
if (point==pnt) return GetValue(cnt);;
cnt++;
while(!IsResidual(cnt) && cnt<fSize) cnt++;
point++;
}
return -1;
}
void AliMillePedeRecord::ExpandDtBuffer(Int_t bfsize)
{
bfsize = TMath::Max(bfsize,GetDtBufferSize());
Int_t *tmpI = new Int_t[bfsize];
memcpy(tmpI,fIndex, fSize*sizeof(Int_t));
delete [] fIndex;
fIndex = tmpI;
Double_t *tmpD = new Double_t[bfsize];
memcpy(tmpD,fValue, fSize*sizeof(Double_t));
delete [] fValue;
fValue = tmpD;
SetDtBufferSize(bfsize);
}
void AliMillePedeRecord::ExpandGrBuffer(Int_t bfsize)
{
bfsize = TMath::Max(bfsize,GetGrBufferSize());
UShort_t *tmpI = new UShort_t[bfsize];
memcpy(tmpI,fGroupID, fNGroups*sizeof(UShort_t));
delete [] fGroupID;
fGroupID = tmpI;
for (int i=fNGroups;i<bfsize;i++) fGroupID[i] = 0;
SetGrBufferSize(bfsize);
}
void AliMillePedeRecord::MarkGroup(Int_t id)
{
id++;
if (fNGroups>0 && fGroupID[fNGroups-1]==id) return;
if (fNGroups>=GetGrBufferSize()) ExpandGrBuffer(2*(fNGroups+1));
fGroupID[fNGroups++] = id;
}
AliMillePedeRecord.cxx:10 AliMillePedeRecord.cxx:11 AliMillePedeRecord.cxx:12 AliMillePedeRecord.cxx:13 AliMillePedeRecord.cxx:14 AliMillePedeRecord.cxx:15 AliMillePedeRecord.cxx:16 AliMillePedeRecord.cxx:17 AliMillePedeRecord.cxx:18 AliMillePedeRecord.cxx:19 AliMillePedeRecord.cxx:20 AliMillePedeRecord.cxx:21 AliMillePedeRecord.cxx:22 AliMillePedeRecord.cxx:23 AliMillePedeRecord.cxx:24 AliMillePedeRecord.cxx:25 AliMillePedeRecord.cxx:26 AliMillePedeRecord.cxx:27 AliMillePedeRecord.cxx:28 AliMillePedeRecord.cxx:29 AliMillePedeRecord.cxx:30 AliMillePedeRecord.cxx:31 AliMillePedeRecord.cxx:32 AliMillePedeRecord.cxx:33 AliMillePedeRecord.cxx:34 AliMillePedeRecord.cxx:35 AliMillePedeRecord.cxx:36 AliMillePedeRecord.cxx:37 AliMillePedeRecord.cxx:38 AliMillePedeRecord.cxx:39 AliMillePedeRecord.cxx:40 AliMillePedeRecord.cxx:41 AliMillePedeRecord.cxx:42 AliMillePedeRecord.cxx:43 AliMillePedeRecord.cxx:44 AliMillePedeRecord.cxx:45 AliMillePedeRecord.cxx:46 AliMillePedeRecord.cxx:47 AliMillePedeRecord.cxx:48 AliMillePedeRecord.cxx:49 AliMillePedeRecord.cxx:50 AliMillePedeRecord.cxx:51 AliMillePedeRecord.cxx:52 AliMillePedeRecord.cxx:53 AliMillePedeRecord.cxx:54 AliMillePedeRecord.cxx:55 AliMillePedeRecord.cxx:56 AliMillePedeRecord.cxx:57 AliMillePedeRecord.cxx:58 AliMillePedeRecord.cxx:59 AliMillePedeRecord.cxx:60 AliMillePedeRecord.cxx:61 AliMillePedeRecord.cxx:62 AliMillePedeRecord.cxx:63 AliMillePedeRecord.cxx:64 AliMillePedeRecord.cxx:65 AliMillePedeRecord.cxx:66 AliMillePedeRecord.cxx:67 AliMillePedeRecord.cxx:68 AliMillePedeRecord.cxx:69 AliMillePedeRecord.cxx:70 AliMillePedeRecord.cxx:71 AliMillePedeRecord.cxx:72 AliMillePedeRecord.cxx:73 AliMillePedeRecord.cxx:74 AliMillePedeRecord.cxx:75 AliMillePedeRecord.cxx:76 AliMillePedeRecord.cxx:77 AliMillePedeRecord.cxx:78 AliMillePedeRecord.cxx:79 AliMillePedeRecord.cxx:80 AliMillePedeRecord.cxx:81 AliMillePedeRecord.cxx:82 AliMillePedeRecord.cxx:83 AliMillePedeRecord.cxx:84 AliMillePedeRecord.cxx:85 AliMillePedeRecord.cxx:86 AliMillePedeRecord.cxx:87 AliMillePedeRecord.cxx:88 AliMillePedeRecord.cxx:89 AliMillePedeRecord.cxx:90 AliMillePedeRecord.cxx:91 AliMillePedeRecord.cxx:92 AliMillePedeRecord.cxx:93 AliMillePedeRecord.cxx:94 AliMillePedeRecord.cxx:95 AliMillePedeRecord.cxx:96 AliMillePedeRecord.cxx:97 AliMillePedeRecord.cxx:98 AliMillePedeRecord.cxx:99 AliMillePedeRecord.cxx:100 AliMillePedeRecord.cxx:101 AliMillePedeRecord.cxx:102 AliMillePedeRecord.cxx:103 AliMillePedeRecord.cxx:104 AliMillePedeRecord.cxx:105 AliMillePedeRecord.cxx:106 AliMillePedeRecord.cxx:107 AliMillePedeRecord.cxx:108 AliMillePedeRecord.cxx:109 AliMillePedeRecord.cxx:110 AliMillePedeRecord.cxx:111 AliMillePedeRecord.cxx:112 AliMillePedeRecord.cxx:113 AliMillePedeRecord.cxx:114 AliMillePedeRecord.cxx:115 AliMillePedeRecord.cxx:116 AliMillePedeRecord.cxx:117 AliMillePedeRecord.cxx:118 AliMillePedeRecord.cxx:119 AliMillePedeRecord.cxx:120 AliMillePedeRecord.cxx:121 AliMillePedeRecord.cxx:122 AliMillePedeRecord.cxx:123 AliMillePedeRecord.cxx:124 AliMillePedeRecord.cxx:125 AliMillePedeRecord.cxx:126 AliMillePedeRecord.cxx:127 AliMillePedeRecord.cxx:128 AliMillePedeRecord.cxx:129 AliMillePedeRecord.cxx:130 AliMillePedeRecord.cxx:131 AliMillePedeRecord.cxx:132 AliMillePedeRecord.cxx:133 AliMillePedeRecord.cxx:134 AliMillePedeRecord.cxx:135 AliMillePedeRecord.cxx:136 AliMillePedeRecord.cxx:137 AliMillePedeRecord.cxx:138 AliMillePedeRecord.cxx:139 AliMillePedeRecord.cxx:140 AliMillePedeRecord.cxx:141 AliMillePedeRecord.cxx:142 AliMillePedeRecord.cxx:143 AliMillePedeRecord.cxx:144 AliMillePedeRecord.cxx:145 AliMillePedeRecord.cxx:146 AliMillePedeRecord.cxx:147 AliMillePedeRecord.cxx:148 AliMillePedeRecord.cxx:149 AliMillePedeRecord.cxx:150 AliMillePedeRecord.cxx:151 AliMillePedeRecord.cxx:152 AliMillePedeRecord.cxx:153 AliMillePedeRecord.cxx:154 AliMillePedeRecord.cxx:155 AliMillePedeRecord.cxx:156 AliMillePedeRecord.cxx:157 AliMillePedeRecord.cxx:158 AliMillePedeRecord.cxx:159 AliMillePedeRecord.cxx:160 AliMillePedeRecord.cxx:161 AliMillePedeRecord.cxx:162 AliMillePedeRecord.cxx:163 AliMillePedeRecord.cxx:164 AliMillePedeRecord.cxx:165 AliMillePedeRecord.cxx:166 AliMillePedeRecord.cxx:167 AliMillePedeRecord.cxx:168 AliMillePedeRecord.cxx:169 AliMillePedeRecord.cxx:170 AliMillePedeRecord.cxx:171 AliMillePedeRecord.cxx:172 AliMillePedeRecord.cxx:173 AliMillePedeRecord.cxx:174 AliMillePedeRecord.cxx:175 AliMillePedeRecord.cxx:176 AliMillePedeRecord.cxx:177 AliMillePedeRecord.cxx:178 AliMillePedeRecord.cxx:179 AliMillePedeRecord.cxx:180 AliMillePedeRecord.cxx:181 AliMillePedeRecord.cxx:182 AliMillePedeRecord.cxx:183 AliMillePedeRecord.cxx:184 AliMillePedeRecord.cxx:185 AliMillePedeRecord.cxx:186 AliMillePedeRecord.cxx:187 AliMillePedeRecord.cxx:188 AliMillePedeRecord.cxx:189 AliMillePedeRecord.cxx:190 AliMillePedeRecord.cxx:191 AliMillePedeRecord.cxx:192 AliMillePedeRecord.cxx:193 AliMillePedeRecord.cxx:194 AliMillePedeRecord.cxx:195 AliMillePedeRecord.cxx:196 AliMillePedeRecord.cxx:197 AliMillePedeRecord.cxx:198 AliMillePedeRecord.cxx:199 AliMillePedeRecord.cxx:200 AliMillePedeRecord.cxx:201 AliMillePedeRecord.cxx:202 AliMillePedeRecord.cxx:203 AliMillePedeRecord.cxx:204 AliMillePedeRecord.cxx:205 AliMillePedeRecord.cxx:206 AliMillePedeRecord.cxx:207 AliMillePedeRecord.cxx:208 AliMillePedeRecord.cxx:209 AliMillePedeRecord.cxx:210 AliMillePedeRecord.cxx:211 AliMillePedeRecord.cxx:212 AliMillePedeRecord.cxx:213 AliMillePedeRecord.cxx:214 AliMillePedeRecord.cxx:215 AliMillePedeRecord.cxx:216 AliMillePedeRecord.cxx:217 AliMillePedeRecord.cxx:218 AliMillePedeRecord.cxx:219 AliMillePedeRecord.cxx:220 AliMillePedeRecord.cxx:221 AliMillePedeRecord.cxx:222 AliMillePedeRecord.cxx:223 AliMillePedeRecord.cxx:224 AliMillePedeRecord.cxx:225 AliMillePedeRecord.cxx:226 AliMillePedeRecord.cxx:227 AliMillePedeRecord.cxx:228 AliMillePedeRecord.cxx:229 AliMillePedeRecord.cxx:230 AliMillePedeRecord.cxx:231 AliMillePedeRecord.cxx:232 AliMillePedeRecord.cxx:233 AliMillePedeRecord.cxx:234 AliMillePedeRecord.cxx:235 AliMillePedeRecord.cxx:236 AliMillePedeRecord.cxx:237 AliMillePedeRecord.cxx:238 AliMillePedeRecord.cxx:239 AliMillePedeRecord.cxx:240 AliMillePedeRecord.cxx:241 AliMillePedeRecord.cxx:242 AliMillePedeRecord.cxx:243 AliMillePedeRecord.cxx:244 AliMillePedeRecord.cxx:245 AliMillePedeRecord.cxx:246 AliMillePedeRecord.cxx:247 AliMillePedeRecord.cxx:248 AliMillePedeRecord.cxx:249 AliMillePedeRecord.cxx:250 AliMillePedeRecord.cxx:251 AliMillePedeRecord.cxx:252 AliMillePedeRecord.cxx:253 AliMillePedeRecord.cxx:254 AliMillePedeRecord.cxx:255 AliMillePedeRecord.cxx:256 AliMillePedeRecord.cxx:257 AliMillePedeRecord.cxx:258 AliMillePedeRecord.cxx:259 AliMillePedeRecord.cxx:260 AliMillePedeRecord.cxx:261