#include "AliEveEventSelector.h"
#include "AliEveEventManager.h"
#include "AliESD.h"
#include "AliESDEvent.h"
#include "AliESDRun.h"
#include <TEntryList.h>
#include <TDirectory.h>
#include <TTree.h>
#include <TObjArray.h>
#include <TRegexp.h>
#include <TROOT.h>
ClassImp(AliEveEventSelector)
AliEveEventSelector::AliEveEventSelector(AliEveEventManager* evman):
fPEventManager(evman),
fWrapAround(kFALSE),
fSelectOnString(kFALSE),
fString(""),
fPEntryList(0),
fEntryListId(0),
fLastTreeSize(-1),
fSelectOnTriggerType(kFALSE),
fTriggerType(""),
fSelectOnTriggerString(kFALSE),
fTriggerSelectionString(""),
fTriggerMaskPatternString("trgmask"),
fSelectOnMultiplicity(kFALSE),
fMultiplicityLow(0),
fMultiplicityHigh(0)
{
}
void AliEveEventSelector::SetSelectionString( const TString& str )
{
TTree* pESDTree = fPEventManager->GetESDTree();
TTree* pHLTESDTree = fPEventManager->GetHLTESDTree();
if ((!pESDTree && !pHLTESDTree) || fString==str) return;
fString = str;
if (str == "" ) return;
if(pESDTree!=0) pESDTree->Draw( ">>listofentries", fString, "entrylist");
if(pHLTESDTree!=0) pHLTESDTree->Draw( ">>listofentries", fString, "entrylist");
fPEntryList = dynamic_cast<TEntryList*>(gDirectory->Get("listofentries"));
}
void AliEveEventSelector::SetSelectionString( const char* str )
{
TString ts = str;
SetSelectionString(ts);
}
void AliEveEventSelector::SetTriggerType( const TString& type )
{
fTriggerType = type;
}
void AliEveEventSelector::SetTriggerType( const char* type)
{
TString ts = type;
SetTriggerType(ts);
}
void AliEveEventSelector::UpdateEntryList()
{
TTree* pESDTree = fPEventManager->GetESDTree();
TTree* pHLTESDTree = fPEventManager->GetHLTESDTree();
if (!pESDTree && !pHLTESDTree) return;
Long64_t treesize = fPEventManager->GetMaxEventId()+1;
if (treesize<=fLastTreeSize) return;
if(pESDTree) pESDTree->Draw(">>+fPEntryList", fString, "entrylist", fLastTreeSize+1, treesize-fLastTreeSize );
if(pHLTESDTree) pHLTESDTree->Draw(">>+fPEntryList", fString, "entrylist", fLastTreeSize+1, treesize-fLastTreeSize );
fLastTreeSize = treesize;
}
void AliEveEventSelector::Update()
{
UpdateEntryList();
}
Bool_t AliEveEventSelector::FindNext( Int_t& output )
{
static const TEveException kEH("AliEveEventSelector::GetNext ");
TTree* pESDTree = fPEventManager->GetESDTree();
TTree* pHLTESDTree = fPEventManager->GetHLTESDTree();
if (!pESDTree && !pHLTESDTree) return kFALSE;
Bool_t OfflineHasNext=kFALSE;
Bool_t HLTHasNext=kFALSE;
if(pESDTree) OfflineHasNext = FindNextInTree(pESDTree, output);
if(pHLTESDTree)HLTHasNext = FindNextInTree(pHLTESDTree,output);
return (OfflineHasNext | HLTHasNext);
}
Bool_t AliEveEventSelector::FindNextInTree(TTree* tree, Int_t& output)
{
if(!tree) return kFALSE;
static const TEveException kEH("AliEveEventSelector::FindNextInTree ");
AliESDEvent* pESDEvent = fPEventManager->GetESD();
Int_t eventId = fPEventManager->GetEventId();
Int_t fMaxEventId = fPEventManager->GetMaxEventId();
if (!fSelectOnString)
{
for (Int_t i = eventId+1; i<fMaxEventId+1; i++)
{
if (tree->GetEntry(i) <= 0)
throw (kEH + "failed getting required event from ESD.");
if (CheckOtherSelection(pESDEvent))
{
output = i;
return kTRUE;
}
}
if (!fWrapAround) return kFALSE;
for (Int_t i = 0; i<eventId+1; i++)
{
if (tree->GetEntry(i) <= 0)
throw (kEH + "failed getting required event from ESD.");
if (CheckOtherSelection(pESDEvent))
{
output = i;
return kTRUE;
}
}
return kFALSE;
}
else
{
UpdateEntryList();
for (Long64_t i=fEntryListId+1; i<fPEntryList->GetN(); i++ )
{
Long64_t entry = fPEntryList->GetEntry(i);
if (tree->GetEntry(entry) <= 0)
throw (kEH + "failed getting required event from ESD.");
if (CheckOtherSelection(pESDEvent))
{
output = entry;
fEntryListId = i;
return kTRUE;
}
}
if (!fWrapAround) return kFALSE;
for (Long64_t i=0; i<fEntryListId+1; i++ )
{
Long64_t entry = fPEntryList->GetEntry(i);
if (tree->GetEntry(entry) <= 0)
throw (kEH + "failed getting required event from ESD.");
if (CheckOtherSelection(pESDEvent))
{
output = entry;
fEntryListId=i;
return kTRUE;
}
}
return kFALSE;
}
return kFALSE;
}
Bool_t AliEveEventSelector::FindPrev( Int_t& output )
{
TTree* pESDTree = fPEventManager->GetESDTree();
TTree* pHLTESDTree = fPEventManager->GetHLTESDTree();
if (!pESDTree && !pHLTESDTree) return kFALSE;
Bool_t OfflineHasNext=kFALSE;
Bool_t HLTHasNext=kFALSE;
if(pESDTree) OfflineHasNext = FindPrevInTree(pESDTree, output);
if(pHLTESDTree) HLTHasNext = FindPrevInTree(pHLTESDTree,output);
return (OfflineHasNext | HLTHasNext);
}
Bool_t AliEveEventSelector::FindPrevInTree(TTree* tree, Int_t& output)
{
static const TEveException kEH("AliEveEventSelector::FindPrevInTree ");
AliESDEvent* pESDEvent = fPEventManager->GetESD();
Int_t eventId = fPEventManager->GetEventId();
Int_t fMaxEventId = fPEventManager->GetMaxEventId();
if (!fSelectOnString)
{
for (Int_t i = eventId-1; i>-1; i--)
{
if (tree->GetEntry(i) <= 0)
throw (kEH + "failed getting required event from ESD.");
if (CheckOtherSelection(pESDEvent))
{
output = i;
return kTRUE;
}
}
if (!fWrapAround) return kFALSE;
for (Int_t i = fMaxEventId; i>eventId-1; i--)
{
if (tree->GetEntry(i) <= 0)
throw (kEH + "failed getting required event from ESD.");
if (CheckOtherSelection(pESDEvent))
{
output = i;
return kTRUE;
}
}
return kFALSE;
}
else
{
for (Long64_t i=fEntryListId-1; i>-1; i--)
{
Long64_t entry = fPEntryList->GetEntry(i);
if (tree->GetEntry(entry) <= 0)
throw (kEH + "failed getting required event from ESD.");
if (CheckOtherSelection(pESDEvent))
{
output = entry;
fEntryListId = i;
return kTRUE;
}
}
if (!fWrapAround) return kFALSE;
for (Long64_t i=fPEntryList->GetN()-1; i>fEntryListId-1; i--)
{
Long64_t entry = fPEntryList->GetEntry(i);
if (tree->GetEntry(entry) <= 0)
throw (kEH + "failed getting required event from ESD.");
if (CheckOtherSelection(pESDEvent))
{
output = entry;
fEntryListId=i;
return kTRUE;
}
}
return kFALSE;
}
return kFALSE;
}
Bool_t AliEveEventSelector::CheckOtherSelection( AliESDEvent* pESDEvent )
{
Bool_t ret=kTRUE;
if (fSelectOnTriggerType)
{
TString firedtrclasses = pESDEvent->GetFiredTriggerClasses();
if (!(firedtrclasses.Contains(fTriggerType))) return kFALSE;
}
if (fSelectOnMultiplicity)
{
Int_t mult = pESDEvent->GetNumberOfTracks();
Int_t mhigh = (fMultiplicityHigh==0)?100000000:fMultiplicityHigh;
if (mult<fMultiplicityLow || mult>mhigh) return kFALSE;
}
if (fSelectOnTriggerString)
{
ULong64_t triggermask = pESDEvent->GetTriggerMask();
TString triggermaskstr;
triggermaskstr += triggermask;
TString selstr(fTriggerSelectionString);
selstr.ReplaceAll(fTriggerMaskPatternString,triggermaskstr);
Bool_t result = static_cast<Bool_t>(gROOT->ProcessLine(selstr));
if (!result) return kFALSE;
}
return ret;
}
void AliEveEventSelector::SetTriggerSelectionString( TString str )
{
const AliESDRun* run = fPEventManager->GetESD()->GetESDRun();
for (Int_t i=0; i<run->kNTriggerClasses; i++)
{
TString name(run->GetTriggerClass(i));
if (name.IsNull()) continue;
TString valuestr("(");
valuestr += fTriggerMaskPatternString;
valuestr += "&";
valuestr += static_cast<ULong64_t>(1)<<i;
valuestr += ")";
str.ReplaceAll(name,valuestr);
}
fTriggerSelectionString = str;
}
AliEveEventSelector.cxx:1 AliEveEventSelector.cxx:2 AliEveEventSelector.cxx:3 AliEveEventSelector.cxx:4 AliEveEventSelector.cxx:5 AliEveEventSelector.cxx:6 AliEveEventSelector.cxx:7 AliEveEventSelector.cxx:8 AliEveEventSelector.cxx:9 AliEveEventSelector.cxx:10 AliEveEventSelector.cxx:11 AliEveEventSelector.cxx:12 AliEveEventSelector.cxx:13 AliEveEventSelector.cxx:14 AliEveEventSelector.cxx:15 AliEveEventSelector.cxx:16 AliEveEventSelector.cxx:17 AliEveEventSelector.cxx:18 AliEveEventSelector.cxx:19 AliEveEventSelector.cxx:20 AliEveEventSelector.cxx:21 AliEveEventSelector.cxx:22 AliEveEventSelector.cxx:23 AliEveEventSelector.cxx:24 AliEveEventSelector.cxx:25 AliEveEventSelector.cxx:26 AliEveEventSelector.cxx:27 AliEveEventSelector.cxx:28 AliEveEventSelector.cxx:29 AliEveEventSelector.cxx:30 AliEveEventSelector.cxx:31 AliEveEventSelector.cxx:32 AliEveEventSelector.cxx:33 AliEveEventSelector.cxx:34 AliEveEventSelector.cxx:35 AliEveEventSelector.cxx:36 AliEveEventSelector.cxx:37 AliEveEventSelector.cxx:38 AliEveEventSelector.cxx:39 AliEveEventSelector.cxx:40 AliEveEventSelector.cxx:41 AliEveEventSelector.cxx:42 AliEveEventSelector.cxx:43 AliEveEventSelector.cxx:44 AliEveEventSelector.cxx:45 AliEveEventSelector.cxx:46 AliEveEventSelector.cxx:47 AliEveEventSelector.cxx:48 AliEveEventSelector.cxx:49 AliEveEventSelector.cxx:50 AliEveEventSelector.cxx:51 AliEveEventSelector.cxx:52 AliEveEventSelector.cxx:53 AliEveEventSelector.cxx:54 AliEveEventSelector.cxx:55 AliEveEventSelector.cxx:56 AliEveEventSelector.cxx:57 AliEveEventSelector.cxx:58 AliEveEventSelector.cxx:59 AliEveEventSelector.cxx:60 AliEveEventSelector.cxx:61 AliEveEventSelector.cxx:62 AliEveEventSelector.cxx:63 AliEveEventSelector.cxx:64 AliEveEventSelector.cxx:65 AliEveEventSelector.cxx:66 AliEveEventSelector.cxx:67 AliEveEventSelector.cxx:68 AliEveEventSelector.cxx:69 AliEveEventSelector.cxx:70 AliEveEventSelector.cxx:71 AliEveEventSelector.cxx:72 AliEveEventSelector.cxx:73 AliEveEventSelector.cxx:74 AliEveEventSelector.cxx:75 AliEveEventSelector.cxx:76 AliEveEventSelector.cxx:77 AliEveEventSelector.cxx:78 AliEveEventSelector.cxx:79 AliEveEventSelector.cxx:80 AliEveEventSelector.cxx:81 AliEveEventSelector.cxx:82 AliEveEventSelector.cxx:83 AliEveEventSelector.cxx:84 AliEveEventSelector.cxx:85 AliEveEventSelector.cxx:86 AliEveEventSelector.cxx:87 AliEveEventSelector.cxx:88 AliEveEventSelector.cxx:89 AliEveEventSelector.cxx:90 AliEveEventSelector.cxx:91 AliEveEventSelector.cxx:92 AliEveEventSelector.cxx:93 AliEveEventSelector.cxx:94 AliEveEventSelector.cxx:95 AliEveEventSelector.cxx:96 AliEveEventSelector.cxx:97 AliEveEventSelector.cxx:98 AliEveEventSelector.cxx:99 AliEveEventSelector.cxx:100 AliEveEventSelector.cxx:101 AliEveEventSelector.cxx:102 AliEveEventSelector.cxx:103 AliEveEventSelector.cxx:104 AliEveEventSelector.cxx:105 AliEveEventSelector.cxx:106 AliEveEventSelector.cxx:107 AliEveEventSelector.cxx:108 AliEveEventSelector.cxx:109 AliEveEventSelector.cxx:110 AliEveEventSelector.cxx:111 AliEveEventSelector.cxx:112 AliEveEventSelector.cxx:113 AliEveEventSelector.cxx:114 AliEveEventSelector.cxx:115 AliEveEventSelector.cxx:116 AliEveEventSelector.cxx:117 AliEveEventSelector.cxx:118 AliEveEventSelector.cxx:119 AliEveEventSelector.cxx:120 AliEveEventSelector.cxx:121 AliEveEventSelector.cxx:122 AliEveEventSelector.cxx:123 AliEveEventSelector.cxx:124 AliEveEventSelector.cxx:125 AliEveEventSelector.cxx:126 AliEveEventSelector.cxx:127 AliEveEventSelector.cxx:128 AliEveEventSelector.cxx:129 AliEveEventSelector.cxx:130 AliEveEventSelector.cxx:131 AliEveEventSelector.cxx:132 AliEveEventSelector.cxx:133 AliEveEventSelector.cxx:134 AliEveEventSelector.cxx:135 AliEveEventSelector.cxx:136 AliEveEventSelector.cxx:137 AliEveEventSelector.cxx:138 AliEveEventSelector.cxx:139 AliEveEventSelector.cxx:140 AliEveEventSelector.cxx:141 AliEveEventSelector.cxx:142 AliEveEventSelector.cxx:143 AliEveEventSelector.cxx:144 AliEveEventSelector.cxx:145 AliEveEventSelector.cxx:146 AliEveEventSelector.cxx:147 AliEveEventSelector.cxx:148 AliEveEventSelector.cxx:149 AliEveEventSelector.cxx:150 AliEveEventSelector.cxx:151 AliEveEventSelector.cxx:152 AliEveEventSelector.cxx:153 AliEveEventSelector.cxx:154 AliEveEventSelector.cxx:155 AliEveEventSelector.cxx:156 AliEveEventSelector.cxx:157 AliEveEventSelector.cxx:158 AliEveEventSelector.cxx:159 AliEveEventSelector.cxx:160 AliEveEventSelector.cxx:161 AliEveEventSelector.cxx:162 AliEveEventSelector.cxx:163 AliEveEventSelector.cxx:164 AliEveEventSelector.cxx:165 AliEveEventSelector.cxx:166 AliEveEventSelector.cxx:167 AliEveEventSelector.cxx:168 AliEveEventSelector.cxx:169 AliEveEventSelector.cxx:170 AliEveEventSelector.cxx:171 AliEveEventSelector.cxx:172 AliEveEventSelector.cxx:173 AliEveEventSelector.cxx:174 AliEveEventSelector.cxx:175 AliEveEventSelector.cxx:176 AliEveEventSelector.cxx:177 AliEveEventSelector.cxx:178 AliEveEventSelector.cxx:179 AliEveEventSelector.cxx:180 AliEveEventSelector.cxx:181 AliEveEventSelector.cxx:182 AliEveEventSelector.cxx:183 AliEveEventSelector.cxx:184 AliEveEventSelector.cxx:185 AliEveEventSelector.cxx:186 AliEveEventSelector.cxx:187 AliEveEventSelector.cxx:188 AliEveEventSelector.cxx:189 AliEveEventSelector.cxx:190 AliEveEventSelector.cxx:191 AliEveEventSelector.cxx:192 AliEveEventSelector.cxx:193 AliEveEventSelector.cxx:194 AliEveEventSelector.cxx:195 AliEveEventSelector.cxx:196 AliEveEventSelector.cxx:197 AliEveEventSelector.cxx:198 AliEveEventSelector.cxx:199 AliEveEventSelector.cxx:200 AliEveEventSelector.cxx:201 AliEveEventSelector.cxx:202 AliEveEventSelector.cxx:203 AliEveEventSelector.cxx:204 AliEveEventSelector.cxx:205 AliEveEventSelector.cxx:206 AliEveEventSelector.cxx:207 AliEveEventSelector.cxx:208 AliEveEventSelector.cxx:209 AliEveEventSelector.cxx:210 AliEveEventSelector.cxx:211 AliEveEventSelector.cxx:212 AliEveEventSelector.cxx:213 AliEveEventSelector.cxx:214 AliEveEventSelector.cxx:215 AliEveEventSelector.cxx:216 AliEveEventSelector.cxx:217 AliEveEventSelector.cxx:218 AliEveEventSelector.cxx:219 AliEveEventSelector.cxx:220 AliEveEventSelector.cxx:221 AliEveEventSelector.cxx:222 AliEveEventSelector.cxx:223 AliEveEventSelector.cxx:224 AliEveEventSelector.cxx:225 AliEveEventSelector.cxx:226 AliEveEventSelector.cxx:227 AliEveEventSelector.cxx:228 AliEveEventSelector.cxx:229 AliEveEventSelector.cxx:230 AliEveEventSelector.cxx:231 AliEveEventSelector.cxx:232 AliEveEventSelector.cxx:233 AliEveEventSelector.cxx:234 AliEveEventSelector.cxx:235 AliEveEventSelector.cxx:236 AliEveEventSelector.cxx:237 AliEveEventSelector.cxx:238 AliEveEventSelector.cxx:239 AliEveEventSelector.cxx:240 AliEveEventSelector.cxx:241 AliEveEventSelector.cxx:242 AliEveEventSelector.cxx:243 AliEveEventSelector.cxx:244 AliEveEventSelector.cxx:245 AliEveEventSelector.cxx:246 AliEveEventSelector.cxx:247 AliEveEventSelector.cxx:248 AliEveEventSelector.cxx:249 AliEveEventSelector.cxx:250 AliEveEventSelector.cxx:251 AliEveEventSelector.cxx:252 AliEveEventSelector.cxx:253 AliEveEventSelector.cxx:254 AliEveEventSelector.cxx:255 AliEveEventSelector.cxx:256 AliEveEventSelector.cxx:257 AliEveEventSelector.cxx:258 AliEveEventSelector.cxx:259 AliEveEventSelector.cxx:260 AliEveEventSelector.cxx:261 AliEveEventSelector.cxx:262 AliEveEventSelector.cxx:263 AliEveEventSelector.cxx:264 AliEveEventSelector.cxx:265 AliEveEventSelector.cxx:266 AliEveEventSelector.cxx:267 AliEveEventSelector.cxx:268 AliEveEventSelector.cxx:269 AliEveEventSelector.cxx:270 AliEveEventSelector.cxx:271 AliEveEventSelector.cxx:272 AliEveEventSelector.cxx:273 AliEveEventSelector.cxx:274 AliEveEventSelector.cxx:275 AliEveEventSelector.cxx:276 AliEveEventSelector.cxx:277 AliEveEventSelector.cxx:278 AliEveEventSelector.cxx:279 AliEveEventSelector.cxx:280 AliEveEventSelector.cxx:281 AliEveEventSelector.cxx:282 AliEveEventSelector.cxx:283 AliEveEventSelector.cxx:284 AliEveEventSelector.cxx:285 AliEveEventSelector.cxx:286 AliEveEventSelector.cxx:287 AliEveEventSelector.cxx:288 AliEveEventSelector.cxx:289 AliEveEventSelector.cxx:290 AliEveEventSelector.cxx:291 AliEveEventSelector.cxx:292 AliEveEventSelector.cxx:293 AliEveEventSelector.cxx:294 AliEveEventSelector.cxx:295 AliEveEventSelector.cxx:296 AliEveEventSelector.cxx:297 AliEveEventSelector.cxx:298 AliEveEventSelector.cxx:299 AliEveEventSelector.cxx:300 AliEveEventSelector.cxx:301 AliEveEventSelector.cxx:302 AliEveEventSelector.cxx:303 AliEveEventSelector.cxx:304 AliEveEventSelector.cxx:305 AliEveEventSelector.cxx:306 AliEveEventSelector.cxx:307 AliEveEventSelector.cxx:308 AliEveEventSelector.cxx:309 AliEveEventSelector.cxx:310 AliEveEventSelector.cxx:311 AliEveEventSelector.cxx:312 AliEveEventSelector.cxx:313 AliEveEventSelector.cxx:314 AliEveEventSelector.cxx:315 AliEveEventSelector.cxx:316 AliEveEventSelector.cxx:317 AliEveEventSelector.cxx:318 AliEveEventSelector.cxx:319 AliEveEventSelector.cxx:320 AliEveEventSelector.cxx:321 AliEveEventSelector.cxx:322 AliEveEventSelector.cxx:323 AliEveEventSelector.cxx:324 AliEveEventSelector.cxx:325 AliEveEventSelector.cxx:326 AliEveEventSelector.cxx:327 AliEveEventSelector.cxx:328 AliEveEventSelector.cxx:329 AliEveEventSelector.cxx:330 AliEveEventSelector.cxx:331 AliEveEventSelector.cxx:332 AliEveEventSelector.cxx:333 AliEveEventSelector.cxx:334 AliEveEventSelector.cxx:335 AliEveEventSelector.cxx:336 AliEveEventSelector.cxx:337 AliEveEventSelector.cxx:338 AliEveEventSelector.cxx:339 AliEveEventSelector.cxx:340 AliEveEventSelector.cxx:341 AliEveEventSelector.cxx:342 AliEveEventSelector.cxx:343 AliEveEventSelector.cxx:344 AliEveEventSelector.cxx:345 AliEveEventSelector.cxx:346 AliEveEventSelector.cxx:347 AliEveEventSelector.cxx:348 AliEveEventSelector.cxx:349 AliEveEventSelector.cxx:350 AliEveEventSelector.cxx:351 AliEveEventSelector.cxx:352 AliEveEventSelector.cxx:353 AliEveEventSelector.cxx:354 AliEveEventSelector.cxx:355 AliEveEventSelector.cxx:356 AliEveEventSelector.cxx:357 AliEveEventSelector.cxx:358