ROOT logo
/**************************************************************************
* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
*                                                                        *
* Author: The ALICE Off-line Project.                                    *
* Contributors are mentioned in the code where appropriate.              *
*                                                                        *
* Permission to use, copy, modify and distribute this software and its   *
* documentation strictly for non-commercialf purposes is hereby granted   *
* without fee, provided that the above copyright notice appears in all   *
* copies and that both the copyright notice and this permission notice   *
* appear in the supporting documentation. The authors make no claims     *
* about the suitability of this software for any purpose. It is          *
* provided "as is" without express or implied warranty.                  *
**************************************************************************/

///////////////////////////////////////////////
// TRD alignment task
//
// Some documentation
//
// Authors :
//
////////////////////////////////////////////////

#include "TTreeStream.h"
#include "TROOT.h"
#include "TH1.h"
#include "TH2.h"

#include "AliTrackPointArray.h"
#include "AliLog.h"

#include "AliTRDgeometry.h"
#include "AliTRDcluster.h"
#include "AliTRDseedV1.h"
#include "AliTRDtrackV1.h"

#include "AliTRDalignmentTask.h"

ClassImp(AliTRDalignmentTask)

//________________________________________________________
AliTRDalignmentTask::AliTRDalignmentTask()
  :AliTRDrecoTask()
  ,fTree(0x0)
  ,fArray(0x0)
{
  InitFunctorList();
}

AliTRDalignmentTask::AliTRDalignmentTask(char* name)
  :AliTRDrecoTask(name, "TRD alignment")
  ,fTree(0x0)
  ,fArray(0x0)
{
  InitFunctorList();
  DefineOutput(2, TTree::Class());
}

//________________________________________________________
AliTRDalignmentTask::~AliTRDalignmentTask()
{
  if (fArray) delete fArray;
}


//________________________________________________________
void AliTRDalignmentTask::UserCreateOutputObjects()
{
  // spatial resolution

  if(!HasFunctorList()) InitFunctorList();
  OpenFile(2, "RECREATE");

  fTree = new TTree("spTree", "Tree with track space point arrays");
  fTree->Branch("SP","AliTrackPointArray", &fArray);
}


//________________________________________________________
void AliTRDalignmentTask::UserExec(Option_t *opt)
{
// Documentation to come

  AliTRDrecoTask::UserExec(opt);
  PostData(2, fTree);
}


//________________________________________________________
TH1* AliTRDalignmentTask::PlotTrackPoints(const AliTRDtrackV1 *track)
{
// Documentation to come 

  if(track) fkTrack = track;
  if(!fkTrack){
    AliWarning("No Track defined.");
    return 0x0;
  }

  if (fArray) delete fArray;
  fArray = new AliTrackPointArray(fkTrack->GetNumberOfTracklets());

  // Filling the track points array
  Float_t x, y, z;
  AliTrackPoint p; Int_t ip = 0;
  AliTRDseedV1 *tracklet = 0x0;
  for(Int_t il=0; il<AliTRDgeometry::kNlayer; il++){
    if(!(tracklet = fkTrack->GetTracklet(il))) continue;
    if(!tracklet->IsOK()) continue;
    tracklet->Fit(kTRUE);

    x = tracklet->GetX0();
    y = tracklet->GetYfit(0)-tracklet->GetYfit(1)*(tracklet->GetX0()-x);
    z = tracklet->GetZfit(0);
    p.SetXYZ(x,y,z);
    fArray->AddPoint(ip++, &p);
  }
  fTree->Fill();

/*  if(fDebugLevel>=1){
    Float_t yt = fRim.GetYat(x[il]);
    (*fDebugStream) << "TrkltResiduals"
      << "layer="  << il
      << "x="      <<x[il]
      << "y="      <<y[il]
      << "yt="     <<yt
      << "dydx="   << dydx[il]
      << "dy="     << dy
      << "\n";
  }*/
  return 0x0;
}



