ROOT logo
// $Id$
// Main authors: Matevz Tadel & Alja Mrak-Tadel: 2006, 2007

/**************************************************************************
 * Copyright(c) 1998-2008, ALICE Experiment at CERN, all rights reserved. *
 * See http://aliceinfo.cern.ch/Offline/AliRoot/License.html for          *
 * full copyright notice.                                                 *
 **************************************************************************/

#include "AliEveCosmicRayFitter.h"

#include "AliLog.h"

#include "AliEveTrack.h"
#include "TEveTrackPropagator.h"
#include "TEveVSDStructs.h"
#include "TEveManager.h"

#include "TCanvas.h"
#include "TPad.h"
#include "TGraph.h"
#include "TGraph2D.h"
#include "TGraphErrors.h"
#include "TLinearFitter.h"
#include <Math/Vector3D.h>

//______________________________________________________________________
// AliEveCosmicRayFitter
//
//  Same schema used in AliEveTrackFitter class.
//
//  AliEveCosmicRayFitter is a TEvePointSet interface to allow
//  straight line fit. It creates a set of points by listening to
//  selection signal of any TEvePointSet object. After selection, the
//  list is feeded to TVirtualFitter class, which returns straight
//  line parameters. The fit result is visualized with a TEveLine
//  object.
//
//  Thanks to L. Moneta for the algorithm prepared to make a 3D
//  straight line fit.
//
//  Author: A. De Caro
//


ClassImp(AliEveCosmicRayFitter)

AliEveCosmicRayFitter::AliEveCosmicRayFitter(const Text_t* name, Int_t n_points) :
    TEvePointSet    (name, n_points),

    fLineFitter1    (0),
    fLineFitter2    (0),

    fConnected      (kFALSE),
    fSPMap          (),
    fTrackList      (0),

    fGraphPicked1   (0),
    fGraphLinear1   (0),
    fGraphPicked2   (0),
    fGraphLinear2   (0)
{
  // Constructor.

  SetMarkerColor(3);
  SetOwnIds(kFALSE);

  fTrackList = new TEveTrackList("Cosmic ray");
  fTrackList->SetTitle("muons");
  fTrackList->SetMainColor(8);
  gEve->AddElement(fTrackList);

  fGraphPicked1 = new TGraph();
  fGraphPicked1->SetName("Selected points");
  fGraphPicked1->SetMarkerColor(4);
  fGraphPicked1->SetMarkerStyle(4);
  fGraphPicked1->SetMarkerSize(2);

  fGraphLinear1 = new TGraphErrors();
  fGraphLinear1->SetName("Fitted points");
  fGraphLinear1->SetMarkerColor(2);

  fGraphPicked2 = new TGraph();
  fGraphPicked2->SetName("Selected points");
  fGraphPicked2->SetMarkerColor(4);
  fGraphPicked2->SetMarkerStyle(4);
  fGraphPicked2->SetMarkerSize(2);

  fGraphLinear2 = new TGraphErrors();
  fGraphLinear2->SetName("Fitted points");
  fGraphLinear2->SetMarkerColor(2);
}

AliEveCosmicRayFitter::~AliEveCosmicRayFitter()
{
  // Destructor.

  if(fLineFitter1) delete fLineFitter1;
  if(fLineFitter2) delete fLineFitter2;

  fTrackList->DecDenyDestroy();
  delete fTrackList;
}

/**************************************************************************/
void AliEveCosmicRayFitter::Start()
{
  // Clear existing point selection and maintain connection to the
  // TEvePointSet signal.

  Reset();
  if(fConnected == kFALSE)
  {
    TQObject::Connect("TEvePointSet", "PointSelected(Int_t)",
		      "AliEveCosmicRayFitter", this, "AddFitPoint(Int_t)");
    fConnected = kTRUE;
  }
}

/**************************************************************************/
void AliEveCosmicRayFitter::Stop()
{
  // Stop selection of points.

  if(fConnected)
  {
    TQObject::Disconnect("TEvePointSet", "AddFitPoint(Int_t)");
    fConnected = kFALSE;
  }
}

/**************************************************************************/

void AliEveCosmicRayFitter::Reset(Int_t /*n*/, Int_t /*ids*/)
{
  // Reset selection.

  TEvePointSet::Reset();
  fSPMap.clear();

  if(fLineFitter1) fLineFitter1->Clear();
  if(fLineFitter2) fLineFitter2->Clear();
}

