ROOT logo
#ifndef ALIPHOSTRACKSEGMENTMAKERV2_H
#define ALIPHOSTRACKSEGMENTMAKERV2_H
/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 * See cxx source for full Copyright notice                               */

/* $Id$ */
/* History of cvs commits:
 *
 * $Log$
 * Revision 1.3  2007/04/25 19:39:42  kharlov
 * Track extracpolation improved
 *
 * Revision 1.2  2007/04/01 19:16:52  kharlov
 * D.P.: Produce EMCTrackSegments using TPC/ITS tracks (no CPV)
 *
 * Revision 1.50  2007/03/06 06:54:48  kharlov
 * DP:Calculation of cluster properties dep. on vertex added
 *
 * Revision 1.49  2007/02/01 13:59:11  hristov
 * Forward declaration
 *
 * Revision 1.48  2006/08/28 10:01:56  kharlov
 * Effective C++ warnings fixed (Timur Pocheptsov)
 *
 * Revision 1.47  2005/11/17 12:35:27  hristov
 * Use references instead of objects. Avoid to create objects when they are not really needed
 *
 * Revision 1.46  2005/05/28 14:19:05  schutz
 * Compilation warnings fixed by T.P.
 *
 */

//_________________________________________________________________________
// Implementation version 1 of algorithm class to construct PHOS track segments
// Associates EMC and CPV lusters
// Unfolds the EMC cluster   
//                  
//*-- Author: Dmitri Peressounko (RRC Ki & SUBATECH)
#include <vector>

// --- ROOT system ---
#include <TVector3.h>

// --- Standard library ---

// --- AliRoot header files ---
#include "AliPHOSTrackSegmentMaker.h"

class AliPHOSEmcRecPoint ;
class AliPHOSCpvRecPoint ;
class AliESDtrack ;
class TClonesArray;

class  AliPHOSTrackSegmentMakerv2 : public AliPHOSTrackSegmentMaker {

public:

  AliPHOSTrackSegmentMakerv2() ;                     
  AliPHOSTrackSegmentMakerv2(AliPHOSGeometry *geom);
  AliPHOSTrackSegmentMakerv2(const AliPHOSTrackSegmentMakerv2 & tsm);

  virtual ~ AliPHOSTrackSegmentMakerv2() ; // dtor
  
  virtual void   Clusters2TrackSegments(Option_t *option); // Does the job
          void   FillOneModule() ;       // Finds range in which RecPoints belonging current PHOS module are

          void   MakeLinks() ;           //Evaluates distances(links) between EMC and CPV
          void   MakePairs() ;           //Finds pairs(triplets) with smallest link
  virtual void   Print(const Option_t * = "") const ;
  //Switch to "on flyght" mode, without writing to TreeR and file  
  void SetWriting(Bool_t toWrite = kFALSE){fWrite = toWrite;} 
  virtual void   SetMaxTPCDistance(Float_t r){ fRtpc = r ;} //Maximal distance 
                                                               //between EMCrp and extrapolation of TPC track
 virtual const char * Version() const { return "tsm-v2" ; }  

  AliPHOSTrackSegmentMakerv2 & operator = (const AliPHOSTrackSegmentMakerv2 & )  {
    // assignement operator requested by coding convention but not needed
    Fatal("operator =", "not implemented") ;
    return *this ; 
  }

  virtual TClonesArray * GetTrackSegments() const { return fTrackSegments; }

private:

  void  GetDistanceInPHOSPlane(AliPHOSEmcRecPoint * EmcClu , AliESDtrack* track,
                               Float_t &dx, Float_t &dz ) const ; // see R0
  void    Init() ;
  void    InitParameters() ;
  void    PrintTrackSegments(Option_t *option) ;

protected: 
  struct TrackInPHOS_t {
     AliESDtrack* track ;
     Float_t      x ; //Raw X intersection coordinate
     Float_t      z ; //Raw Z intersection coordinate
  } ;

private:  

  Bool_t  fDefaultInit;               //! Says if the task was created by defaut ctor (only parameters are initialized)
  Bool_t  fWrite ;                   // Write Tracks to TreeT  
 
  Int_t fNTrackSegments ; // number of track segments found 

