Added possibility to choose cluster time gate
authorprsnko <prsnko@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 17 Sep 2010 09:17:08 +0000 (09:17 +0000)
committerprsnko <prsnko@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 17 Sep 2010 09:17:08 +0000 (09:17 +0000)
PHOS/AliPHOSClusterizer.h
PHOS/AliPHOSClusterizerv1.cxx
PHOS/AliPHOSClusterizerv1.h
PHOS/AliPHOSRecoParam.cxx
PHOS/AliPHOSRecoParam.h

index 23690c3..78f3ae0 100644 (file)
@@ -53,7 +53,6 @@ public:
   virtual Float_t GetEmcClusteringThreshold()const = 0;
   virtual Float_t GetEmcLocalMaxCut()const = 0;
   virtual Float_t GetEmcLogWeight()const = 0;
-  virtual Float_t GetEmcTimeGate() const = 0;
   virtual Float_t GetCpvClusteringThreshold()const = 0;
   virtual Float_t GetCpvLocalMaxCut()const = 0;
   virtual Float_t GetCpvLogWeight()const = 0;
@@ -64,7 +63,6 @@ public:
   virtual void SetEmcLocalMaxCut(Float_t )        = 0;
     
   virtual void SetEmcLogWeight(Float_t)           = 0;
-  virtual void SetEmcTimeGate(Float_t)            = 0;
   virtual void SetCpvClusteringThreshold(Float_t) = 0;
   virtual void SetCpvLocalMaxCut(Float_t)         = 0;
   virtual void SetCpvLogWeight(Float_t)           = 0;
index 301f039..fe6716b 100644 (file)
@@ -197,7 +197,9 @@ AliPHOSClusterizerv1::AliPHOSClusterizerv1() :
   fNumberOfEmcClusters(0),    fNumberOfCpvClusters(0),
   fEmcClusteringThreshold(0), fCpvClusteringThreshold(0), 
   fEmcLocMaxCut(0),           fW0(0),                   fCpvLocMaxCut(0),