/**************************************************************************/

void AliEveCosmicRayFitter::AddFitPoint(Int_t n)
{
  // Add/remove given point depending if exists in the fSPMap.

  Float_t x, y, z;
  TEvePointSet* ps = dynamic_cast<TEvePointSet*>((TQObject*) gTQSender);
  if(!ps) AliFatal("ps == 0, dynamic cast failed\n");

  std::map<Point_t, Int_t>::iterator g = fSPMap.find(Point_t(ps, n));
  if(g != fSPMap.end())
  {
    Int_t idx = g->second;
    if(idx != fLastPoint)
    {
      GetPoint(fLastPoint, x, y, z);
      SetPoint(idx, x, y, z);
    }
    fSPMap.erase(g);
    fLastPoint--;
  }
  else
  {
    fSPMap[Point_t(ps, n)] = Size();
    ps->GetPoint(n, x, y, z);
    SetNextPoint(x, y, z);
  }

  ComputeBBox();
  ElementChanged(kTRUE, kTRUE);
}

/**************************************************************************/

void AliEveCosmicRayFitter::FitTrack()
{
  // Fit selected points with TLinearFitter fitter.

  static const TEveException eH("CosmicRayFitter::FitTrack ");

  if(fLineFitter1) delete fLineFitter1;
  if(fLineFitter2) delete fLineFitter2;
  fLineFitter1 = new TLinearFitter(1, "hyp1");
  fLineFitter2 = new TLinearFitter(1, "hyp1");

  AliDebug(2, Form(" Selected %3d points:\n", fLastPoint+1));

  Double_t *posXpoint = new Double_t[fLastPoint+1];
  Double_t *posYpoint = new Double_t[fLastPoint+1];
  Double_t *posZpoint = new Double_t[fLastPoint+1];
  Double_t *errYpoint = new Double_t[fLastPoint+1];
  Double_t *errZpoint = new Double_t[fLastPoint+1];
  Double_t x, y, z;
  for (Int_t i=0; i<=fLastPoint; i++) {
    x=0., y=0., z=0.;
    GetPoint(i, x, y, z);
    posXpoint[i] = x;
    posYpoint[i] = y;
    posZpoint[i] = z;
    errYpoint[i] = 10.;//0.05*posYpoint[i];//arbitrary
    errZpoint[i] = 10.;//0.05*posZpoint[i];//arbitrary

    AliDebug(2, Form("(%f, %f, %f) \n", posXpoint[i], posYpoint[i], posZpoint[i]));
  }

  fLineFitter1->AssignData(fLastPoint+1, 1, posXpoint, posYpoint, errYpoint);
  fLineFitter2->AssignData(fLastPoint+1, 1, posXpoint, posZpoint, errZpoint);
  Int_t fitResult1 = fLineFitter1->Eval();
  Int_t fitResult2 = fLineFitter2->Eval();

  if (fitResult1 || fitResult2)
    throw(eH + Form(" linear fit result is not ok (%1i, %1i)", fitResult1, fitResult2));


  delete [] posXpoint;
  delete [] posYpoint;
  delete [] posZpoint;
  delete [] errYpoint;
  delete [] errZpoint;

  // make track
  TVectorD params1;
  TVectorD params2;
  fLineFitter1->GetParameters(params1);
  fLineFitter2->GetParameters(params2);

  TEveRecTrack rc;
  GetPoint(0, x, y, z);
  y = params1(0) + x*params1(1);
  z = params2(0) + x*params2(1);
  rc.fV.Set(x, y, z);
  rc.fP.Set(1, params1(1), params2(1));

  AliEveTrack* track = new AliEveTrack(&rc, fTrackList->GetPropagator());
  track->SetAttLineAttMarker(fTrackList);

  TEveTrackPropagator* tp = fTrackList->GetPropagator();

  tp->InitTrack(rc.fV, 0);
  tp->GoToBounds(rc.fP);

  rc.fP.Set(-1, -params1(1), -params2(1));
  tp->InitTrack(rc.fV, 0);
  tp->GoToBounds(rc.fP);
  tp->FillPointSet(track);
  tp->ResetTrack();

  fTrackList->AddElement(track);
}

/**************************************************************************/
void AliEveCosmicRayFitter::DestroyElements()
{
  // Virtual method of base class Reve::RenderElement.
  // It preserves track list to have coomon track propagator attributes.

  TEveElement::DestroyElements();
  gEve->AddElement(fTrackList, this);
  fTrackList->DestroyElements();
}

