Added the offline trigger functions for use with the first physics.
authorhdalsgaa <hdalsgaa@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 31 Aug 2009 12:46:06 +0000 (12:46 +0000)
committerhdalsgaa <hdalsgaa@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 31 Aug 2009 12:46:06 +0000 (12:46 +0000)
FMD/AliFMDParameters.cxx
FMD/AliFMDParameters.h
FMD/AliFMDReconstructor.cxx
FMD/AliFMDReconstructor.h

index 86a87d2..d5b8eb1 100644 (file)
@@ -105,7 +105,9 @@ AliFMDParameters::AliFMDParameters()
     fPulseGain(0), 
     fDeadMap(0), 
     fAltroMap(0), 
-    fStripRange(0)
+    fStripRange(0),
+    fOfflineTriggerLowCut(0.1),
+    fOfflineTriggerHitCut(0.6)
 {
   // Default constructor 
   SetVA1MipRange();
index 47d6f48..fcd04fd 100644 (file)
@@ -492,6 +492,12 @@ public:
   static const char* GetPedestalShuttleID()   {return fkPedestalShuttleID;}
   static const char* GetGainShuttleID()       {return fkGainShuttleID;}
   static const char* GetConditionsShuttleID()   {return fkConditionsShuttleID;}
+  
+  Float_t GetOfflineTriggerLowCut() {return fOfflineTriggerLowCut;}
+  Float_t GetOfflineTriggerHitCut() {return fOfflineTriggerHitCut;}
+  void    SetOfflineTriggerLowCut(Float_t cut) {fOfflineTriggerLowCut = cut;}
+  void    SetOfflineTriggerHitCut(Float_t cut) {fOfflineTriggerHitCut = cut;}
+
 protected:
   /** CTOR  */
   AliFMDParameters();
@@ -523,7 +529,9 @@ protected:
       fPulseGain(o.fPulseGain),
       fDeadMap(o.fDeadMap),
       fAltroMap(o.fAltroMap),
-      fStripRange(o.fStripRange)
+      fStripRange(o.fStripRange),
+      fOfflineTriggerLowCut(o.fOfflineTriggerLowCut),
+      fOfflineTriggerHitCut(o.fOfflineTriggerHitCut)
   {}
   /** Assignement operator 
       @return Reference to this */
@@ -609,6 +617,9 @@ protected:
   AliFMDAltroMapping*         fAltroMap;        // Map of hardware
   AliFMDCalibStripRange*      fStripRange;      // Strip range
   
+  Float_t                fOfflineTriggerLowCut; //offline trigger low cut
+  Float_t                fOfflineTriggerHitCut; //offline trigger hit cut
+  
   ClassDef(AliFMDParameters,6) // Manager of parameters
 };
 
index c846276..efaed9f 100644 (file)
@@ -877,7 +877,69 @@ AliFMDReconstructor::FillESD(AliRawReader*, TTree* clusterTree,
   TTree* dummy = 0;
   FillESD(dummy, clusterTree, esd);
 }
-
+//_____________________________________________________________________
+Bool_t AliFMDReconstructor::GetFMDAsideBit(AliESDFMD* fmd) {
+
+  AliFMDParameters* pars = AliFMDParameters::Instance();
+  Float_t totalMult = 0;
+  for(UShort_t det=1;det<=2;det++) {
+    Int_t nRings = (det == 1 ? 1 : 2);
+    for (UShort_t ir = 0; ir < nRings; ir++) {
+      Char_t   ring = (ir == 0 ? 'I' : 'O');
+      UShort_t nsec = (ir == 0 ? 20  : 40);
+      UShort_t nstr = (ir == 0 ? 512 : 256);
+      for(UShort_t sec =0; sec < nsec;  sec++)  {
+       for(UShort_t strip = 0; strip < nstr; strip++) {
+         Float_t mult = fmd->Multiplicity(det,ring,sec,strip);
+         if(mult == AliESDFMD::kInvalidMult) continue;
+         
+         if(mult > pars->GetOfflineTriggerLowCut())
+           totalMult = totalMult + mult;
+         else
+           {
+             if( totalMult > pars->GetOfflineTriggerHitCut()) {
+               return kTRUE;
+             }
+             else totalMult = 0 ;
+           }
+       }
+      }
+    }
+  }
+  return kFALSE;
+  
+}
+//_____________________________________________________________________
+Bool_t AliFMDReconstructor::GetFMDCsideBit(AliESDFMD* fmd) {
+  
+  AliFMDParameters* pars = AliFMDParameters::Instance();
+  Float_t totalMult = 0;
+  UShort_t det = 3;
+  Int_t nRings = 2;
+  for (UShort_t ir = 0; ir < nRings; ir++) {
+    Char_t   ring = (ir == 0 ? 'I' : 'O');
+    UShort_t nsec = (ir == 0 ? 20  : 40);
+    UShort_t nstr = (ir == 0 ? 512 : 256);
+    for(UShort_t sec =0; sec < nsec;  sec++)  {
+      for(UShort_t strip = 0; strip < nstr; strip++) {
+       Float_t mult = fmd->Multiplicity(det,ring,sec,strip);
+       if(mult == AliESDFMD::kInvalidMult) continue;
+       
+       if(mult > pars->GetOfflineTriggerLowCut())
+         totalMult = totalMult + mult;
+       else
+         {
+           if( totalMult > pars->GetOfflineTriggerHitCut()) {
+             return kTRUE;
+           }
+           else totalMult = 0 ;
+         }
+      }
+    }
+  }
+  return kFALSE;
+}
 //____________________________________________________________________
 //
 // EOF
index e7e4bf2..049979e 100644 (file)
@@ -160,6 +160,17 @@ public:
    * @param use If true, make the diagnostics file 
    */
   void SetDiagnose(Bool_t use=kTRUE) { fDiagnostics = use; }
+   /** 
+   * Functions to use the FMD as an offline trigger. The idea is to read
+   * the data until we are certain we have one particle. If no particle is 
+   * found the functions return kFALSE. These functions were added as a 
+   * result of the discussions in the First Physics Working Group.
+   *    *
+   * @param AliESDFMD* fmd the FMD data from one event.
+   */
+  static Bool_t GetFMDAsideBit(AliESDFMD* fmd);
+  static Bool_t GetFMDCsideBit(AliESDFMD* fmd);
+  
 protected:
   /** 
    * Copy CTOR