8fd9a54685e367ae5d7f7e6890bfb67df7085358
[u/mrichter/AliRoot.git] / T0 / AliT0Trigger.cxx
1 /**************************************************************************
2  * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3  *                                                                         *
4  * Author: The ALICE Off-line Project.                                    *
5  * Contributors are mentioned in the code where appropriate.              *
6  *                                                                        *
7  * Permission to use, copy, modify and distribute this software and its   *
8  * documentation strictly for non-commercial purposes is hereby granted   *
9  * without fee, provided that the above copyright notice appears in all   *
10  * copies and that both the copyright notice and this permission notice   *
11  * appear in the supporting documentation. The authors make no claims     *
12  * about the suitability of this software for any purpose. It is          *
13  * provided "as is" without express or implied warranty.                  *
14  **************************************************************************/
15
16 /* $Id$ */
17 /***************************************************************
18  * T0 trigger class for T0 trigger signals:
19  *  - T0A
20  *  - T0C
21  *  - T0vertex
22  *  - T0 semi central event for ions
23  *  - T0 central            for ions
24  ****************************************************************/
25
26
27 #include "AliLog.h"
28 #include "AliRun.h"
29 #include "AliRunLoader.h"
30 #include "AliTriggerInput.h"
31 #include "AliT0Parameters.h"
32 #include "AliT0TriggerParameters.h"
33 #include <AliCDBManager.h>        
34 #include <AliCDBEntry.h>          
35 #include <AliCDBStorage.h>  
36
37 #include "AliT0.h"
38 #include "AliT0digit.h"
39 #include "AliT0Trigger.h"
40
41 #include "Riostream.h"
42
43 //----------------------------------------------------------------------
44 ClassImp(AliT0Trigger)
45
46 //----------------------------------------------------------------------
47 AliT0Trigger::AliT0Trigger()
48   : AliTriggerDetector(),
49     fT0(0x0),
50   fDigits(0x0),
51   fTrigPar(0x0) 
52 {
53    SetName("T0");
54    CreateInputs();
55    AliCDBManager *stor =AliCDBManager::Instance();
56    //time equalizing
57    AliCDBEntry* fCalibentry  = stor->Get("T0/Calib/TriggerParam");
58    if (fCalibentry)
59      fTrigPar  = (AliT0TriggerParameters*)fCalibentry->GetObject();
60    else {
61          AliWarning(" No trigger parameters  in CDB , use default"); 
62    }
63
64 }
65
66 //----------------------------------------------------------------------
67 void AliT0Trigger::CreateInputs()
68 {
69    // inputs 
70  
71    // Do not create inputs again!!
72    if( fInputs.GetEntriesFast() > 0 ) return;
73    
74    fInputs.AddLast( new AliTriggerInput( "0T0A", "T0",  0 ) );
75    fInputs.AddLast( new AliTriggerInput( "0T0C", "T0", 0 ) );
76    fInputs.AddLast( new AliTriggerInput( "0TVX", "T0", 0 ) );
77    fInputs.AddLast( new AliTriggerInput( "T0_Centr_L0", "T0",  0 ) );
78    fInputs.AddLast( new AliTriggerInput( "T0_SemiCentral_L0", "T0",  0 ) );
79
80 }
81
82 //----------------------------------------------------------------------
83 void AliT0Trigger::Trigger()
84 {
85   // trigger input
86
87    AliRunLoader* runLoader = AliRunLoader::Instance();
88    AliLoader * fT0Loader = runLoader->GetLoader("T0Loader");
89    //   AliT0digit *fDigits; 
90    fT0Loader->LoadDigits("READ");
91    // Creating T0 data container
92
93    TTree* treeD = fT0Loader->TreeD();
94   if (!treeD) {
95     AliError("no digits tree");
96     return;
97   }
98   fDigits = new AliT0digit();
99
100   TBranch *brDigits = treeD->GetBranch("T0");
101   if (brDigits) {
102     brDigits->SetAddress(&fDigits);
103   }else{
104     AliError("Branch T0 DIGIT not found");
105     return;
106   } 
107   brDigits->GetEntry(0);
108   Int_t   besttimeA = fDigits->BestTimeA();
109   Int_t   besttimeC = fDigits->BestTimeC();
110   Int_t   timeDiff = fDigits->TimeDiff();
111   Int_t    sumMult=   fDigits->SumMult();
112
113   //trigger parameteres
114
115   Float_t timeWindowLow = fTrigPar->GetTimeWindowLow(); 
116   Float_t timeWindowHigh = fTrigPar->GetTimeWindowHigh(); 
117   Int_t ampCentr = fTrigPar->GetAmpCentr(); 
118   Int_t ampSemiCentr =  fTrigPar->GetAmpSemiCentr();
119
120   if (besttimeA > 0 && besttimeA <99999)  SetInput("0T0A");
121   if (besttimeC > 0  && besttimeC<99999)   SetInput("0T0C"); 
122   //6093 corrsponds to vertex -20cm, 6202 vertex +20 with delay 150nc eqalized on the TVDC unit 
123   if (timeDiff >timeWindowLow && timeDiff < timeWindowHigh) SetInput("0TVX");
124   if (sumMult > ampCentr)  SetInput("T0_Centr_L0");
125   if (sumMult> ampSemiCentr && sumMult <= ampCentr) SetInput("T0_SemiCentral_L0");;
126
127    
128 }