/**************************************************************************/
void AliEveCosmicRayFitter::SumDistance3D(Int_t &, Double_t *, Double_t & sum, Double_t * par, Int_t )
{
  //
  // Square sum of distances
  //

  TGraph2D * gr =
    dynamic_cast<TGraph2D*>((TVirtualFitter::GetFitter())->GetObjectFit() );
  assert(gr != 0);

  Double_t * x = gr->GetX();
  Double_t * y = gr->GetY();
  Double_t * z = gr->GetZ();
  Int_t npoints = gr->GetN();
  sum = 0;
  Double_t d = 0;
  for (Int_t i  = 0; i < npoints; ++i) {
    d = Distance3D(x[i],y[i],z[i],par);
    sum += d;
    // printf("%d (%f, %f, %f) dist:%d", i,  x[i], y[i], z[i], TMath::Sqrt(d));
  }
  // printf("Total sum %f\n", sum);
}

/**************************************************************************/
Double_t AliEveCosmicRayFitter::Distance3D(Double_t x, Double_t y, Double_t z, Double_t *p)
{
  //
  // distance line point is D = | (xp-x0) cross  ux |
  // where ux is direction of line and x0 is a point in the line (like t = 0)
  //

  using namespace ROOT::Math;

  XYZVector xp(x,y,z);
  XYZVector x0(0., p[0], p[2]);
  XYZVector x1(1., p[0] + p[1], p[2] + p[3]);
  XYZVector u = (x1-x0).Unit();
  Double_t d2 = ((xp-x0).Cross(u)) .Mag2();
  return d2;
}