  Float_t fRtpc ;        // Maximum distance between a EMC RecPoint and extrapolation of a TPC track   
  
  TVector3 fVtx ;        //! Vertex in current position

  TClonesArray * fLinkUpArray  ;  //!
  std::vector<TrackInPHOS_t> fTPCtracks[5];  //!
  Int_t fNtpcTracks[5] ;  //!
  Int_t fEmcFirst;     //! Index of first EMC RecPoint belonging to currect PHOS module
  Int_t fEmcLast ;     //!
  Int_t fModule ;      //! number of module being processed

  TClonesArray * fTrackSegments; // Array with found track-segments

  ClassDef( AliPHOSTrackSegmentMakerv2,2)  // Implementation version 1 of algorithm class to make PHOS track segments 

 };

#endif // AliPHOSTRACKSEGMENTMAKERV2_H
 AliPHOSTrackSegmentMakerv2.h:1
 AliPHOSTrackSegmentMakerv2.h:2
 AliPHOSTrackSegmentMakerv2.h:3
 AliPHOSTrackSegmentMakerv2.h:4
 AliPHOSTrackSegmentMakerv2.h:5
 AliPHOSTrackSegmentMakerv2.h:6
 AliPHOSTrackSegmentMakerv2.h:7
 AliPHOSTrackSegmentMakerv2.h:8
 AliPHOSTrackSegmentMakerv2.h:9
 AliPHOSTrackSegmentMakerv2.h:10
 AliPHOSTrackSegmentMakerv2.h:11
 AliPHOSTrackSegmentMakerv2.h:12
 AliPHOSTrackSegmentMakerv2.h:13
 AliPHOSTrackSegmentMakerv2.h:14
 AliPHOSTrackSegmentMakerv2.h:15
 AliPHOSTrackSegmentMakerv2.h:16
 AliPHOSTrackSegmentMakerv2.h:17
 AliPHOSTrackSegmentMakerv2.h:18
 AliPHOSTrackSegmentMakerv2.h:19
 AliPHOSTrackSegmentMakerv2.h:20
 AliPHOSTrackSegmentMakerv2.h:21
 AliPHOSTrackSegmentMakerv2.h:22
 AliPHOSTrackSegmentMakerv2.h:23
 AliPHOSTrackSegmentMakerv2.h:24
 AliPHOSTrackSegmentMakerv2.h:25
 AliPHOSTrackSegmentMakerv2.h:26
 AliPHOSTrackSegmentMakerv2.h:27
 AliPHOSTrackSegmentMakerv2.h:28
 AliPHOSTrackSegmentMakerv2.h:29
 AliPHOSTrackSegmentMakerv2.h:30
 AliPHOSTrackSegmentMakerv2.h:31
 AliPHOSTrackSegmentMakerv2.h:32
 AliPHOSTrackSegmentMakerv2.h:33
 AliPHOSTrackSegmentMakerv2.h:34
 AliPHOSTrackSegmentMakerv2.h:35
 AliPHOSTrackSegmentMakerv2.h:36
 AliPHOSTrackSegmentMakerv2.h:37
 AliPHOSTrackSegmentMakerv2.h:38
 AliPHOSTrackSegmentMakerv2.h:39
 AliPHOSTrackSegmentMakerv2.h:40
 AliPHOSTrackSegmentMakerv2.h:41
 AliPHOSTrackSegmentMakerv2.h:42
 AliPHOSTrackSegmentMakerv2.h:43
 AliPHOSTrackSegmentMakerv2.h:44
 AliPHOSTrackSegmentMakerv2.h:45
 AliPHOSTrackSegmentMakerv2.h:46
 AliPHOSTrackSegmentMakerv2.h:47
 AliPHOSTrackSegmentMakerv2.h:48
 AliPHOSTrackSegmentMakerv2.h:49
 AliPHOSTrackSegmentMakerv2.h:50
 AliPHOSTrackSegmentMakerv2.h:51
 AliPHOSTrackSegmentMakerv2.h:52
 AliPHOSTrackSegmentMakerv2.h:53
 AliPHOSTrackSegmentMakerv2.h:54
 AliPHOSTrackSegmentMakerv2.h:55
 AliPHOSTrackSegmentMakerv2.h:56
 AliPHOSTrackSegmentMakerv2.h:57
 AliPHOSTrackSegmentMakerv2.h:58
 AliPHOSTrackSegmentMakerv2.h:59
 AliPHOSTrackSegmentMakerv2.h:60
 AliPHOSTrackSegmentMakerv2.h:61
 AliPHOSTrackSegmentMakerv2.h:62
 AliPHOSTrackSegmentMakerv2.h:63
 AliPHOSTrackSegmentMakerv2.h:64
 AliPHOSTrackSegmentMakerv2.h:65
 AliPHOSTrackSegmentMakerv2.h:66
 AliPHOSTrackSegmentMakerv2.h:67
 AliPHOSTrackSegmentMakerv2.h:68
 AliPHOSTrackSegmentMakerv2.h:69
 AliPHOSTrackSegmentMakerv2.h:70
 AliPHOSTrackSegmentMakerv2.h:71
 AliPHOSTrackSegmentMakerv2.h:72
 AliPHOSTrackSegmentMakerv2.h:73
 AliPHOSTrackSegmentMakerv2.h:74
 AliPHOSTrackSegmentMakerv2.h:75
 AliPHOSTrackSegmentMakerv2.h:76
 AliPHOSTrackSegmentMakerv2.h:77
 AliPHOSTrackSegmentMakerv2.h:78
 AliPHOSTrackSegmentMakerv2.h:79
 AliPHOSTrackSegmentMakerv2.h:80
 AliPHOSTrackSegmentMakerv2.h:81
 AliPHOSTrackSegmentMakerv2.h:82
 AliPHOSTrackSegmentMakerv2.h:83
 AliPHOSTrackSegmentMakerv2.h:84
 AliPHOSTrackSegmentMakerv2.h:85
 AliPHOSTrackSegmentMakerv2.h:86
 AliPHOSTrackSegmentMakerv2.h:87
 AliPHOSTrackSegmentMakerv2.h:88
 AliPHOSTrackSegmentMakerv2.h:89
 AliPHOSTrackSegmentMakerv2.h:90
 AliPHOSTrackSegmentMakerv2.h:91
 AliPHOSTrackSegmentMakerv2.h:92
 AliPHOSTrackSegmentMakerv2.h:93
 AliPHOSTrackSegmentMakerv2.h:94
 AliPHOSTrackSegmentMakerv2.h:95
 AliPHOSTrackSegmentMakerv2.h:96
 AliPHOSTrackSegmentMakerv2.h:97
 AliPHOSTrackSegmentMakerv2.h:98
 AliPHOSTrackSegmentMakerv2.h:99
 AliPHOSTrackSegmentMakerv2.h:100
 AliPHOSTrackSegmentMakerv2.h:101
 AliPHOSTrackSegmentMakerv2.h:102
 AliPHOSTrackSegmentMakerv2.h:103
 AliPHOSTrackSegmentMakerv2.h:104
 AliPHOSTrackSegmentMakerv2.h:105
 AliPHOSTrackSegmentMakerv2.h:106
 AliPHOSTrackSegmentMakerv2.h:107
 AliPHOSTrackSegmentMakerv2.h:108
 AliPHOSTrackSegmentMakerv2.h:109
 AliPHOSTrackSegmentMakerv2.h:110
 AliPHOSTrackSegmentMakerv2.h:111
 AliPHOSTrackSegmentMakerv2.h:112
 AliPHOSTrackSegmentMakerv2.h:113
 AliPHOSTrackSegmentMakerv2.h:114
 AliPHOSTrackSegmentMakerv2.h:115
 AliPHOSTrackSegmentMakerv2.h:116
 AliPHOSTrackSegmentMakerv2.h:117
 AliPHOSTrackSegmentMakerv2.h:118
 AliPHOSTrackSegmentMakerv2.h:119
 AliPHOSTrackSegmentMakerv2.h:120
 AliPHOSTrackSegmentMakerv2.h:121
 AliPHOSTrackSegmentMakerv2.h:122
 AliPHOSTrackSegmentMakerv2.h:123