//________________________________________________________
Bool_t AliTRDalignmentTask::IsIdenticalWithOneOf(AliTrackPoint * const p, AliTrackPointArray *parray, int nmax) {

  // Is the point p identical with one of the points on the list parray?
  // This is a fix for aliroot 4-16-Rev-01 (and before) writing some 
  // spurious unitialized points. 
 
  for (int i=0; i<parray->GetNPoints() && i<nmax; i++) {
    AliTrackPoint pa;
    parray->GetPoint(pa,i);
    //printf("comparing %7.3f with %7.3f\n",p->GetY(),pa.GetY());
    if (p->GetResidual(pa,0)<1e-8) return kTRUE;
    //printf("different\n");
  }
  return kFALSE;
}
 AliTRDalignmentTask.cxx:1
 AliTRDalignmentTask.cxx:2
 AliTRDalignmentTask.cxx:3
 AliTRDalignmentTask.cxx:4
 AliTRDalignmentTask.cxx:5
 AliTRDalignmentTask.cxx:6
 AliTRDalignmentTask.cxx:7
 AliTRDalignmentTask.cxx:8
 AliTRDalignmentTask.cxx:9
 AliTRDalignmentTask.cxx:10
 AliTRDalignmentTask.cxx:11
 AliTRDalignmentTask.cxx:12
 AliTRDalignmentTask.cxx:13
 AliTRDalignmentTask.cxx:14
 AliTRDalignmentTask.cxx:15
 AliTRDalignmentTask.cxx:16
 AliTRDalignmentTask.cxx:17
 AliTRDalignmentTask.cxx:18
 AliTRDalignmentTask.cxx:19
 AliTRDalignmentTask.cxx:20
 AliTRDalignmentTask.cxx:21
 AliTRDalignmentTask.cxx:22
 AliTRDalignmentTask.cxx:23
 AliTRDalignmentTask.cxx:24
 AliTRDalignmentTask.cxx:25
 AliTRDalignmentTask.cxx:26
 AliTRDalignmentTask.cxx:27
 AliTRDalignmentTask.cxx:28
 AliTRDalignmentTask.cxx:29
 AliTRDalignmentTask.cxx:30
 AliTRDalignmentTask.cxx:31
 AliTRDalignmentTask.cxx:32
 AliTRDalignmentTask.cxx:33
 AliTRDalignmentTask.cxx:34
 AliTRDalignmentTask.cxx:35
 AliTRDalignmentTask.cxx:36
 AliTRDalignmentTask.cxx:37
 AliTRDalignmentTask.cxx:38
 AliTRDalignmentTask.cxx:39
 AliTRDalignmentTask.cxx:40
 AliTRDalignmentTask.cxx:41
 AliTRDalignmentTask.cxx:42
 AliTRDalignmentTask.cxx:43
 AliTRDalignmentTask.cxx:44
 AliTRDalignmentTask.cxx:45
 AliTRDalignmentTask.cxx:46
 AliTRDalignmentTask.cxx:47
 AliTRDalignmentTask.cxx:48
 AliTRDalignmentTask.cxx:49
 AliTRDalignmentTask.cxx:50
 AliTRDalignmentTask.cxx:51
 AliTRDalignmentTask.cxx:52
 AliTRDalignmentTask.cxx:53
 AliTRDalignmentTask.cxx:54
 AliTRDalignmentTask.cxx:55
 AliTRDalignmentTask.cxx:56
 AliTRDalignmentTask.cxx:57
 AliTRDalignmentTask.cxx:58
 AliTRDalignmentTask.cxx:59
 AliTRDalignmentTask.cxx:60
 AliTRDalignmentTask.cxx:61
 AliTRDalignmentTask.cxx:62
 AliTRDalignmentTask.cxx:63
 AliTRDalignmentTask.cxx:64
 AliTRDalignmentTask.cxx:65
 AliTRDalignmentTask.cxx:66
 AliTRDalignmentTask.cxx:67
 AliTRDalignmentTask.cxx:68
 AliTRDalignmentTask.cxx:69
 AliTRDalignmentTask.cxx:70
 AliTRDalignmentTask.cxx:71
 AliTRDalignmentTask.cxx:72
 AliTRDalignmentTask.cxx:73
 AliTRDalignmentTask.cxx:74
 AliTRDalignmentTask.cxx:75
 AliTRDalignmentTask.cxx:76
 AliTRDalignmentTask.cxx:77
 AliTRDalignmentTask.cxx:78
 AliTRDalignmentTask.cxx:79
 AliTRDalignmentTask.cxx:80
 AliTRDalignmentTask.cxx:81
 AliTRDalignmentTask.cxx:82
 AliTRDalignmentTask.cxx:83
 AliTRDalignmentTask.cxx:84
 AliTRDalignmentTask.cxx:85
 AliTRDalignmentTask.cxx:86
 AliTRDalignmentTask.cxx:87
 AliTRDalignmentTask.cxx:88
 AliTRDalignmentTask.cxx:89
 AliTRDalignmentTask.cxx:90
 AliTRDalignmentTask.cxx:91
 AliTRDalignmentTask.cxx:92
 AliTRDalignmentTask.cxx:93
 AliTRDalignmentTask.cxx:94
 AliTRDalignmentTask.cxx:95
 AliTRDalignmentTask.cxx:96
 AliTRDalignmentTask.cxx:97
 AliTRDalignmentTask.cxx:98
 AliTRDalignmentTask.cxx:99
 AliTRDalignmentTask.cxx:100
 AliTRDalignmentTask.cxx:101
 AliTRDalignmentTask.cxx:102
 AliTRDalignmentTask.cxx:103
 AliTRDalignmentTask.cxx:104
 AliTRDalignmentTask.cxx:105
 AliTRDalignmentTask.cxx:106
 AliTRDalignmentTask.cxx:107
 AliTRDalignmentTask.cxx:108
 AliTRDalignmentTask.cxx:109
 AliTRDalignmentTask.cxx:110
 AliTRDalignmentTask.cxx:111
 AliTRDalignmentTask.cxx:112
 AliTRDalignmentTask.cxx:113
 AliTRDalignmentTask.cxx:114
 AliTRDalignmentTask.cxx:115
 AliTRDalignmentTask.cxx:116
 AliTRDalignmentTask.cxx:117
 AliTRDalignmentTask.cxx:118
 AliTRDalignmentTask.cxx:119
 AliTRDalignmentTask.cxx:120
 AliTRDalignmentTask.cxx:121
 AliTRDalignmentTask.cxx:122
 AliTRDalignmentTask.cxx:123
 AliTRDalignmentTask.cxx:124
 AliTRDalignmentTask.cxx:125
 AliTRDalignmentTask.cxx:126
 AliTRDalignmentTask.cxx:127
 AliTRDalignmentTask.cxx:128
 AliTRDalignmentTask.cxx:129
 AliTRDalignmentTask.cxx:130
 AliTRDalignmentTask.cxx:131
 AliTRDalignmentTask.cxx:132
 AliTRDalignmentTask.cxx:133
 AliTRDalignmentTask.cxx:134
 AliTRDalignmentTask.cxx:135
 AliTRDalignmentTask.cxx:136
 AliTRDalignmentTask.cxx:137
 AliTRDalignmentTask.cxx:138
 AliTRDalignmentTask.cxx:139
 AliTRDalignmentTask.cxx:140
 AliTRDalignmentTask.cxx:141
 AliTRDalignmentTask.cxx:142
 AliTRDalignmentTask.cxx:143
 AliTRDalignmentTask.cxx:144
 AliTRDalignmentTask.cxx:145
 AliTRDalignmentTask.cxx:146
 AliTRDalignmentTask.cxx:147
 AliTRDalignmentTask.cxx:148
 AliTRDalignmentTask.cxx:149
 AliTRDalignmentTask.cxx:150
 AliTRDalignmentTask.cxx:151
 AliTRDalignmentTask.cxx:152