27 #include <TGraphErrors.h>
31 #include <TObjArray.h>
32 #include <TCollection.h>
33 #include <AliESDEvent.h>
34 #include <AliRelAlignerKalman.h>
43 TNamed("alignerArray","array of aligners"),
47 fOutRejSigmaOnMerge(10.),
48 fOutRejSigmaOnSmooth(1.),
58 TNamed(
"alignerArray",
"array of aligners"),
60 fTimebinWidth(slotwidth),
62 fOutRejSigmaOnMerge(10.),
63 fOutRejSigmaOnSmooth(1.),
66 fListOfGraphs(new
TList)
69 if (slotwidth==0)
fSize = 1;
70 else fSize = (tend-t0)/slotwidth;
80 TNamed(in.GetName(), in.GetTitle()),
82 fTimebinWidth(in.fTimebinWidth),
84 fOutRejSigmaOnMerge(in.fOutRejSigmaOnMerge),
85 fOutRejSigmaOnSmooth(in.fOutRejSigmaOnSmooth),
86 fAlignerTemplate(in.fAlignerTemplate),
88 fListOfGraphs(new
TList)
119 if (slotwidth==0) tmpsize = 1;
120 else tmpsize = (tend-t0)/slotwidth;
124 fPArray=
new AliRelAlignerKalman* [tmpsize];
147 while ( (arrayFromList = dynamic_cast<AliRelAlignerKalmanArray*>(next())) )
149 if (
fT0 != arrayFromList->
fT0)
continue;
155 AliRelAlignerKalman* a1 =
fPArray[i];
156 AliRelAlignerKalman* a2 = arrayFromList->
fPArray[i];
159 a1->SetRejectOutliers(kFALSE);
163 if (!a1 && a2)
fPArray[i] =
new AliRelAlignerKalman(*a2);
184 if (tb<0)
return NULL;
185 if (tb>=
fSize)
return NULL;
199 AliRelAlignerKalman* a =
GetAligner(event->GetTimeStamp());
200 if (a) a->SetRunNumber(event->GetRunNumber());
201 if (a) a->SetMagField(event->GetMagneticField());
209 if(&in ==
this)
return *
this;
210 TNamed::operator=(in);
249 if (i>=
fSize) {printf(
"AliRelAlignerKalmanArray::At index %i out of bounds, size=%i\n",i,
fSize);
return NULL;}
250 if (i<0)
return NULL;
258 if (i>=
fSize) {printf(
"AliRelAlignerKalmanArray::operator[] index %i out of bounds, size=%i\n",i,
fSize);
return NULL;}
259 if (i<0)
return NULL;
267 if (i>=
fSize||i<0) {Error(
"operator[]",
"index %i out of bounds, size=%i\n",i,
fSize);
return fPArray[0];}
275 if (
fSize==0)
return NULL;
284 printf(
"%s: t0: %i, tend: %i, width: %i, size: %i, entries: %i\n",
288 if (optionStr.Contains(
"a"))
291 AliRelAlignerKalman* al =
fPArray[i];
313 AliRelAlignerKalman* al = NULL;
314 tree->Branch(
"aligner",
"AliRelAlignerKalman",&al);
319 if (al) tree->Fill();
327 if (iparam>8 || iparam<0)
329 printf(
"wrong parameter number. must be from 0-8");
341 AliRelAlignerKalman* al =
fPArray[i];
343 vx(entry) = al->GetTimeStamp();
344 vy(entry) = al->GetStateArr()[iparam];
345 TMatrixDSym* cm = al->GetStateCov();
346 vey(entry) = TMath::Sqrt((*cm)(iparam,iparam));
356 graphtitle=
"rotation \\psi";
357 graphtitley=
"\\psi [rad]";
360 graphtitle=
"rotation \\theta";
361 graphtitley=
"\\theta [rad]";
364 graphtitle=
"rotation \\phi";
365 graphtitley=
"\\phi [rad]";
368 graphtitle=
"shift x";
369 graphtitley=
"x [cm]";
372 graphtitle=
"shift y";
373 graphtitley=
"y [cm]";
376 graphtitle=
"shift z";
377 graphtitley=
"z [cm]";
380 graphtitle=
"TPC vd correction";
381 graphtitley=
"correction factor []";
384 graphtitle=
"TPC t0 correction";
385 graphtitley=
"t0 correction [\\micros]";
388 graphtitle=
"TPC dv/dy";
389 graphtitley=
"dv/dy [cm/\\micros/m]";
392 graph->SetName(graphtitle);
393 graph->SetTitle(graphtitle);
394 TAxis* xas = graph->GetXaxis();
395 TAxis* yas = graph->GetYaxis();
396 xas->SetTitle(
"time");
397 xas->SetTimeDisplay(1);
398 yas->SetTitle(graphtitley);
414 if (n==
fSize)
return NULL;
416 if (
fPArray[n]->GetNUpdates()>10)
417 (*outputarr)[n] =
new AliRelAlignerKalman(*(
fPArray[n]));
423 if (tmpaligner->Merge(
fPArray[i]))
424 (*outputarr)[i] =
new AliRelAlignerKalman(*tmpaligner);
426 (*outputarr)[i] =
new AliRelAlignerKalman(*(
fPArray[i]));
438 TMatrixDSym* cov = al->GetStateCov();
440 UInt_t dt = (timestamp>al->GetTimeStamp())?
441 timestamp-al->GetTimeStamp():al->GetTimeStamp()-timestamp;
458 for (
Int_t i=0;i<9;i++)
Int_t Timebin(UInt_t timestamp) const
AliRelAlignerKalman * operator[](Int_t i) const
AliRelAlignerKalman * GetAligner(UInt_t timestamp)
Long64_t Merge(TCollection *list)
AliRelAlignerKalman ** fPArray
void SetupArray(Int_t t0, Int_t tend, Int_t slotwidth)
AliRelAlignerKalmanArray()
virtual ~AliRelAlignerKalmanArray()
virtual void Print(Option_t *option="") const
AliRelAlignerKalmanArray * MakeSmoothArray() const
TGraphErrors * MakeGraph(Int_t iparam) const
AliRelAlignerKalman fAlignerTemplate
void FillTree(TTree *tree) const
void PropagateToTime(AliRelAlignerKalman *al, UInt_t timestamp) const
AliRelAlignerKalman * At(Int_t i) const
Double_t fOutRejSigmaOnSmooth
AliRelAlignerKalmanArray & operator=(const AliRelAlignerKalmanArray &a)
AliRelAlignerKalman * GetAlignerTemplate()
AliRelAlignerKalman * Last() const
Double_t fOutRejSigmaOnMerge