/**************************************************************************/
void AliEveCosmicRayFitter::DrawDebugGraph()
{
  //
  // Draw graph of Line fit.
  //

  static const TEveException eH("CosmicRayFitter::DrawDebugGraph ");

  if(fLineFitter1 == 0 || fLineFitter2 == 0)
    throw(eH + "fitter not set.");

  TVectorD params1;
  TVectorD params2;
  fLineFitter1->GetParameters(params1);
  fLineFitter2->GetParameters(params2);

  // fill graphs

  Int_t nR = fLastPoint+1;
  Double_t *x = new Double_t[nR];
  Double_t *y = new Double_t[nR];
  Double_t *z = new Double_t[nR];
  Float_t xx=0., yy=0., zz=0.;
  for (Int_t i=0; i<nR; i++) {
    GetPoint(i, xx, yy, zz);
    x[i] = (Double_t)xx;
    y[i] = (Double_t)yy;
    z[i] = (Double_t)zz;
    AliDebug(2, Form("%d  (%f, %f, %f)\n", i, x[i], y[i], z[i]));
  }

  fGraphPicked1->Set(nR);
  fGraphLinear1->Set(nR);
  fGraphPicked2->Set(nR);
  fGraphLinear2->Set(nR);
  Double_t yCoor = 0.;
  Double_t zCoor = 0.;
  for (Int_t i=0; i<nR; i++)
  {
    yCoor = params1(0) + x[i]*params1(1);
    zCoor = params2(0) + x[i]*params2(1);
    fGraphPicked1->SetPoint(i, x[i], y[i]);
    fGraphLinear1->SetPoint(i, x[i], yCoor);
    fGraphLinear1->SetPointError(i, TMath::Abs(x[i])*0.001, TMath::Abs(yCoor)*0.05);
    fGraphPicked2->SetPoint(i, x[i], z[i]);
    fGraphLinear2->SetPoint(i, x[i], zCoor);
    fGraphLinear2->SetPointError(i, TMath::Abs(x[i])*0.001, TMath::Abs(zCoor)*0.05);
  }
  delete [] x;
  delete [] y;
  delete [] z;


  // draw graphs

  TCanvas * canvas = 0;
  if (gPad) {
	  gPad->Clear();
	  canvas=gPad->GetCanvas();
  }
  if (gPad==0 || gPad->GetCanvas()->IsEditable() == kFALSE) {
    canvas = new TCanvas("canvas", "CosmicRayFitter", 800, 400);
    canvas->Clear();
  }

  canvas->SetHighLightColor(2);
  canvas->Range(0,0,1,1);
  canvas->SetFillColor(0);
  canvas->SetBorderMode(0);
  canvas->SetBorderSize(2);

  TPad *canvas_1 = new TPad("canvas_1", "canvas_1",0.01,0.01,0.49,0.99);
  canvas_1->Draw();
  canvas_1->cd();
  canvas_1->SetFillColor(0);
  canvas_1->SetBorderSize(2);
  canvas_1->SetFrameBorderMode(0);
  fGraphPicked1->Draw("AP");
  fGraphLinear1->Draw("SAME P");
  canvas_1->Modified();
  canvas->cd();

  TPad *canvas_2 = new TPad("canvas_2", "canvas_2",0.51,0.01,0.99,0.99);
  canvas_2->Draw();
  canvas_2->cd();
  canvas_2->SetFillColor(0);
  canvas_2->SetBorderSize(2);
  canvas_2->SetFrameBorderMode(0);
  fGraphPicked2->Draw("AP");
  fGraphLinear2->Draw("SAME P");
  canvas_2->Modified();
  canvas->cd();
}
 AliEveCosmicRayFitter.cxx:1
 AliEveCosmicRayFitter.cxx:2
 AliEveCosmicRayFitter.cxx:3
 AliEveCosmicRayFitter.cxx:4
 AliEveCosmicRayFitter.cxx:5
 AliEveCosmicRayFitter.cxx:6
 AliEveCosmicRayFitter.cxx:7
 AliEveCosmicRayFitter.cxx:8
 AliEveCosmicRayFitter.cxx:9
 AliEveCosmicRayFitter.cxx:10
 AliEveCosmicRayFitter.cxx:11
 AliEveCosmicRayFitter.cxx:12
 AliEveCosmicRayFitter.cxx:13
 AliEveCosmicRayFitter.cxx:14
 AliEveCosmicRayFitter.cxx:15
 AliEveCosmicRayFitter.cxx:16
 AliEveCosmicRayFitter.cxx:17
 AliEveCosmicRayFitter.cxx:18
 AliEveCosmicRayFitter.cxx:19
 AliEveCosmicRayFitter.cxx:20
 AliEveCosmicRayFitter.cxx:21
 AliEveCosmicRayFitter.cxx:22
 AliEveCosmicRayFitter.cxx:23
 AliEveCosmicRayFitter.cxx:24
 AliEveCosmicRayFitter.cxx:25
 AliEveCosmicRayFitter.cxx:26
 AliEveCosmicRayFitter.cxx:27
 AliEveCosmicRayFitter.cxx:28
 AliEveCosmicRayFitter.cxx:29
 AliEveCosmicRayFitter.cxx:30
 AliEveCosmicRayFitter.cxx:31
 AliEveCosmicRayFitter.cxx:32
 AliEveCosmicRayFitter.cxx:33
 AliEveCosmicRayFitter.cxx:34
 AliEveCosmicRayFitter.cxx:35
 AliEveCosmicRayFitter.cxx:36
 AliEveCosmicRayFitter.cxx:37
 AliEveCosmicRayFitter.cxx:38
 AliEveCosmicRayFitter.cxx:39
 AliEveCosmicRayFitter.cxx:40
 AliEveCosmicRayFitter.cxx:41
 AliEveCosmicRayFitter.cxx:42
 AliEveCosmicRayFitter.cxx:43
 AliEveCosmicRayFitter.cxx:44
 AliEveCosmicRayFitter.cxx:45
 AliEveCosmicRayFitter.cxx:46
 AliEveCosmicRayFitter.cxx:47
 AliEveCosmicRayFitter.cxx:48
 AliEveCosmicRayFitter.cxx:49
 AliEveCosmicRayFitter.cxx:50
 AliEveCosmicRayFitter.cxx:51
 AliEveCosmicRayFitter.cxx:52
 AliEveCosmicRayFitter.cxx:53
 AliEveCosmicRayFitter.cxx:54
 AliEveCosmicRayFitter.cxx:55
 AliEveCosmicRayFitter.cxx:56
 AliEveCosmicRayFitter.cxx:57
 AliEveCosmicRayFitter.cxx:58
 AliEveCosmicRayFitter.cxx:59
 AliEveCosmicRayFitter.cxx:60
 AliEveCosmicRayFitter.cxx:61
 AliEveCosmicRayFitter.cxx:62
 AliEveCosmicRayFitter.cxx:63
 AliEveCosmicRayFitter.cxx:64
 AliEveCosmicRayFitter.cxx:65
 AliEveCosmicRayFitter.cxx:66
 AliEveCosmicRayFitter.cxx:67
 AliEveCosmicRayFitter.cxx:68
 AliEveCosmicRayFitter.cxx:69
 AliEveCosmicRayFitter.cxx:70
 AliEveCosmicRayFitter.cxx:71
 AliEveCosmicRayFitter.cxx:72
 AliEveCosmicRayFitter.cxx:73
 AliEveCosmicRayFitter.cxx:74
 AliEveCosmicRayFitter.cxx:75
 AliEveCosmicRayFitter.cxx:76
 AliEveCosmicRayFitter.cxx:77
 AliEveCosmicRayFitter.cxx:78
 AliEveCosmicRayFitter.cxx:79
 AliEveCosmicRayFitter.cxx:80
 AliEveCosmicRayFitter.cxx:81
 AliEveCosmicRayFitter.cxx:82
 AliEveCosmicRayFitter.cxx:83
 AliEveCosmicRayFitter.cxx:84
 AliEveCosmicRayFitter.cxx:85
 AliEveCosmicRayFitter.cxx:86
 AliEveCosmicRayFitter.cxx:87
 AliEveCosmicRayFitter.cxx:88
 AliEveCosmicRayFitter.cxx:89
 AliEveCosmicRayFitter.cxx:90
 AliEveCosmicRayFitter.cxx:91
 AliEveCosmicRayFitter.cxx:92
 AliEveCosmicRayFitter.cxx:93
 AliEveCosmicRayFitter.cxx:94
 AliEveCosmicRayFitter.cxx:95
 AliEveCosmicRayFitter.cxx:96
 AliEveCosmicRayFitter.cxx:97
 AliEveCosmicRayFitter.cxx:98
 AliEveCosmicRayFitter.cxx:99
 AliEveCosmicRayFitter.cxx:100
 AliEveCosmicRayFitter.cxx:101
 AliEveCosmicRayFitter.cxx:102
 AliEveCosmicRayFitter.cxx:103
 AliEveCosmicRayFitter.cxx:104
 AliEveCosmicRayFitter.cxx:105
 AliEveCosmicRayFitter.cxx:106
 AliEveCosmicRayFitter.cxx:107
 AliEveCosmicRayFitter.cxx:108
 AliEveCosmicRayFitter.cxx:109
 AliEveCosmicRayFitter.cxx:110
 AliEveCosmicRayFitter.cxx:111
 AliEveCosmicRayFitter.cxx:112
 AliEveCosmicRayFitter.cxx:113
 AliEveCosmicRayFitter.cxx:114
 AliEveCosmicRayFitter.cxx:115
 AliEveCosmicRayFitter.cxx:116
 AliEveCosmicRayFitter.cxx:117
 AliEveCosmicRayFitter.cxx:118
 AliEveCosmicRayFitter.cxx:119
 AliEveCosmicRayFitter.cxx:120
 AliEveCosmicRayFitter.cxx:121
 AliEveCosmicRayFitter.cxx:122
 AliEveCosmicRayFitter.cxx:123
 AliEveCosmicRayFitter.cxx:124
 AliEveCosmicRayFitter.cxx:125
 AliEveCosmicRayFitter.cxx:126
 AliEveCosmicRayFitter.cxx:127
 AliEveCosmicRayFitter.cxx:128
 AliEveCosmicRayFitter.cxx:129
 AliEveCosmicRayFitter.cxx:130
 AliEveCosmicRayFitter.cxx:131
 AliEveCosmicRayFitter.cxx:132
 AliEveCosmicRayFitter.cxx:133
 AliEveCosmicRayFitter.cxx:134
 AliEveCosmicRayFitter.cxx:135
 AliEveCosmicRayFitter.cxx:136
 AliEveCosmicRayFitter.cxx:137
 AliEveCosmicRayFitter.cxx:138
 AliEveCosmicRayFitter.cxx:139
 AliEveCosmicRayFitter.cxx:140
 AliEveCosmicRayFitter.cxx:141
 AliEveCosmicRayFitter.cxx:142
 AliEveCosmicRayFitter.cxx:143
 AliEveCosmicRayFitter.cxx:144
 AliEveCosmicRayFitter.cxx:145
 AliEveCosmicRayFitter.cxx:146
 AliEveCosmicRayFitter.cxx:147
 AliEveCosmicRayFitter.cxx:148
 AliEveCosmicRayFitter.cxx:149
 AliEveCosmicRayFitter.cxx:150
 AliEveCosmicRayFitter.cxx:151
 AliEveCosmicRayFitter.cxx:152
 AliEveCosmicRayFitter.cxx:153
 AliEveCosmicRayFitter.cxx:154
 AliEveCosmicRayFitter.cxx:155
 AliEveCosmicRayFitter.cxx:156
 AliEveCosmicRayFitter.cxx:157
 AliEveCosmicRayFitter.cxx:158
 AliEveCosmicRayFitter.cxx:159
 AliEveCosmicRayFitter.cxx:160
 AliEveCosmicRayFitter.cxx:161
 AliEveCosmicRayFitter.cxx:162
 AliEveCosmicRayFitter.cxx:163
 AliEveCosmicRayFitter.cxx:164
 AliEveCosmicRayFitter.cxx:165
 AliEveCosmicRayFitter.cxx:166
 AliEveCosmicRayFitter.cxx:167
 AliEveCosmicRayFitter.cxx:168
 AliEveCosmicRayFitter.cxx:169
 AliEveCosmicRayFitter.cxx:170
 AliEveCosmicRayFitter.cxx:171
 AliEveCosmicRayFitter.cxx:172
 AliEveCosmicRayFitter.cxx:173
 AliEveCosmicRayFitter.cxx:174
 AliEveCosmicRayFitter.cxx:175
 AliEveCosmicRayFitter.cxx:176
 AliEveCosmicRayFitter.cxx:177
 AliEveCosmicRayFitter.cxx:178
 AliEveCosmicRayFitter.cxx:179
 AliEveCosmicRayFitter.cxx:180
 AliEveCosmicRayFitter.cxx:181
 AliEveCosmicRayFitter.cxx:182
 AliEveCosmicRayFitter.cxx:183
 AliEveCosmicRayFitter.cxx:184
 AliEveCosmicRayFitter.cxx:185
 AliEveCosmicRayFitter.cxx:186
 AliEveCosmicRayFitter.cxx:187
 AliEveCosmicRayFitter.cxx:188
 AliEveCosmicRayFitter.cxx:189
 AliEveCosmicRayFitter.cxx:190
 AliEveCosmicRayFitter.cxx:191
 AliEveCosmicRayFitter.cxx:192
 AliEveCosmicRayFitter.cxx:193
 AliEveCosmicRayFitter.cxx:194
 AliEveCosmicRayFitter.cxx:195
 AliEveCosmicRayFitter.cxx:196
 AliEveCosmicRayFitter.cxx:197
 AliEveCosmicRayFitter.cxx:198
 AliEveCosmicRayFitter.cxx:199
 AliEveCosmicRayFitter.cxx:200
 AliEveCosmicRayFitter.cxx:201
 AliEveCosmicRayFitter.cxx:202
 AliEveCosmicRayFitter.cxx:203
 AliEveCosmicRayFitter.cxx:204
 AliEveCosmicRayFitter.cxx:205
 AliEveCosmicRayFitter.cxx:206
 AliEveCosmicRayFitter.cxx:207
 AliEveCosmicRayFitter.cxx:208
 AliEveCosmicRayFitter.cxx:209
 AliEveCosmicRayFitter.cxx:210
 AliEveCosmicRayFitter.cxx:211
 AliEveCosmicRayFitter.cxx:212
 AliEveCosmicRayFitter.cxx:213
 AliEveCosmicRayFitter.cxx:214
 AliEveCosmicRayFitter.cxx:215
 AliEveCosmicRayFitter.cxx:216
 AliEveCosmicRayFitter.cxx:217
 AliEveCosmicRayFitter.cxx:218
 AliEveCosmicRayFitter.cxx:219
 AliEveCosmicRayFitter.cxx:220
 AliEveCosmicRayFitter.cxx:221
 AliEveCosmicRayFitter.cxx:222
 AliEveCosmicRayFitter.cxx:223
 AliEveCosmicRayFitter.cxx:224
 AliEveCosmicRayFitter.cxx:225
 AliEveCosmicRayFitter.cxx:226
 AliEveCosmicRayFitter.cxx:227
 AliEveCosmicRayFitter.cxx:228
 AliEveCosmicRayFitter.cxx:229
 AliEveCosmicRayFitter.cxx:230
 AliEveCosmicRayFitter.cxx:231
 AliEveCosmicRayFitter.cxx:232
 AliEveCosmicRayFitter.cxx:233
 AliEveCosmicRayFitter.cxx:234
 AliEveCosmicRayFitter.cxx:235
 AliEveCosmicRayFitter.cxx:236
 AliEveCosmicRayFitter.cxx:237
 AliEveCosmicRayFitter.cxx:238
 AliEveCosmicRayFitter.cxx:239
 AliEveCosmicRayFitter.cxx:240
 AliEveCosmicRayFitter.cxx:241
 AliEveCosmicRayFitter.cxx:242
 AliEveCosmicRayFitter.cxx:243
 AliEveCosmicRayFitter.cxx:244
 AliEveCosmicRayFitter.cxx:245
 AliEveCosmicRayFitter.cxx:246
 AliEveCosmicRayFitter.cxx:247
 AliEveCosmicRayFitter.cxx:248
 AliEveCosmicRayFitter.cxx:249
 AliEveCosmicRayFitter.cxx:250
 AliEveCosmicRayFitter.cxx:251
 AliEveCosmicRayFitter.cxx:252
 AliEveCosmicRayFitter.cxx:253
 AliEveCosmicRayFitter.cxx:254
 AliEveCosmicRayFitter.cxx:255
 AliEveCosmicRayFitter.cxx:256
 AliEveCosmicRayFitter.cxx:257
 AliEveCosmicRayFitter.cxx:258
 AliEveCosmicRayFitter.cxx:259
 AliEveCosmicRayFitter.cxx:260
 AliEveCosmicRayFitter.cxx:261
 AliEveCosmicRayFitter.cxx:262
 AliEveCosmicRayFitter.cxx:263
 AliEveCosmicRayFitter.cxx:264
 AliEveCosmicRayFitter.cxx:265
 AliEveCosmicRayFitter.cxx:266
 AliEveCosmicRayFitter.cxx:267
 AliEveCosmicRayFitter.cxx:268
 AliEveCosmicRayFitter.cxx:269
 AliEveCosmicRayFitter.cxx:270
 AliEveCosmicRayFitter.cxx:271
 AliEveCosmicRayFitter.cxx:272
 AliEveCosmicRayFitter.cxx:273
 AliEveCosmicRayFitter.cxx:274
 AliEveCosmicRayFitter.cxx:275
 AliEveCosmicRayFitter.cxx:276
 AliEveCosmicRayFitter.cxx:277
 AliEveCosmicRayFitter.cxx:278
 AliEveCosmicRayFitter.cxx:279
 AliEveCosmicRayFitter.cxx:280
 AliEveCosmicRayFitter.cxx:281
 AliEveCosmicRayFitter.cxx:282
 AliEveCosmicRayFitter.cxx:283
 AliEveCosmicRayFitter.cxx:284
 AliEveCosmicRayFitter.cxx:285
 AliEveCosmicRayFitter.cxx:286
 AliEveCosmicRayFitter.cxx:287
 AliEveCosmicRayFitter.cxx:288
 AliEveCosmicRayFitter.cxx:289
 AliEveCosmicRayFitter.cxx:290
 AliEveCosmicRayFitter.cxx:291
 AliEveCosmicRayFitter.cxx:292
 AliEveCosmicRayFitter.cxx:293
 AliEveCosmicRayFitter.cxx:294
 AliEveCosmicRayFitter.cxx:295
 AliEveCosmicRayFitter.cxx:296
 AliEveCosmicRayFitter.cxx:297
 AliEveCosmicRayFitter.cxx:298
 AliEveCosmicRayFitter.cxx:299
 AliEveCosmicRayFitter.cxx:300
 AliEveCosmicRayFitter.cxx:301
 AliEveCosmicRayFitter.cxx:302
 AliEveCosmicRayFitter.cxx:303
 AliEveCosmicRayFitter.cxx:304
 AliEveCosmicRayFitter.cxx:305
 AliEveCosmicRayFitter.cxx:306
 AliEveCosmicRayFitter.cxx:307
 AliEveCosmicRayFitter.cxx:308
 AliEveCosmicRayFitter.cxx:309
 AliEveCosmicRayFitter.cxx:310
 AliEveCosmicRayFitter.cxx:311
 AliEveCosmicRayFitter.cxx:312
 AliEveCosmicRayFitter.cxx:313
 AliEveCosmicRayFitter.cxx:314
 AliEveCosmicRayFitter.cxx:315
 AliEveCosmicRayFitter.cxx:316
 AliEveCosmicRayFitter.cxx:317
 AliEveCosmicRayFitter.cxx:318
 AliEveCosmicRayFitter.cxx:319
 AliEveCosmicRayFitter.cxx:320
 AliEveCosmicRayFitter.cxx:321
 AliEveCosmicRayFitter.cxx:322
 AliEveCosmicRayFitter.cxx:323
 AliEveCosmicRayFitter.cxx:324
 AliEveCosmicRayFitter.cxx:325
 AliEveCosmicRayFitter.cxx:326
 AliEveCosmicRayFitter.cxx:327
 AliEveCosmicRayFitter.cxx:328
 AliEveCosmicRayFitter.cxx:329
 AliEveCosmicRayFitter.cxx:330
 AliEveCosmicRayFitter.cxx:331
 AliEveCosmicRayFitter.cxx:332
 AliEveCosmicRayFitter.cxx:333
 AliEveCosmicRayFitter.cxx:334
 AliEveCosmicRayFitter.cxx:335
 AliEveCosmicRayFitter.cxx:336
 AliEveCosmicRayFitter.cxx:337
 AliEveCosmicRayFitter.cxx:338
 AliEveCosmicRayFitter.cxx:339
 AliEveCosmicRayFitter.cxx:340
 AliEveCosmicRayFitter.cxx:341
 AliEveCosmicRayFitter.cxx:342
 AliEveCosmicRayFitter.cxx:343
 AliEveCosmicRayFitter.cxx:344
 AliEveCosmicRayFitter.cxx:345
 AliEveCosmicRayFitter.cxx:346
 AliEveCosmicRayFitter.cxx:347
 AliEveCosmicRayFitter.cxx:348
 AliEveCosmicRayFitter.cxx:349
 AliEveCosmicRayFitter.cxx:350
 AliEveCosmicRayFitter.cxx:351
 AliEveCosmicRayFitter.cxx:352
 AliEveCosmicRayFitter.cxx:353
 AliEveCosmicRayFitter.cxx:354
 AliEveCosmicRayFitter.cxx:355
 AliEveCosmicRayFitter.cxx:356
 AliEveCosmicRayFitter.cxx:357
 AliEveCosmicRayFitter.cxx:358
 AliEveCosmicRayFitter.cxx:359
 AliEveCosmicRayFitter.cxx:360
 AliEveCosmicRayFitter.cxx:361
 AliEveCosmicRayFitter.cxx:362
 AliEveCosmicRayFitter.cxx:363
 AliEveCosmicRayFitter.cxx:364
 AliEveCosmicRayFitter.cxx:365
 AliEveCosmicRayFitter.cxx:366
 AliEveCosmicRayFitter.cxx:367
 AliEveCosmicRayFitter.cxx:368
 AliEveCosmicRayFitter.cxx:369
 AliEveCosmicRayFitter.cxx:370
 AliEveCosmicRayFitter.cxx:371
 AliEveCosmicRayFitter.cxx:372
 AliEveCosmicRayFitter.cxx:373
 AliEveCosmicRayFitter.cxx:374
 AliEveCosmicRayFitter.cxx:375
 AliEveCosmicRayFitter.cxx:376
 AliEveCosmicRayFitter.cxx:377
 AliEveCosmicRayFitter.cxx:378
 AliEveCosmicRayFitter.cxx:379
 AliEveCosmicRayFitter.cxx:380
 AliEveCosmicRayFitter.cxx:381
 AliEveCosmicRayFitter.cxx:382
 AliEveCosmicRayFitter.cxx:383
 AliEveCosmicRayFitter.cxx:384
 AliEveCosmicRayFitter.cxx:385
 AliEveCosmicRayFitter.cxx:386
 AliEveCosmicRayFitter.cxx:387
 AliEveCosmicRayFitter.cxx:388
 AliEveCosmicRayFitter.cxx:389
 AliEveCosmicRayFitter.cxx:390
 AliEveCosmicRayFitter.cxx:391
 AliEveCosmicRayFitter.cxx:392
 AliEveCosmicRayFitter.cxx:393
 AliEveCosmicRayFitter.cxx:394
 AliEveCosmicRayFitter.cxx:395
 AliEveCosmicRayFitter.cxx:396
 AliEveCosmicRayFitter.cxx:397
 AliEveCosmicRayFitter.cxx:398
 AliEveCosmicRayFitter.cxx:399
 AliEveCosmicRayFitter.cxx:400
 AliEveCosmicRayFitter.cxx:401
 AliEveCosmicRayFitter.cxx:402
 AliEveCosmicRayFitter.cxx:403