-  fW0CPV(0),                  fEmcTimeGate(0),          fEcoreRadius(0)
+  fW0CPV(0),                 
+  fTimeGateLowAmp(0.),        fTimeGateLow(0.),         fTimeGateHigh(0.),  
+  fEcoreRadius(0)
 {
   // default ctor (to be used mainly by Streamer)
   
@@ -212,7 +214,9 @@ AliPHOSClusterizerv1::AliPHOSClusterizerv1(AliPHOSGeometry *geom) :
   fNumberOfEmcClusters(0),    fNumberOfCpvClusters(0),
   fEmcClusteringThreshold(0), fCpvClusteringThreshold(0), 
   fEmcLocMaxCut(0),           fW0(0),                   fCpvLocMaxCut(0),
-  fW0CPV(0),                  fEmcTimeGate(0),          fEcoreRadius(0)
+  fW0CPV(0),                  
+  fTimeGateLowAmp(0.),        fTimeGateLow(0.),         fTimeGateHigh(0.),  
+  fEcoreRadius(0) 
 {
   // ctor with the indication of the file where header Tree and digits Tree are stored
   
@@ -398,7 +402,10 @@ void AliPHOSClusterizerv1::InitParameters()
   fW0                      = recoParam->GetEMCLogWeight();
   fW0CPV                   = recoParam->GetCPVLogWeight();
 
-  fEmcTimeGate             = 1.e-6 ;  //10 sample steps
+  fTimeGateLowAmp          = recoParam->GetTimeGateAmpThresh() ;
+  fTimeGateLow             = recoParam->GetTimeGateLow() ;
+  fTimeGateHigh            = recoParam->GetTimeGateHigh() ;
+
   fEcoreRadius             = recoParam->GetEMCEcoreRadius();
   
   fToUnfold                = recoParam->EMCToUnfold() ;
@@ -429,7 +436,7 @@ Int_t AliPHOSClusterizerv1::AreNeighbours(AliPHOSDigit * d1, AliPHOSDigit * d2)c
     
     if (( coldiff <= 1 )  && ( rowdiff <= 1 )){   //At least common vertex
       //    if (( relid1[2]==relid2[2] && coldiff <= 1 )  || ( relid1[3]==relid2[3] &&  rowdiff <= 1 )){ //common side
-      if((relid1[1] != 0) || (TMath::Abs(d1->GetTime() - d2->GetTime() ) < fEmcTimeGate))
+      if((relid1[1] != 0) || CheckTimeGate(d1->GetTime(),d1->GetEnergy(),d2->GetTime(),d2->GetEnergy())) 
       return 1 ; 
     }
     else {
@@ -452,6 +459,18 @@ Int_t AliPHOSClusterizerv1::AreNeighbours(AliPHOSDigit * d1, AliPHOSDigit * d2)c
   return 0 ; 
 }
 //____________________________________________________________________________
+Bool_t AliPHOSClusterizerv1::CheckTimeGate(Float_t t1, Float_t amp1, Float_t t2, Float_t amp2)const{
+  //Check if two cells have reasonable time difference
+  //Note that at low amplitude time is defined up to 1 tick == 100 ns.
+  if(amp1<fTimeGateLowAmp || amp2<fTimeGateLowAmp){
+   return (TMath::Abs(t1 - t2 ) < fTimeGateLow) ;
+  }
+  else{ //Time should be measured with good accuracy
+   return (TMath::Abs(t1 - t2 ) < fTimeGateHigh) ;
+  }
+
+}
+//____________________________________________________________________________
 Bool_t AliPHOSClusterizerv1::IsInEmc(AliPHOSDigit * digit) const
 {
   // Tells if (true) or not (false) the digit is in a PHOS-EMC module
index 404741a..2892832 100644 (file)
@@ -87,7 +87,6 @@ public:
   virtual Float_t GetEmcClusteringThreshold()const{ return fEmcClusteringThreshold;}
   virtual Float_t GetEmcLocalMaxCut()const        { return fEmcLocMaxCut;} 
   virtual Float_t GetEmcLogWeight()const          { return fW0;}  
-  virtual Float_t GetEmcTimeGate() const          { return fEmcTimeGate ; }
   virtual Float_t GetCpvClusteringThreshold()const{ return fCpvClusteringThreshold;  } 
   virtual Float_t GetCpvLocalMaxCut()const        { return fCpvLocMaxCut;} 
   virtual Float_t GetCpvLogWeight()const          { return fW0CPV;}  
@@ -101,7 +100,6 @@ public:
   virtual void SetEmcClusteringThreshold(Float_t cluth)  { fEmcClusteringThreshold = cluth ; }
   virtual void SetEmcLocalMaxCut(Float_t cut)            { fEmcLocMaxCut = cut ; }
   virtual void SetEmcLogWeight(Float_t w)                { fW0 = w ; }
-  virtual void SetEmcTimeGate(Float_t gate)              { fEmcTimeGate = gate ;}
   virtual void SetCpvClusteringThreshold(Float_t cluth)  { fCpvClusteringThreshold = cluth ; }
   virtual void SetCpvLocalMaxCut(Float_t cut)            { fCpvLocMaxCut = cut ; }
   virtual void SetCpvLogWeight(Float_t w)                { fW0CPV = w ; }
@@ -126,6 +124,7 @@ protected:
   void           SetDistancesToBadChannels();
   virtual Float_t Calibrate(Float_t amp, Int_t absId) const ;  // Tranforms ADC counts to energy   
   virtual Float_t CalibrateT(Float_t amp, Int_t absId) const ;  //Tranforms Sample counts to sec.
+  Bool_t CheckTimeGate(Float_t t1, Float_t amp1, Float_t t2, Float_t amp2)const ; //Checks if time difference is reasonable
    
 private:
   AliPHOSClusterizerv1(const AliPHOSClusterizerv1 & clu) ;
@@ -158,10 +157,13 @@ private:
   Float_t fW0 ;                      // logarithmic weight for the cluster center of gravity calculation
   Float_t fCpvLocMaxCut ;            // minimum energy difference to distinguish local maxima in a CPV cluster
   Float_t fW0CPV ;                   // logarithmic weight for the CPV cluster center of gravity calculation
-  Float_t fEmcTimeGate ;             // Maximum time difference between the digits in ont EMC cluster
+  Float_t fTimeGateLowAmp ;          // Threshold for good/bad time measurement
+  Float_t fTimeGateLow ;             // Time difference between cells with low amplitude
+  Float_t fTimeGateHigh ;            // Time difference between cells with good time measurement
   Float_t fEcoreRadius ;             // Radius within which the core energy is calculated, in cm
 
-  ClassDef(AliPHOSClusterizerv1,7)   // Clusterizer implementation version 1
+  ClassDef(AliPHOSClusterizerv1,8)   // Clusterizer implementation version 1
 
 };
 
index 1d2ce10..aff24fe 100644 (file)
@@ -38,6 +38,9 @@ AliPHOSRecoParam::AliPHOSRecoParam() :
   fEMCMinE(0.012),
   fEMCW0(4.5),
   fEMCSampleQualityCut(1.),
+  fTimeGateAmpThresh(10.),
+  fTimeGateLow(1.e-6),
+  fTimeGateHigh(1.e-6),    
   fEMCEcoreRadius(3.),
   fEMCEcore2ESD(kFALSE),
   fEMCSubtractPedestals(kTRUE),
@@ -64,6 +67,9 @@ AliPHOSRecoParam::AliPHOSRecoParam(const AliPHOSRecoParam& ):
   fEMCMinE(0.012),
   fEMCW0(4.5),
   fEMCSampleQualityCut(1.),
+  fTimeGateAmpThresh(10.),
+  fTimeGateLow(1.e-6),
+  fTimeGateHigh(1.e-6),    
   fEMCEcoreRadius(3.),
   fEMCEcore2ESD(kFALSE),
   fEMCSubtractPedestals(kTRUE),
@@ -93,6 +99,9 @@ AliPHOSRecoParam& AliPHOSRecoParam::operator = (const AliPHOSRecoParam& recoPara
     fEMCMinE                = recoParam.fEMCMinE;
     fEMCW0                  = recoParam.fEMCW0;
     fEMCSampleQualityCut    = recoParam.fEMCSampleQualityCut;
+    fTimeGateAmpThresh      = recoParam.fTimeGateAmpThresh ;
+    fTimeGateLow            = recoParam.fTimeGateLow ;
+    fTimeGateHigh           = recoParam.fTimeGateHigh ;
     fEMCEcoreRadius         = recoParam.fEMCEcoreRadius;
     fEMCEcore2ESD           = recoParam.fEMCEcore2ESD;
     fEMCSubtractPedestals   = recoParam.fEMCSubtractPedestals;
index bd20370..7cd9607 100644 (file)
@@ -33,6 +33,10 @@ public:
   Bool_t  GetEMCEnergyCorrectionOn()  const { return fEMCEnergyCorrectionOn;   }
   Int_t   GetGlobalAltroOffset()      const { return fGlobalAltroOffset ;      }
   Int_t   GetGlobalAltroThreshold()   const { return fGlobalAltroThreshold ;   }
+  Float_t GetTimeGateAmpThresh()      const { return fTimeGateAmpThresh ;      }
+  Float_t GetTimeGateLow()            const { return fTimeGateLow ;            }
+  Float_t GetTimeGateHigh()           const { return fTimeGateHigh ;           }
 
   Float_t GetCPVClusteringThreshold() const { return fCPVClusteringThreshold;  }
   Float_t GetCPVLocalMaxCut()         const { return fCPVLocMaxCut;            }
@@ -54,6 +58,10 @@ public:
   void SetEMCEnergyCorrectionOn(Bool_t on=kTRUE)     { fEMCEnergyCorrectionOn =on;      }
   void SetGlobalAltroOffset(Int_t offset=5)          { fGlobalAltroOffset     =offset ; }
   void SetGlobalAltroThreshold(Int_t ZSth=5)         { fGlobalAltroThreshold  =ZSth;    }
+  void SetTimeGateAmpThresh(Float_t thrs=10)         { fTimeGateAmpThresh     = thrs ;  }
+  void SetTimeGateLow(Float_t gate=1.e-7)            { fTimeGateLow = gate ;            }
+  void SetTimeGateHigh(Float_t gate=1.e-8)           { fTimeGateHigh = gate;            }
 
   void SetCPVClusteringThreshold(Float_t cluth)      { fCPVClusteringThreshold=cluth;   }
   void SetCPVLocalMaxCut(Float_t cut)                { fCPVLocMaxCut          =cut;     }
@@ -74,6 +82,9 @@ protected:
   Float_t fEMCMinE;                // EMC: Min.E in the digits list associated with rec.point, in GeV
   Float_t fEMCW0;                  // EMC: Log.weight to evaluate a local coordinate of rec.point
   Float_t fEMCSampleQualityCut;    // EMC: Cut on pulse shape fit quality
+  Float_t fTimeGateAmpThresh ;     // EMC: Threshold for good/bad time calculation
+  Float_t fTimeGateLow ;           // EMC: Time difference between cells in PHOS cluster (bad time estimate)
+  Float_t fTimeGateHigh ;          // EMC: Time difference between cells in PHOS cluster (good time estimate)
   Float_t fEMCEcoreRadius;         // EMC: Radius within which the core energy is calculated, in cm
   Bool_t  fEMCEcore2ESD;           // EMC: true if Ecore is stored in ESD instead of Etot
   Bool_t  fEMCSubtractPedestals;   // EMC: true if pedestal should be subtracted (in non-ZS)