Pile-up flagging (F.Prino)
authormasera <masera@f7af4fe6-9843-0410-8265-dc069ae4e863>
Sun, 1 Feb 2009 21:25:37 +0000 (21:25 +0000)
committermasera <masera@f7af4fe6-9843-0410-8265-dc069ae4e863>
Sun, 1 Feb 2009 21:25:37 +0000 (21:25 +0000)
ITS/AliITSVertexer.cxx
ITS/AliITSVertexer.h
ITS/AliITSVertexerZ.cxx
ITS/AliITSVertexerZ.h

index 9c26520..bdc4071 100644 (file)
@@ -23,11 +23,16 @@ AliITSVertexer::AliITSVertexer():AliVertexer(),
 fLadders(), 
 fLadOnLay2(0),
 fDetTypeRec(NULL),
+fMinTrackletsForPilup(0),
+fIsPileup(0),
+fNTrpuv(-2),
+fZpuv(-9999999.),
 fFirstEvent(0),
 fLastEvent(-1)
 {
   // Default Constructor
   SetLaddersOnLayer2();
+  SetMinTrackletsForPilup();
   for(Int_t i=0; i<kNSPDMod;i++) fUseModule[i]=kTRUE;
 }
 
index 02cfb08..f41ee91 100644 (file)
@@ -45,6 +45,17 @@ class AliITSVertexer : public AliVertexer {
     void WriteCurrentVertex();
     void FindVertices();
 
+    Int_t GetMinTrackletsForPilup() const {return fMinTrackletsForPilup;}
+    void SetMinTrackletsForPilup(Int_t mint=2) {fMinTrackletsForPilup=mint;} 
+    Bool_t IsPileup() const{return fIsPileup;}
+    Float_t GetZPileupV() const {
+      if(IsPileup()) return fZpuv;
+      else return -9999999.;
+    }
+    Int_t GetNTrackletsPileupV() const {
+      if(IsPileup()) return fNTrpuv;
+      else return -2;
+    }
  protected:
     static const Float_t fgkPipeRadius;  // beam pipe radius (cm)
     UShort_t *fLadders; // array with layer1-layer2 ladders correspondances  
@@ -52,7 +63,11 @@ class AliITSVertexer : public AliVertexer {
                       // associated to a layer1 ladder
     Bool_t  fUseModule[kNSPDMod]; // flag for enabling/disabling SPD modules
     AliITSDetTypeRec *fDetTypeRec;  //! pointer to DetTypeRec
+    Int_t fMinTrackletsForPilup;  // min. n. of tracklets for pilup definition
+    Bool_t fIsPileup;             // flag for pileup
+    Int_t fNTrpuv;             // tracklets in pile-up vertex
+    Float_t fZpuv;             // Z of second pile-up vertex
+
  private:
     // copy constructor (NO copy allowed: the constructor is protected
     // to avoid misuse)
@@ -63,7 +78,7 @@ class AliITSVertexer : public AliVertexer {
     Int_t fFirstEvent;          // First event to be processed by FindVertices
     Int_t fLastEvent;           // Last event to be processed by FindVertices
 
-  ClassDef(AliITSVertexer,8);
+  ClassDef(AliITSVertexer,9);
 };
 
 #endif
index ca4faf7..dcb695d 100644 (file)
@@ -117,7 +117,7 @@ void AliITSVertexerZ::ConfigIterations(Int_t noiter,Float_t *ptr){
 }
 
 //______________________________________________________________________
-Int_t AliITSVertexerZ::GetPeakRegion(TH1F*h, Int_t &binmin, Int_t &binmax) const {
+Int_t AliITSVertexerZ::GetPeakRegion(TH1F*h, Int_t &binmin, Int_t &binmax){
   // Finds a region around a peak in the Z histogram
   // Case of 2 peaks is treated 
   Int_t imax=h->GetNbinsX();
@@ -377,11 +377,37 @@ void AliITSVertexerZ::VertexZFinder(TTree *itsClusterTree){
   fCurrentVertex = new AliESDVertex(zm,ezm,ncontr);
   fCurrentVertex->SetTitle("vertexer: B");
   points.Clear();
+  fIsPileup=kFALSE;
+  fNTrpuv=-2;
+  if(ncontr>fMinTrackletsForPilup){ 
+    Float_t secPeakPos;
+    Int_t ncontr2=FindSecondPeak(fZCombc,binmin,binmax,secPeakPos);
+    if(ncontr2>=fMinTrackletsForPilup){ 
+      fIsPileup=kTRUE;
+      fZpuv=secPeakPos;
+      fNTrpuv=ncontr2;
+    }
+  }    
   ResetHistograms();
   return;
 }
 
 //_____________________________________________________________________
+Int_t AliITSVertexerZ::FindSecondPeak(TH1F* h, Int_t binmin,Int_t binmax, Float_t& secPeakPos){  
+  for(Int_t i=binmin-1;i<=binmax+1;i++){
+    h->SetBinContent(i,0.);
+  }
+  Int_t secPeakBin=h->GetMaximumBin();
+  secPeakPos=h->GetBinCenter(secPeakBin);
+  Int_t secPeakCont=h->GetBinContent(secPeakBin);
+  secPeakCont+=h->GetBinContent(secPeakBin-1);
+  secPeakCont+=h->GetBinContent(secPeakBin+1);  
+  secPeakCont+=h->GetBinContent(secPeakBin-2);
+  secPeakCont+=h->GetBinContent(secPeakBin+2);  
+  return secPeakCont;
+}
+
+//_____________________________________________________________________
 void AliITSVertexerZ::ResetHistograms(){
   // delete TH1 data members
   if(fZCombc)delete fZCombc;
index a158a88..b31e63a 100644 (file)
@@ -39,7 +39,8 @@ class AliITSVertexerZ : public AliITSVertexer {
   Float_t GetHighLimit() const {return fHighLim;}
   void SetBinWidthCoarse(Float_t bw=0.01){fStepCoarse = bw;}
   void SetPPsetting(Float_t cl2=250., Float_t coarsebin=0.02){fPPsetting[0]=cl2; fPPsetting[1]=coarsebin;}
-  Int_t GetPeakRegion(TH1F*h, Int_t &binmin, Int_t &binmax) const;
+  static Int_t GetPeakRegion(TH1F* h, Int_t &binmin, Int_t &binmax);
+  static Int_t FindSecondPeak(TH1F* h, Int_t binmin,Int_t binmax, Float_t& secPeakPos);
   Float_t GetBinWidthCoarse() const {return fStepCoarse;}
   void SetTolerance(Float_t tol = 20./10000.){fTolerance = tol;}
   void SetWindowWidth(Float_t ww=0.2){fWindowWidth=ww;}