ROOT logo
#ifndef ALIPHOSTRACKSEGMENTMAKERV1_H
#define ALIPHOSTRACKSEGMENTMAKERV1_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.51  2007/03/28 19:18:15  kharlov
 * RecPoints recalculation in TSM removed
 *
 * 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)

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

// --- Standard library ---

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

class AliPHOSEmcRecPoint ;
class AliPHOSCpvRecPoint ;
class TClonesArray;

class  AliPHOSTrackSegmentMakerv1 : public AliPHOSTrackSegmentMaker {

public:

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

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

          void   MakeLinks() const;      //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   SetMaxEmcCPVDistance(Float_t r){ fRcpv = r ;} //Maximal distance (in PHOS plane) 
                                                               //between EMCrp and CPVrp
  virtual void   SetMaxCPVTPCDistance(Float_t r){ fRtpc = r ;} //Maximal distance 
                                                               //between EMCrp and extrapolation of TPC track
  virtual const char * Version() const { return "tsm-v1" ; }  

  AliPHOSTrackSegmentMakerv1 & operator = (const AliPHOSTrackSegmentMakerv1 & )  {
    // 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 , AliPHOSCpvRecPoint * Cpv, 
                               Int_t & track, Float_t &dx, Float_t &dz ) const ; // see R0
  void    Init() ;
  void    InitParameters() ;
  void    PrintTrackSegments(Option_t *option) ;
 

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 fRcpv ;        // Maximum distance between a EMC RecPoint and a CPV RecPoint   
  Float_t fRtpc ;        // Maximum distance between a EMC RecPoint and extrapolation of a TPC track   
  
  TVector3 fVtx ;        //! Vertex in current position

  TClonesArray * fLinkUpArray  ;  //!
  Int_t fEmcFirst;     //! Index of first EMC RecPoint belonging to currect PHOS module
  Int_t fEmcLast ;     //!
  Int_t fCpvFirst;     //! Cpv upper layer     
  Int_t fCpvLast;      //! 
  Int_t fModule ;      //! number of module being processed

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

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

 };

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