ROOT logo
#ifndef HEMCCLUSTERF_H
#define HEMCCLUSTERF_H
using namespace std;
#include "hreconstructor.h"
#include <iostream> 
#include "hlocation.h"
#include "emcdef.h" 

class HIterator;
class HCategory;
class HGeomVector;
class HEmcCal;
class HRpcCluster;

class HEmcClusterF : public HReconstructor {

private:
  HLocation  fLoc;                               // Location of a new object
  HCategory* fEmcCalCat;                         // Pointer to EmcCal data category
  HCategory* fClusterCat;                        // Pointer to Cluster data category 
  HCategory* fRpcCat;                            // Pointer to Rpc data category
  
  Float_t      cellXmod[emcMaxComponents];       // X coordinate of cells in Module system [mm]
  Float_t      cellYmod[emcMaxComponents];       // Y coordinate of cells in Module system [mm]
  HGeomVector* emcCellsLab[6][emcMaxComponents]; // Centre of input plane module (cell) [mm]
  Float_t      thetaEmcLab[6][emcMaxComponents]; // Theta of "emcCellsLab" point in lab.sys. [deg]
  Float_t      sigmaTheta[6][emcMaxComponents];  // Sigma of the theta  [deg]
  Float_t      phiEmcLab[6][emcMaxComponents];   // Phi of "emcCellsLab" point in lab.sys. [deg]
  Float_t      sigmaPhi[6][emcMaxComponents];    // Sigma of the phi    [deg]
  Float_t      sigmaXYmod;                       // =92./sqrt(12.)

  // For all cells in sector:
  Float_t      energy[emcMaxComponents];         // [cell] For all hits in the sector
  Char_t       flagUsed[emcMaxComponents];       // [cell] For all hits in the sector
  HEmcCal*     pSecECells[emcMaxComponents];     // [cell] All hits in the sector
  
  // For one cluster:
  UChar_t      listClustCell[emcMaxComponents];  // [index] For one cluster
  HEmcCal*     pClustCells[emcMaxComponents];    // [index] For one cluster
 
  // Matching with RPC parameters
  Float_t      dThetaSigOffset;                  // (thetaEmc-thetaRpc)/sigmaDTheta+dThSigOffset
  Float_t      dThetaScale;                      // dTheta = dThetaSigOffset/dThetaScale
  Float_t      dTimeOffset;                      // [ns] (time1 - timeRpcN + dTimeOffset)/sigmaDTof;
  Float_t      dTimeCut;                         // Nsigma cut for matching by time
  Float_t      dThdPhCut;                        // Nsigma cut for matching by angles
  Float_t      dTimeCutNS;                       // [ns] cut for the matching in time
  // Cluster finder parameters
  Float_t      cellToCellSpeed;                  // [ns/cell] speed of signal distribution from one cell to another
  Float_t      distOffset;                       //
  Float_t      timeCutMin;                       // 
  Float_t      timeCutMax;                       //
  Float_t      addEnergy;                        // [MeV] add "addEnergy" to energy of each cell (needed for tests)
  Float_t      energyCut;                        // [MeV] ignore cells with energy <=energyCut
  
  Bool_t       isSimulation;                     //
public:
  HEmcClusterF(void);
  HEmcClusterF(const Text_t* name,const Text_t* title);
  ~HEmcClusterF(void);
  //void initParContainer();
  Bool_t init(void);
  Bool_t reinit(void);
  Bool_t finalize(void) {return kTRUE;}
  Int_t execute(void);
  
  // Set matching with RPC parameters
  void setRpcMatchingParDThDPh(Float_t dTPC)             {dThdPhCut       = dTPC;}    // Nsigma cut for matching in angles
  void setRpcMatchingParDTheta(Float_t dTh,Float_t dThs) {dThetaSigOffset = dTh;      // (thetaEmc-thetaRpc)/sigmaDTheta+dThSigOffset
                                                          dThetaScale     = dThs;}    // dTheta = dThetaSigOffset/dThetaScale
  void setRpcMatchingParDTime(Float_t dTO,Float_t dTC)   {dTimeOffset     = dTO;      // [ns] (time1 - timeRpcN + dTimeOffset)/sigmaDTof;
                                                          dTimeCut        = dTC;}     // Nsigma cut for matching in time
  void setRpcMatchParDTimeInNs(Float_t dTO,Float_t dTC)  {dTimeOffset     = dTO;      // [ns] (time1 - timeRpcN + dTimeOffset)/sigmaDTof;
                                                          dTimeCutNS      = dTC;}     // [ns] cut for matching in time
  // Set cluster finder parameters
  void setClFnParamCtoCSpeed(Float_t sp)                 {cellToCellSpeed = sp;}      // [ns/cell] speed of signal distribution from one cell to another
  void setClFnParamDistOffset(Float_t os)                {distOffset      = os;}      //
  void setClFnParamDTimeWindow(Float_t min,Float_t max)  {timeCutMin      = min;      //
                                                          timeCutMax      = max;}     //
  void addToCellEnergy(Float_t ae)                       {addEnergy       = ae;}
  void setCellEnergyCut(Float_t ct)                      {energyCut       = ct;}
   
protected:
  void         initData(void);
  HRpcCluster* rpcMatch(HEmcCal* cal,Float_t &qualityDThDPh,Float_t &qualityDTime);
  Int_t        maxEnergyCell(void) const;
  Float_t      calcDist(HEmcCal *cal1,HEmcCal *cal2) const;
  Int_t        getNearbyCell(Int_t cell,Int_t i) const;
  static bool  cmpEnergy(pair<Int_t,Float_t> p1,pair<Int_t,Float_t> p2) {return p1.second > p2.second;}
  
public:
  ClassDef(HEmcClusterF,0)   // ClusterF of EMC data
};

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