|
[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ repository ]
STAR Offline Software
Cross Reference
|
1 // $Id: StHbtExample.C,v 1.9 2000/04/13 21:46:22 kathy Exp $
2 // $Log: StHbtExample.C,v $
3 // Revision 1.9 2000/04/13 21:46:22 kathy
4 // remove loading of libtpc_Tables since l3Track table is now dst_track type from global
5 //
6 // Revision 1.8 2000/04/12 17:39:02 kathy
7 // change to only load table libraries needed: lib*_Tables instead of all tables: St_Tables
8 //
9 // Revision 1.7 2000/03/20 17:50:40 kathy
10 // fix all macros so that they set all branches on that are needed - otherwise won't work with soft links
11 //
12 // Revision 1.6 2000/01/19 15:52:46 kathy
13 // change default input file to be the one in /afs/rhic/star/data/samples
14 //
15 // Revision 1.5 1999/09/24 00:00:34 lisa
16 // HBT example macro updated to use TrackCuts not ParticleCuts
17 //
18 // Revision 1.4 1999/07/27 21:09:18 lisa
19 // do event loop with goto because Cint pukes on for loop
20 //
21 // Revision 1.3 1999/07/13 02:31:39 lisa
22 // Update StHbtExample macro for new StHbtMaker
23 //
24 // Revision 1.2 1999/07/13 01:13:02 kathy
25 // moved rch.C to obsolete, put in id,log,owner into HbtExample, removed loading of StRootEvent and changed default input file in bfcread.C and Example_readdst_qa_tables.C
26 //
27
28 //======================================================================
29 // owner: Mike Lisa
30 // what it does:
31 // runs the StHbt framework. Runs two simultaneous correlation
32 // analyses. The first one is pi-pi HBT, building two simultaneous
33 // correlation functions. The second in K+K-, building an invariant
34 // mass spectrum with background subtraction
35 //=======================================================================
36
37 class StChain;
38 StChain *chain=0;
39
40 // keep pointers to Correlation Functions global, so you can have access to them...
41 class QinvCorrFctn;
42 QinvCorrFctn* QinvCF;
43 class QvecCorrFctn;
44 QvecCorrFctn* QvecCF;
45 class MinvCorrFctn;
46 MinvCorrFctn* MinvCF;
47
48 void StHbtExample(Int_t nevents=1,
49 const char *MainFile=
50 "/afs/rhic/star/data/samples/gstar.dst.root")
51 {
52
53 // Dynamically link needed shared libs
54 gSystem->Load("St_base");
55 gSystem->Load("StChain");
56 gSystem->Load("libglobal_Tables");
57 gSystem->Load("libsim_Tables");
58 gSystem->Load("libgen_Tables");
59 gSystem->Load("StUtilities"); // new addition 22jul99
60 gSystem->Load("StAnalysisUtilities"); // needed by V0dstMaker
61 gSystem->Load("StMagF");
62 gSystem->Load("StIOMaker");
63 gSystem->Load("StarClassLibrary");
64 gSystem->Load("StEvent");
65 gSystem->Load("StEventMaker");
66 gSystem->Load("StHbtMaker");
67 gSystem->Load("StV0MiniDstMaker");
68
69 cout << "Dynamic loading done" << endl;
70
71 chain = new StChain("StChain");
72 chain->SetDebug();
73
74
75 // Now we add Makers to the chain...
76
77 StIOMaker* ioMaker = new StIOMaker("IO","r",MainFile,"bfcTree");
78 ioMaker->SetDebug();
79
80 ioMaker->SetIOMode("r");
81 ioMaker->SetDebug();
82 ioMaker->SetBranch("*",0,""); //deactivate all branches
83 ioMaker->SetBranch("dstBranch",0,"r"); //activate EventBranch
84 ioMaker->SetBranch("runcoBranch",0,"r"); //activate runcoBranch
85
86
87 StEventMaker* eventMaker = new StEventMaker("events","title");
88 cout << "Just instantiated StEventMaker... lets go StHbtMaker!" << endl;
89
90 // UNCOMMENT THIS NEXT PART OUT IF YOU WANT V0's
91 //StV0MiniDstMaker* v0dst = new StV0MiniDstMaker("v0dst");
92 //cout << "Just instantiated StV0MiniDstMaker... lets go StHbt!" << endl;
93 //v0dst.SetV0VertexType(); //Set v0MiniDstMaker to find v0s not Xis
94 //v0dst.SetOutputFile("muv0dst.root"); // Set V0MiniDStMaker output file
95
96
97
98 StHbtMaker* hbtMaker = new StHbtMaker("HBT","title");
99 cout << "StHbtMaker instantiated"<<endl;
100
101
102
103 /* -------------- set up of hbt stuff ----- */
104 cout << "StHbtMaker::Init - setting up Reader and Analyses..." << endl;
105
106 StHbtManager* TheManager = hbtMaker->HbtManager();
107
108 // here, we instantiate the appropriate StHbtEventReader
109 // for STAR analyses in root4star, we instantiate StStandardHbtEventReader
110 StStandardHbtEventReader* Reader = new StStandardHbtEventReader;
111 Reader->SetTheEventMaker(eventMaker); // gotta tell the reader where it should read from
112
113 // UNCOMMENT THIS NEXT LINE OUT IF YOU WANT V0's
114 // Reader->SetTheV0Maker(v0dst); //Gotta tell the reader where to read the v0 stuff from
115
116 // here would be the palce to plug in any "front-loaded" Event or Particle Cuts...
117 TheManager->SetEventReader(Reader);
118
119 cout << "READER SET UP.... " << endl;
120
121 // Hey kids! Let's make a microDST!
122 // in StHbt we do this by instantiating and plugging in a StHbtEventReader as a writer!
123 // the particular StHbtEventReader that we will use will write (and read) ASCII files
124 //
125 // StHbtAsciiReader* Writer = new StHbtAsciiReader;
126 // Writer->SetFileName("FirstMicroDst.asc");
127 // TheManager->SetEventWriter(Writer);
128 // cout << "WRITER SET UP.... " << endl;
129
130 // 0) now define an analysis...
131 StHbtAnalysis* anal = new StHbtAnalysis;
132 // 1) set the Event cuts for the analysis
133 mikesEventCut* evcut = new mikesEventCut; // use "mike's" event cut object
134 evcut->SetEventMult(0,10000); // selected multiplicity range
135 evcut->SetVertZPos(-35.0,35.0); // selected range of vertex z-position
136 anal->SetEventCut(evcut); // this is the event cut object for this analsys
137 // 2) set the Track (particle) cuts for the analysis
138 mikesTrackCut* trkcut = new mikesTrackCut; // use "mike's" particle cut object
139 trkcut->SetNSigmaPion(-1.5,1.5); // number of Sigma in TPC dEdx away from nominal pion dEdx
140 trkcut->SetNSigmaKaon(-1000.0,1000.0); // number of Sigma in TPC dEdx away from nominal kaon dEdx
141 trkcut->SetNSigmaProton(-1000.0,1000.0); // number of Sigma in TPC dEdx away from nominal proton dEdx
142 trkcut->SetNHits(5,50); // range on number of TPC hits on the track
143 trkcut->SetPt(0.1,1.0); // range in Pt
144 trkcut->SetRapidity(-1.0,1.0); // range in rapidity
145 trkcut->SetDCA(0.0,0.5); // range in Distance of Closest Approach to primary vertex
146 trkcut->SetCharge(-1); // want negative pions
147 trkcut->SetMass(0.139); // pion mass
148 anal->SetFirstParticleCut(trkcut); // this is the track cut for the "first" particle
149 anal->SetSecondParticleCut(trkcut); // NOTE - it is also for the "second" particle -- i.e. identical particle HBT
150 // 3) set the Pair cuts for the analysis
151 mikesPairCut* paircut = new mikesPairCut; // use "mike's" pair cut object
152 anal->SetPairCut(paircut); // this is the pair cut for this analysis
153 // 4) set the number of events to mix (per event)
154 anal->SetNumEventsToMix(5);
155 // 5) now set up the correlation functions that this analysis will make
156 // this particular analysis will have two: the first is a Q-invariant correlation function
157 QinvCF = new QinvCorrFctn("mikesQinvCF",50,0.0,0.2); // defines a Qinv correlation function
158 anal->AddCorrFctn(QinvCF); // adds the just-defined correlation function to the analysis
159 // for this analysis, we will also (simultaneously) build a Q-vector correlation function
160 QvecCF = new QvecCorrFctn("randysQvecCF",50,0.0,0.2);
161 anal->AddCorrFctn(QvecCF); // adds the just-defined correlation function to the analysis
162
163 // now add as many more correlation functions to the Analysis as you like..
164
165 // 6) add the Analysis to the AnalysisCollection
166 TheManager->AddAnalysis(anal);
167
168 // now, we define another analysis that runs simultaneously with the previous one.
169 // this one looks at K+K- correlations (so NONidentical particles) in invariant mass
170
171 /* ****************************************** */
172 /* * franks phi analysis - by Frank Laue, OSU */
173 /* ****************************************** */
174 // 0) now define an analysis...
175 StHbtAnalysis* phiAnal = new StHbtAnalysis;
176 // 1) set the Event cuts for the analysis
177 mikesEventCut* phiEvcut = new mikesEventCut; // use "mike's" event cut object
178 phiEvcut->SetEventMult(0,10000); // selected multiplicity range
179 phiEvcut->SetVertZPos(-35.0,35.0); // selected range of vertex z-position
180 phiAnal->SetEventCut(phiEvcut); // this is the event cut object for this analsys
181 // 2) set the Track (particle) cuts for the analysis
182 mikesTrackCut* kaonTrkcut = new mikesTrackCut; // use "mike's" particle cut object
183 kaonTrkcut->SetNSigmaPion(3,1000.0); // number of Sigma in TPC dEdx away from nominal pion dEdx
184 kaonTrkcut->SetNSigmaKaon(-3.0,3.0); // number of Sigma in TPC dEdx away from nominal kaon dEdx
185 kaonTrkcut->SetNSigmaProton(-1000.,-1.0); // number of Sigma in TPC dEdx away from nominal proton dEdx
186 kaonTrkcut->SetNHits(0,50); // range on number of TPC hits on the track
187 kaonTrkcut->SetPt(0.1,2.0); // range in Pt
188 kaonTrkcut->SetRapidity(-2.0,2.0); // range in rapidity
189 kaonTrkcut->SetDCA(0.0,0.5); // range in Distance of Closest Approach to primary vertex
190 kaonTrkcut->SetCharge(+1); // want positive kaons
191 kaonTrkcut->SetMass(0.494); // kaon mass
192 phiAnal->SetFirstParticleCut(kaonTrkcut); // this is the track cut for the "first" particle
193 mikesTrackCut* antikaonTrkcut = new mikesTrackCut; // use "mike's" particle cut object
194 antikaonTrkcut->SetNSigmaPion(3.0,1000.0); // number of Sigma in TPC dEdx away from nominal pion dEdx
195 antikaonTrkcut->SetNSigmaKaon(-3.0,3.0); // number of Sigma in TPC dEdx away from nominal kaon dEdx
196 antikaonTrkcut->SetNSigmaProton(-1000.0,-1.0); // number of Sigma in TPC dEdx away from nominal proton dEdx
197 antikaonTrkcut->SetNHits(0,50); // range on number of TPC hits on the track
198 antikaonTrkcut->SetPt(0.1,2.0); // range in Pt
199 antikaonTrkcut->SetRapidity(-2.0,2.0); // range in rapidity
200 antikaonTrkcut->SetDCA(0.0,0.5); // range in Distance of Closest Approach to primary vertex
201 antikaonTrkcut->SetCharge(-1); // want negative kaons
202 antikaonTrkcut->SetMass(0.494); // kaon mass
203 phiAnal->SetSecondParticleCut(antikaonTrkcut); // this is the track cut for the "second" particle
204 // 3) set the Pair cuts for the analysis
205 mikesPairCut* phiPaircut = new mikesPairCut; // use "mike's" pair cut object
206 phiAnal->SetPairCut(phiPaircut); // this is the pair cut for this analysis
207 // 4) set the number of events to mix (per event)
208 phiAnal->SetNumEventsToMix(5);
209 // 5) now set up the correlation functions that this analysis will make
210 MinvCF = new MinvCorrFctn("franksMinvCF",100,0.98,1.18); // defines a Minv correlation function
211 phiAnal->AddCorrFctn(MinvCF); // adds the just-defined correlation function to the analysis
212 // now add as many more correlation functions to the Analysis as you like..
213 // 6) add the Analysis to the AnalysisCollection
214 TheManager->AddAnalysis(phiAnal);
215
216
217
218 /* ------------------ end of setting up hbt stuff ------------------ */
219
220
221 // now execute the chain member functions
222
223 if (chain->Init()){ // This should call the Init() method in ALL makers
224 cout << "Initialization failed \n";
225 goto TheEnd;
226 }
227 chain->PrintInfo();
228
229
230 // Event loop
231 int istat=0,iev=1;
232 EventLoop: if (iev <= nevents && !istat) {
233 cout << "StHbtExample -- Working on eventNumber " << iev << " of " << nevents << endl;
234 chain->Clear();
235 istat = chain->Make(iev);
236 if (istat) {cout << "Last event processed. Status = " << istat << endl;}
237 iev++; goto EventLoop;
238 }
239
240 // good old Cint can't even handle a for-loop
241 // for (Int_t iev=1;iev<=nevents; iev++) {
242 // chain->Clear();
243 // int iret = chain->Make(iev); // This should call the Make() method in ALL makers
244 // if (iret) {
245 // cout << "StHbtExample.C -- chain returned nonzero value " << iret
246 // << " on event " << iev << endl;
247 // break;
248 // }
249 // } // Event Loop
250
251
252
253 cout << "StHbtExample -- Done with event loop" << endl;
254
255 chain->Finish(); // This should call the Finish() method in ALL makers
256 TheEnd:
257 }
258
|
[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ repository ]
|