Updated macros for PHOS alignment calculation
[u/mrichter/AliRoot.git] / HLT / trigger / AliHLTTriggerTrdClusterMultiplicity.cxx
1 // $Id$
2 //-*- Mode: C++ -*-
3 //**************************************************************************
4 //* This file is property of and copyright by the ALICE HLT Project        * 
5 //* ALICE Experiment at CERN, All rights reserved.                         *
6 //*                                                                        *
7 //* Primary Authors: Svein Lindal <svein.lindal@fys.uio.no>                 *
8 //*                  for The ALICE HLT Project.                            *
9 //*                                                                        *
10 //* Permission to use, copy, modify and distribute this software and its   *
11 //* documentation strictly for non-commercial purposes is hereby granted   *
12 //* without fee, provided that the above copyright notice appears in all   *
13 //* copies and that both the copyright notice and this permission notice   *
14 //* appear in the supporting documentation. The authors make no claims     *
15 //* about the suitability of this software for any purpose. It is          *
16 //* provided "as is" without express or implied warranty.                  *
17 //**************************************************************************
18
19 /// @file   AliHLTTriggerTrdClusterMultiplicity.cxx
20 /// @author Svein Lindal
21 /// @date   2009-08-19
22 /// @brief  HLT Minimum Ionizing Particle (MIP) trigger for PHOS
23
24 // see header file for class documentation
25 // or
26 // refer to README to build package
27 // or
28 // visit http://web.ift.uib.no/~kjeks/doc/alice-hlt
29
30
31 #include "AliHLTTriggerTrdClusterMultiplicity.h"
32 #include "AliHLTTriggerDecision.h"
33 #include "AliHLTDomainEntry.h"
34 #include "AliHLTTRDDefinitions.h"
35 #include "AliHLTTRDUtils.h"
36 #include "AliHLTTRDCluster.h"
37 #include "AliTRDgeometry.h"
38 #include "TObjString.h"
39
40 /** ROOT macro for the implementation of ROOT specific class methods */
41 ClassImp(AliHLTTriggerTrdClusterMultiplicity)
42
43 AliHLTTriggerTrdClusterMultiplicity::AliHLTTriggerTrdClusterMultiplicity() 
44   : AliHLTTrigger()
45   , fClusterMult(10)
46   , fClusterArray(NULL)
47 {
48   // see header file for class documentation
49   // or
50   // refer to README to build package
51   // or
52   // visit http://web.ift.uib.no/~kjeks/doc/alice-hlts
53 }
54
55 AliHLTTriggerTrdClusterMultiplicity::~AliHLTTriggerTrdClusterMultiplicity()
56 {
57   // see header file for class documentation
58 }
59
60 const char* AliHLTTriggerTrdClusterMultiplicity::GetTriggerName() const
61 {
62   // see header file for class documentation
63   return "TrdClusterMultiplicityTrigger";
64 }
65
66 AliHLTComponent* AliHLTTriggerTrdClusterMultiplicity::Spawn()
67 {
68   // see header file for class documentation
69   return new AliHLTTriggerTrdClusterMultiplicity;
70 }
71
72 int AliHLTTriggerTrdClusterMultiplicity::DoTrigger()
73 {
74   // see header file for class documentation
75
76   TString description;
77
78   for (const AliHLTComponentBlockData* pBlock=GetFirstInputBlock(AliHLTTRDDefinitions::fgkClusterDataType);
79        pBlock!=NULL; pBlock=GetNextInputBlock()) {
80
81     AliHLTTRDUtils::ReadClusters(fClusterArray, pBlock->fPtr, pBlock->fSize);
82
83     AliTRDcluster* inCluster;
84     Int_t stack[5] = {0,0,0,0,0};
85     for(Int_t count=0; count<fClusterArray->GetEntriesFast(); count++)
86       {
87         inCluster=(AliTRDcluster*)fClusterArray->UncheckedAt(count);
88         stack[AliTRDgeometry::GetStack(inCluster->GetDetector())]++;
89       }
90
91     Bool_t trigger=kFALSE;
92     for(Int_t count=0; count<5; count++)
93       {
94         if(stack[count]>fClusterMult)trigger=kTRUE;
95       }
96
97     if(trigger){
98       description.Form("Event contains at least one stack with at least %i TRD clusters", fClusterMult);
99       SetDescription(description.Data());
100         
101       // Enable the detectors for readout.
102       GetReadoutList().Enable( AliHLTReadoutList::kTRD );
103         
104       // Add the available HLT information for readout too.
105       GetTriggerDomain().Add(kAliHLTAnyDataTypeID, "TRD");
106         
107       //Set trigger decision
108       TriggerEvent(true);
109
110     }else{
111       description.Form("No stack in this event contains enough clusters");
112       SetDescription(description.Data());
113       TriggerEvent(false);
114     }
115     
116     HLTDebug(description.Data());
117     fClusterArray->Delete();
118
119     return 0;
120   }
121   return 0;
122 }
123
124 int AliHLTTriggerTrdClusterMultiplicity::DoInit(int argc, const char** argv)
125 {
126   // see header file for class documentation
127   int iResult=0;
128
129   TString configuration="";
130   TString argument="";
131   for (int i=0; i<argc && iResult>=0; i++) {
132     argument=argv[i];
133     if (!configuration.IsNull()) configuration+=" ";
134     configuration+=argument;
135   }
136
137   if (!configuration.IsNull()) {
138     iResult=Configure(configuration.Data());
139   }
140
141   fClusterArray = new TClonesArray("AliTRDcluster");
142   return 0;
143 }
144
145 int AliHLTTriggerTrdClusterMultiplicity::DoDeinit()
146 {
147   // see header file for class documentation
148
149   fClusterArray->Delete();
150   delete fClusterArray;
151
152   return 0;
153 }
154
155 int AliHLTTriggerTrdClusterMultiplicity::Reconfigure(const char* /*cdbEntry*/, const char* /*chainId*/)
156 {
157   // see header file for class documentation
158
159   // configure from the specified antry or the default one
160  
161   return 0;
162 }
163
164 int AliHLTTriggerTrdClusterMultiplicity::Configure(const char* arguments){
165   int iResult=0;
166   if (!arguments) return iResult;
167   
168   TString allArgs=arguments;
169   TString argument;
170   int bMissingParam=0;
171
172   TObjArray* pTokens=allArgs.Tokenize(" ");
173   if (pTokens) {
174     for (int i=0; i<pTokens->GetEntries() && iResult>=0; i++) {
175       argument=((TObjString*)pTokens->At(i))->GetString();
176       if (argument.IsNull()) continue;
177
178       if (argument.CompareTo("-MultiplicityThresh")==0) {
179         if ((bMissingParam=(++i>=pTokens->GetEntries()))) break;
180         HLTInfo("Setting multiplicity threshold to: %s", ((TObjString*)pTokens->At(i))->GetString().Data());
181         fClusterMult=((TObjString*)pTokens->At(i))->GetString().Atoi();
182         continue;
183       } 
184
185       else {
186         HLTError("unknown argument: %s", argument.Data());
187         iResult=-EINVAL;
188         break;
189       }
190     }
191     delete pTokens;
192   }
193   if (bMissingParam) {
194     HLTError("missing parameter for argument %s", argument.Data());
195     iResult=-EINVAL;
196   }
197   return iResult;
198 }