/[PAMELA software]/PamelaLevel2/inc/PamLevel2.h
ViewVC logotype

Contents of /PamelaLevel2/inc/PamLevel2.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.30 - (show annotations) (download)
Mon Nov 5 13:10:13 2007 UTC (17 years ago) by pam-fi
Branch: MAIN
Changes since 1.29: +177 -9 lines
File MIME type: text/plain
implemente gpamela and new examples

1
2
3 /**
4 * \file PamLevel2.h
5 * \author Elena Vannuccini
6 */
7 #ifndef pamlevel2_h
8 #define pamlevel2_h
9
10 #include <TRefArray.h>
11
12 #include <TrkStruct.h>
13 #include <TrkParams.h>
14 #include <TrkLevel0.h>
15 #include <TrkLevel1.h>
16 #include <TrkLevel2.h>
17 #include <TrkHough.h>
18 #include <CaloLevel0.h>
19 #include <CaloLevel1.h>
20 #include <CaloLevel2.h>
21 #include <ToFLevel2.h>
22 #include <TrigLevel2.h>
23 #include <S4Level2.h>
24 #include <NDLevel2.h>
25 #include <AcLevel2.h>
26 #include <OrbitalInfo.h>
27 #include <RunInfo.h>
28 #include <GLTables.h>
29
30
31 #include <TTree.h>
32 #include <TFriendElement.h>
33 #include <TChain.h>
34 #include <TChainElement.h>
35 #include <TFile.h>
36 #include <TList.h>
37 #include <TKey.h>
38 #include <TSystemFile.h>
39 #include <TSystemDirectory.h>
40 #include <TSQLServer.h>
41
42 #include <stdlib.h>
43 #include <iostream>
44 #include <iomanip>
45 using namespace std;
46
47 #define NCLONES 10
48
49 using namespace std;
50
51
52 /////////////////////////////////////////////////////////////////////////////
53 /////////////////////////////////////////////////////////////////////////////
54 /////////////////////////////////////////////////////////////////////////////
55 /////////////////////////////////////////////////////////////////////////////
56 /**
57 * \brief Class to describe GP output (to be moved to PamelaDigitizer)
58 *
59 */
60
61 class GPamela : public TObject {
62
63 private:
64
65 public:
66
67 // Declaration of leave types
68 Int_t Irun;
69 Int_t Ievnt;
70 Int_t Ipa;
71 Float_t X0;
72 Float_t Y0;
73 Float_t Z0;
74 Float_t Theta;
75 Float_t Phi;
76 Float_t P0;
77 Int_t Nthtof;
78 UChar_t Ipltof[100]; //[Nthtof]
79 UChar_t Ipaddle[100]; //[Nthtof]
80 UChar_t Ipartof[100]; //[Nthtof]
81 Float_t Xintof[100]; //[Nthtof]
82 Float_t Yintof[100]; //[Nthtof]
83 Float_t Zintof[100]; //[Nthtof]
84 Float_t Xouttof[100]; //[Nthtof]
85 Float_t Youttof[100]; //[Nthtof]
86 Float_t Zouttof[100]; //[Nthtof]
87 Float_t Ereltof[100]; //[Nthtof]
88 Float_t Timetof[100]; //[Nthtof]
89 Float_t Pathtof[100]; //[Nthtof]
90 Float_t P0tof[100]; //[Nthtof]
91 Int_t Nthcat;
92 UChar_t Iparcat[50]; //[Nthcat]
93 UChar_t Icat[50]; //[Nthcat]
94 Float_t Xincat[50]; //[Nthcat]
95 Float_t Yincat[50]; //[Nthcat]
96 Float_t Zincat[50]; //[Nthcat]
97 Float_t Xoutcat[50]; //[Nthcat]
98 Float_t Youtcat[50]; //[Nthcat]
99 Float_t Zoutcat[50]; //[Nthcat]
100 Float_t Erelcat[50]; //[Nthcat]
101 Float_t Timecat[50]; //[Nthcat]
102 Float_t Pathcat[50]; //[Nthcat]
103 Float_t P0cat[50]; //[Nthcat]
104 Int_t Nthcas;
105 UChar_t Iparcas[50]; //[Nthcas]
106 UChar_t Icas[50]; //[Nthcas]
107 Float_t Xincas[50]; //[Nthcas]
108 Float_t Yincas[50]; //[Nthcas]
109 Float_t Zincas[50]; //[Nthcas]
110 Float_t Xoutcas[50]; //[Nthcas]
111 Float_t Youtcas[50]; //[Nthcas]
112 Float_t Zoutcas[50]; //[Nthcas]
113 Float_t Erelcas[50]; //[Nthcas]
114 Float_t Timecas[50]; //[Nthcas]
115 Float_t Pathcas[50]; //[Nthcas]
116 Float_t P0cas[50]; //[Nthcas]
117 Int_t Nthspe;
118 UChar_t Iparspe[100]; //[Nthspe]
119 UChar_t Itrpb[100]; //[Nthspe]
120 UChar_t Itrsl[100]; //[Nthspe]
121 UChar_t Itspa[100]; //[Nthspe]
122 Float_t Xinspe[100]; //[Nthspe]
123 Float_t Yinspe[100]; //[Nthspe]
124 Float_t Zinspe[100]; //[Nthspe]
125 Float_t Xoutspe[100]; //[Nthspe]
126 Float_t Youtspe[100]; //[Nthspe]
127 Float_t Zoutspe[100]; //[Nthspe]
128 Float_t Xavspe[100]; //[Nthspe]
129 Float_t Yavspe[100]; //[Nthspe]
130 Float_t Zavspe[100]; //[Nthspe]
131 Float_t Erelspe[100]; //[Nthspe]
132 Float_t Pathspe[100]; //[Nthspe]
133 Float_t P0spe[100]; //[Nthspe]
134 UChar_t Nxmult[100]; //[Nthspe]
135 UChar_t Nymult[100]; //[Nthspe]
136 Int_t Nstrpx;
137 UChar_t Npstripx[1000]; //[Nstrpx]
138 UChar_t Ntstripx[1000]; //[Nstrpx]
139 UShort_t Istripx[1000]; //[Nstrpx]
140 //UInt_t Istripx[1000]; //[Nstrpx]
141 Float_t Qstripx[1000]; //[Nstrpx]
142 Float_t Xstripx[1000]; //[Nstrpx]
143 Int_t Nstrpy;
144 UChar_t Npstripy[1000]; //[Nstrpy]
145 UChar_t Ntstripy[1000]; //[Nstrpy]
146 UShort_t Istripy[1000]; //[Nstrpy]
147 //UInt_t Istripy[1000]; //[Nstrpy]
148 Float_t Qstripy[1000]; //[Nstrpy]
149 Float_t Ystripy[1000]; //[Nstrpy]
150 Int_t Nthcali;
151 UChar_t Icaplane[4224]; //[Nthcali]
152 UChar_t Icastrip[4224]; //[Nthcali]
153 Int_t Icamod[4224]; //[Nthcali]
154 Float_t Enestrip[4224]; //[Nthcali]
155 Int_t Nthcal;
156 UChar_t Icapl[1000]; //[Nthcal]
157 UChar_t Icasi[1000]; //[Nthcal]
158 UChar_t Icast[1000]; //[Nthcal]
159 Float_t Xincal[1000]; //[Nthcal]
160 Float_t Yincal[1000]; //[Nthcal]
161 Float_t Zincal[1000]; //[Nthcal]
162 Float_t Erelcal[1000]; //[Nthcal]
163 Int_t Nthnd;
164 UChar_t Itubend[200]; //[Nthnd]
165 UChar_t Iparnd[200]; //[Nthnd]
166 Float_t Xinnd[200]; //[Nthnd]
167 Float_t Yinnd[200]; //[Nthnd]
168 Float_t Zinnd[200]; //[Nthnd]
169 Float_t Xoutnd[200]; //[Nthnd]
170 Float_t Youtnd[200]; //[Nthnd]
171 Float_t Zoutnd[200]; //[Nthnd]
172 Float_t Erelnd[200]; //[Nthnd]
173 Float_t Timend[200]; //[Nthnd]
174 Float_t Pathnd[200]; //[Nthnd]
175 Float_t P0nd[200]; //[Nthnd]
176 Int_t Nthcard;
177 UChar_t Iparcard[100]; //[Nthcard]
178 UChar_t Icard[100]; //[Nthcard]
179 Float_t Xincard[100]; //[Nthcard]
180 Float_t Yincard[100]; //[Nthcard]
181 Float_t Zincard[100]; //[Nthcard]
182 Float_t Xoutcard[100]; //[Nthcard]
183 Float_t Youtcard[100]; //[Nthcard]
184 Float_t Zoutcard[100]; //[Nthcard]
185 Float_t Erelcard[100]; //[Nthcard]
186 Float_t Timecard[100]; //[Nthcard]
187 Float_t Pathcard[100]; //[Nthcard]
188 Float_t P0card[100]; //[Nthcard]
189
190 GPamela(){ Clear(); };
191 // ~GPamela(){ Delete(); };
192 ~GPamela(){ Clear(); };
193
194 void Clear();
195 void Delete();
196 void SetBranchAddress( TChain* );
197 void SetBranchAddress( TTree* t){ SetBranchAddress( (TChain*)t );};
198
199 GPamela* GetGPamela(){return this;};
200
201 ClassDef(GPamela,1);
202
203 };
204 /////////////////////////////////////////////////////////////////////////////
205 /////////////////////////////////////////////////////////////////////////////
206 /////////////////////////////////////////////////////////////////////////////
207 /////////////////////////////////////////////////////////////////////////////
208
209
210
211 /**
212 * \brief Class to describe particle tracks in the apparatus, including tracker and track-related variables from other detectors (calorimeter and TOF).
213 *
214 * This class inherites from TrkTrack, CaloTrkVar ecc...
215 *
216 */
217 //class PamTrack : public TrkTrack, public CaloTrkVar, public ToFTrkVar {
218 class PamTrack : public TObject {
219
220 private:
221
222 TrkTrack* trk_track;
223 CaloTrkVar* calo_track;
224 ToFTrkVar* tof_track;
225 Int_t pscore;
226 Int_t iscore;
227 bool candeleteobj;
228
229 // TClonesArray *Cluster; ///< clusters (if stored)
230
231 public:
232
233 PamTrack();
234 PamTrack(TrkTrack* , CaloTrkVar* , ToFTrkVar* );
235 PamTrack(const PamTrack&);
236 ~PamTrack(){ Delete(); };
237
238 void Clear();
239 void Clear(Option_t *option){Clear();};
240 void Delete();
241
242 Bool_t IsSolved(){if ((pscore-iscore)>0) return true; return false;};
243 Int_t GetScore(){return (pscore-iscore);};
244 Int_t GetPScore(){return (pscore);};
245 Int_t GetIScore(){return (iscore);};
246 void SetPScore(Int_t p){pscore=p;};
247 void SetIScore(Int_t i){iscore=i;};
248
249 TrkTrack* GetTrkTrack(){return trk_track;};
250 CaloTrkVar* GetCaloTrack(){return calo_track;};
251 ToFTrkVar* GetToFTrack(){return tof_track;};
252
253 ClassDef(PamTrack,1);
254 };
255
256 /**
257 * \brief Class to describe PAMELA LEVEL2 data.
258 *
259 * This class inherites from TrkLevel2, CaloLevel2 ecc... and it overrides the TrkLevel2:GetTrack(int it) and TrkLevel2:GetTrackImage(int it) methods.
260 * This allows to solve the tracker ambiguity (that is, to choose between track images) by using also information from other detectors.
261 */
262
263 //class PamLevel2 : public CaloLevel2, public CaloLevel1, public ToFLevel2, public TrkLevel2, public TrkLevel1, public TrkHough, public TrigLevel2, public S4Level2, public NDLevel2, public AcLevel2, public OrbitalInfo {
264 class PamLevel2 : public TObject {
265
266 private:
267
268 // ------------------------------
269 // variables to retrieve run info
270 // ------------------------------
271 // Int_t irun; //current run entry, relative to the TChain
272 Long64_t irun; //current run entry, relative to the TChain
273 // ULong64_t runfirstentry; //first entry of run, relative to the TChain
274 // ULong64_t runlastentry; //last entry of run, relative to the TChain
275 // Int_t irunentry; //position of current entry, relative to the run
276 Long64_t runfirstentry; //first entry of run, relative to the TChain
277 Long64_t runlastentry; //last entry of run, relative to the TChain
278 Long64_t irunentry; //position of current entry, relative to the run
279 TChain* run_tree;
280 TTree* run_tree_clone;
281 TChain* sel_tree;
282 TTree* sel_tree_clone;
283
284 // -------------------------------------------
285 // variables to store total live and dead time
286 // -------------------------------------------
287 ULong64_t totdltime[3];// 0=live 1=dead 2=n.events
288
289 // ---------------------------------
290 // variables to retrieve level0 info
291 // ---------------------------------
292 TFile* l0_file;
293 TTree* l0_tree;
294 Int_t iroot;
295 Int_t prevshift; // to remember if any shift is needed to synchronize l0 and l2 data instead of calculating any time
296 Int_t maxshift; // EMILIANO maximum discrepancy between L2 and L0 data (the bigger the better concering synch but the processing speed drops) default = 10
297 // --------------------------------------------
298 // variables to store Level0 info (if required)
299 // --------------------------------------------
300 EventHeader* h0_obj;
301 TrkLevel0* trk0_obj;
302 CaloLevel0* calo0_obj;
303
304 // ---------------------------
305 // variables to connect the DB
306 // ---------------------------
307 TSQLServer* dbc;
308 TString host;
309 TString user;
310 TString psw;
311
312 // ---------------------------------------------
313 // variables to retrieve and clone level1-2 info
314 // ---------------------------------------------
315 TChain* pam_tree;
316 TTree* pam_tree_clone[NCLONES];
317
318 // --------------------------------------------
319 // variables to store Level1-2 info
320 // --------------------------------------------
321 TrkLevel1* trk1_obj;
322 TrkLevel2* trk2_obj;
323 TrkHough* trkh_obj;
324 CaloLevel1* calo1_obj;
325 CaloLevel2* calo2_obj;
326 ToFLevel2* tof_obj;
327 TrigLevel2* trig_obj;
328 S4Level2* s4_obj;
329 NDLevel2* nd_obj;
330 AcLevel2* ac_obj;
331 OrbitalInfo* orb_obj;
332 GL_RUN* run_obj;
333 SoftInfo* soft_obj; // Emiliano
334
335 // --------------------------------------------
336 // variables to handle GP
337 // --------------------------------------------
338 GPamela* gp_obj;
339
340 // -----------------------------------
341 // variables to sort the track
342 // -----------------------------------
343 TClonesArray *tsorted;
344 TClonesArray *timage;
345 PamTrack *track; //store the last required
346 TString howtosort;
347 Float_t sortthr;
348
349 // --------------------------------------
350 // flags to load level0-1-2 trees/braches
351 // --------------------------------------
352 Bool_t CAL2; //level2 branch
353 Bool_t CAL1; //level1 branch
354 Bool_t CAL0; //yoda
355
356 Bool_t TRK2; //level2 branch
357 Bool_t TRK1; //level1 branch
358 Bool_t TRKh; //hough branch
359 Bool_t TRK0; //yoda
360
361 Bool_t TOF;
362 Bool_t TOF0;
363
364 Bool_t TRG;
365 Bool_t S4;
366 Bool_t ND;
367 Bool_t AC;
368 Bool_t ORB;
369
370 Bool_t GP; //GP simulation tree
371
372 // -----------
373 // other flags
374 // -----------
375 Bool_t RUN; // RunInfo tree
376 Bool_t ISGP; // GP simulation (...sort of patch, to skip OBT check, since OrbitalInfo is sometime missing)
377 Int_t SELLI; // tree of selected events (there is a selection list)
378
379 void Initialize();
380
381
382 public:
383
384 PamLevel2(TString ddir,TString list,TString detlist);
385 PamLevel2(TString ddir,TString list);
386 PamLevel2();
387 ~PamLevel2(){Delete();};
388
389 void Clear();
390 void Reset();
391 void Delete();
392
393
394 // =============================================
395 // methods needed to read/write Level0-1-2 trees
396 // =============================================
397 void SetWhichTrees(TString);
398 void GetWhichTrees(TFile*);
399
400 TTree* GetPamTree(TFile*,TString);
401 TTree* GetPamTree(TFile* f){return GetPamTree(f,"");};
402
403 TList* GetListOfLevel2Files(TString, TString);
404 Bool_t CheckLevel2File(TString);
405 TChain* GetPamTree(TList*,TString);
406 TChain* GetPamTree(TString ddir,TString list,TString detlist){ return GetPamTree(GetListOfLevel2Files(ddir,list),detlist); };
407 TChain* GetPamTree(TString ddir,TString list){ return GetPamTree(GetListOfLevel2Files(ddir,list),""); };
408 TChain* AddFriend(TString);
409
410 TTree* GetRunTree(TFile*);
411 TChain* GetRunTree(TList*);
412 TChain* GetRunTree(TString ddir,TString list){ return GetRunTree(GetListOfLevel2Files(ddir,list)); };
413 Bool_t UpdateRunInfo(Long64_t);//{ return UpdateRunInfo(run_tree,iev); };
414 Bool_t UpdateRunInfo(TTree *,Long64_t);
415 Bool_t UpdateRunInfo(TChain *,Long64_t);
416
417 void CreateCloneTrees0(TChain *fChain, TFile* file);
418 void CreateCloneTrees(TFile* file);
419 void CreateCloneTrees(){CreateCloneTrees(NULL);};
420 void FillCloneTrees();
421 TTree *GetCloneTree(TString);
422 void WriteCloneTrees();
423
424 void SetBranchAddress(TTree *);
425 void SetBranchAddress(TChain *);
426
427 // Int_t GetEntry(Int_t);
428 Int_t GetEntry(Long64_t);
429 Int_t GetYodaEntry();
430
431 void SetMaxShift(Int_t sh){ maxshift = sh; return;}; // EMILIANO method to change the maxshift variable
432
433 Long64_t GetEntries(){return pam_tree->GetEntries();};
434 TChain* GetPamTree(){return pam_tree;};
435 TChain* GetRunTree(){return run_tree;};
436 TTree* GetYodaTree();
437
438 TFile* GetYodaFile(){return l0_file;}; // can be useful to know the name of level0 file we are using or similar things
439
440 // =============
441 // DB connection
442 // =============
443 void SetDBHost(TString str){host=str;};
444 void SetDBUser(TString str){user=str;};
445 void SetDBPsw(TString str){psw=str;};
446 TSQLServer* GetSQLServer(){return dbc;};
447 Bool_t SetDBConnection();
448
449 // ========================================================
450 // methods needed to retrieve subdetector general variables
451 // ========================================================
452 void* GetPointerTo(const char*);
453 EventHeader *GetEventHeader() { return h0_obj; };
454
455 /* TrkLevel0 *GetTrkLevel0() { return trk0_obj; }; */
456 /* CaloLevel0 *GetCaloLevel0() { return calo0_obj; }; */
457 TrkLevel0 *GetTrkLevel0();
458 CaloLevel0 *GetCaloLevel0();
459
460
461 TrkLevel1 *GetTrkLevel1() { return trk1_obj; };
462 TrkLevel2 *GetTrkLevel2() { return trk2_obj; };
463 TrkHough *GetTrkHough() { return trkh_obj; };
464 CaloLevel1 *GetCaloLevel1() { return calo1_obj;};
465 CaloLevel2 *GetCaloLevel2() { return calo2_obj;};
466 ToFLevel2 *GetToFLevel2() { return tof_obj; };
467 TrigLevel2 *GetTrigLevel2() { return trig_obj; };
468 S4Level2 *GetS4Level2() { return s4_obj; };
469 NDLevel2 *GetNDLevel2() { return nd_obj; };
470 AcLevel2 *GetAcLevel2() { return ac_obj; };
471 OrbitalInfo *GetOrbitalInfo(){ return orb_obj; };
472 GL_RUN *GetRunInfo() { return run_obj; };
473 SoftInfo *GetSoftInfo() { return soft_obj; }; // Emiliano
474 GPamela *GetGPamela() { return gp_obj; };
475
476 // ==============================================
477 // methods to retrieve subdetectors stored tracks
478 // ==============================================
479 TrkTrack* GetTrkStoredTrack(int seqno){return trk2_obj->TrkLevel2::GetStoredTrack(seqno); };
480 CaloTrkVar* GetCaloStoredTrack(int);
481 ToFTrkVar* GetToFStoredTrack(int);
482 //
483 PamTrack* GetPamTrackAlong(TrkTrack*);
484 // PamTrack* GetPamTrackAlong(CaloTrkVar*); //se serve
485 // PamTrack* GetPamTrackAlong(ToFTrkVar*); //se serve
486
487 // =================================
488 // methods to retrieve pamela tracks
489 // =================================
490 PamTrack* GetStoredTrack(Int_t);
491 //
492 void SortTracks(TString); //assign value to variable sorted_tracks
493 void SortTracks(); //assign value to variable sorted_tracks
494 // TRefArray* GetTracks(); //return sorted_tracks
495 TClonesArray* GetTracks(); //return sorted_tracks
496 PamTrack* GetTrack(int);
497 PamTrack* GetTrackImage(int);
498 void SetSortingMethod(TString how){ howtosort = how; return;};
499 TString GetSortingMethod(){return howtosort;};
500 void SetNucleiSortingThreshold(Float_t nucleithr){ sortthr = nucleithr; return;};
501 Float_t GetNucleiSortingThreshold(){ return sortthr;};
502
503 // =================================
504 // other methods
505 // =================================
506 // Int_t ntrk(){ return trk2_obj->TrkLevel2::ntrk(); };
507
508 // -----
509 // flags methods
510 // -----
511 Bool_t IsCAL2(){return CAL2;}; //level2 branch
512 Bool_t IsCAL1(){return CAL1;}; //level1 branch
513 Bool_t IsCAL0(){return CAL0;}; //yoda
514
515 Bool_t IsTRK2(){return TRK2;}; //level2 branch
516 Bool_t IsTRK1(){return TRK1;}; //level1 branch
517 Bool_t IsTRKh(){return TRKh;}; //hough branch
518 Bool_t IsTRK0(){return TRK0;}; //yoda
519
520 Bool_t IsTOF(){return TOF;};
521 Bool_t IsTOF0(){return TOF0;};
522
523 Bool_t IsTRG(){return TRG;};
524 Bool_t IsS4(){return S4;};
525 Bool_t IsND(){return ND;};
526 Bool_t IsAC(){return AC;};
527 Bool_t IsORB(){return ORB;};
528
529 Bool_t IsRUN(){return RUN;};
530
531 Bool_t IsGood();
532
533 Int_t IsSELLI(){return SELLI;}; //trees of selected events (there is a selection list)
534
535 Bool_t IsGP(){return ISGP;};
536
537 void SetGP(Bool_t tt){ISGP=tt;};
538
539
540 ClassDef(PamLevel2,1);
541 };
542
543 //===============================================================================================
544 //
545 //
546 //
547 //
548 //===============================================================================================
549
550
551 #endif
552

  ViewVC Help
Powered by ViewVC 1.1.23