]>
Commit | Line | Data |
---|---|---|
1b446896 | 1 | #include "AliHBTReader.h" |
2 | ||
0fdcc83d | 3 | #include <TString.h> |
4 | #include <TObjString.h> | |
5 | #include <TObjArray.h> | |
6 | #include <TClass.h> | |
d0c23b58 | 7 | #include <Riostream.h> |
0fdcc83d | 8 | |
1b446896 | 9 | #include "AliHBTParticleCut.h" |
10 | ||
88cb7938 | 11 | |
1b446896 | 12 | ClassImp(AliHBTReader) |
13 | //pure virtual | |
14 | ||
15 | /*************************************************************************************/ | |
16 | ||
17 | AliHBTReader::AliHBTReader() | |
18 | { | |
19 | //constructor | |
20 | fCuts = new TObjArray(); | |
0fdcc83d | 21 | fDirs = 0x0; |
1b446896 | 22 | } |
23 | ||
24 | /*************************************************************************************/ | |
0fdcc83d | 25 | AliHBTReader::AliHBTReader(TObjArray* dirs) |
26 | { | |
27 | fCuts = new TObjArray(); | |
28 | fDirs = dirs; | |
29 | } | |
1b446896 | 30 | |
31 | AliHBTReader::~AliHBTReader() | |
32 | { | |
33 | //destructor | |
36ee4bd5 | 34 | if(fCuts) |
35 | { | |
36 | fCuts->SetOwner(); | |
37 | delete fCuts; | |
38 | } | |
1b446896 | 39 | } |
40 | ||
41 | /*************************************************************************************/ | |
42 | ||
43 | void AliHBTReader::AddParticleCut(AliHBTParticleCut* cut) | |
44 | { | |
45 | //sets the new cut | |
46 | ||
47 | if (!cut) //if cut is NULL return with error | |
48 | { | |
49 | Error("AddParticleType","NULL pointers are not accepted any more.\nIf You want to accept all particles of this type, set an empty cut "); | |
50 | return; | |
51 | } | |
52 | AliHBTParticleCut *c = (AliHBTParticleCut*)cut->Clone(); | |
53 | fCuts->Add(c); | |
54 | } | |
55 | ||
56 | /*************************************************************************************/ | |
57 | ||
58 | Bool_t AliHBTReader::Pass(AliHBTParticle* p) | |
88cb7938 | 59 | { |
1b446896 | 60 | //Method examines whether particle meets all cut and particle type criteria |
61 | ||
62 | if(p==0x0)//of corse we not pass NULL pointers | |
63 | { | |
64 | Warning("Pass()","No Pasaran! We never accept NULL pointers"); | |
65 | return kTRUE; | |
66 | } | |
67 | //if no particle is specified, we pass all particles | |
68 | //excluding NULL pointers, of course | |
e526d37c | 69 | if ( fCuts->GetEntriesFast() == 0 ) return kFALSE; //if no cut specified accept all particles |
1b446896 | 70 | for(Int_t i=0; i<fCuts->GetEntriesFast(); i++) |
71 | { | |
72 | AliHBTParticleCut &cut = *((AliHBTParticleCut*)fCuts->At(i)); | |
73 | if(!cut.Pass(p)) return kFALSE; //accepted | |
74 | } | |
75 | ||
76 | return kTRUE;//not accepted | |
88cb7938 | 77 | } |
1b446896 | 78 | /*************************************************************************************/ |
79 | ||
80 | Bool_t AliHBTReader::Pass(Int_t pid) | |
81 | { | |
82 | //this method checks if any of existing cuts accepts this pid particles | |
83 | //or any cuts accepts all particles | |
84 | ||
85 | if(pid == 0) | |
86 | return kTRUE; | |
e526d37c | 87 | |
88 | if ( fCuts->GetEntriesFast() == 0 ) return kFALSE; //if no cut specified accept all particles | |
1b446896 | 89 | |
90 | for(Int_t i=0; i<fCuts->GetEntriesFast(); i++) | |
91 | { | |
92 | AliHBTParticleCut &cut = *((AliHBTParticleCut*)fCuts->At(i)); | |
93 | //if some of cuts accepts all particles or some accepts particles of this type, accept | |
94 | if ( (cut.GetPID() == 0) || (cut.GetPID() == pid) ) return kFALSE; | |
95 | } | |
96 | return kTRUE; | |
97 | } | |
98 | /*************************************************************************************/ | |
0fdcc83d | 99 | |
100 | TString& AliHBTReader::GetDirName(Int_t entry) | |
101 | { | |
102 | TString* retval;//return value | |
103 | if (fDirs == 0x0) | |
104 | { | |
105 | retval = new TString("."); | |
106 | return *retval; | |
107 | } | |
108 | ||
109 | if ( (entry>fDirs->GetEntries()) || (entry<0))//if out of bounds return empty string | |
110 | { //note that entry==0 is accepted even if array is empty (size=0) | |
111 | Error("GetDirName","Name out of bounds"); | |
112 | retval = new TString(); | |
113 | return *retval; | |
114 | } | |
115 | ||
116 | if (fDirs->GetEntries() == 0) | |
117 | { | |
118 | retval = new TString("."); | |
119 | return *retval; | |
120 | } | |
121 | ||
122 | TClass *objclass = fDirs->At(entry)->IsA(); | |
123 | TClass *stringclass = TObjString::Class(); | |
124 | ||
125 | TObjString *dir = (TObjString*)objclass->DynamicCast(stringclass,fDirs->At(entry)); | |
126 | ||
127 | if(dir == 0x0) | |
128 | { | |
129 | Error("GetDirName","Object in TObjArray is not a TObjString or its descendant"); | |
130 | retval = new TString(); | |
131 | return *retval; | |
132 | } | |
133 | if (gDebug > 0) cout<<"Returned ok "<<dir->String().Data()<<endl; | |
134 | return dir->String(); | |
135 | } | |
136 |