/[PAMELA software]/PamelaLevel2/src/PamLevel2.cpp
ViewVC logotype

Contents of /PamelaLevel2/src/PamLevel2.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1 - (show annotations) (download)
Fri Jun 16 16:43:55 2006 UTC (18 years, 5 months ago) by pam-fi
Branch: MAIN
Branch point for: PamelaLevel2
Initial revision

1 #include <PamLevel2.h>
2 //--------------------------------------
3 //
4 //
5 //--------------------------------------
6 /**
7 * Default constructor
8 */
9 PamTrack::PamTrack(){
10 trk_track = this->TrkTrack::GetTrkTrack();
11 calo_track = this->CaloTrkVar::GetCaloTrkVar();
12 tof_track = this->ToFTrkVar::GetToFTrkVar();
13 };
14 //--------------------------------------
15 //
16 //
17 //--------------------------------------
18 /**
19 * Constructor
20 */
21 PamTrack::PamTrack(TrkTrack* t, CaloTrkVar* c, ToFTrkVar* o){
22 trk_track = this->TrkTrack::GetTrkTrack();
23 calo_track = this->CaloTrkVar::GetCaloTrkVar();
24 tof_track = this->ToFTrkVar::GetToFTrkVar();
25 if(t) *trk_track = *t;
26 if(c) *calo_track = *c;
27 if(o) *tof_track = *o;
28 };
29
30 //--------------------------------------
31 //
32 //
33 //--------------------------------------
34 /**
35 * Constructor
36 */
37 PamLevel2::PamLevel2(){
38 trk_obj = this->TrkLevel2::GetTrkLevel2();
39 calo_obj = this->CaloLevel2::GetCaloLevel2();
40 tof_obj = this->ToFLevel2::GetToFLevel2();
41 trig_obj = this->TrigLevel2::GetTrigLevel2();
42 s4_obj = this->S4Level2::GetS4Level2();
43 nd_obj = this->NDLevel2::GetNDLevel2();
44 ac_obj = this->AcLevel2::GetAcLevel2();
45 };
46 //--------------------------------------
47 //
48 //
49 //--------------------------------------
50 /**
51 * Retrieves the it-th stored track.
52 * It override TrkLevel2::GetTrack(int it).
53 * @param itrk Track number, ranging from 0 to GetNTracks().
54 */
55
56 PamTrack* PamLevel2::GetStoredTrack(Int_t itrk){
57
58 // retrieve itrk-th tracker stored track
59 TrkTrack *t = 0;
60 CaloTrkVar *c = 0;
61 ToFTrkVar *o = 0;
62
63 if( itrk >=0 && itrk < TrkLevel2::ntrk() ){
64 t = TrkLevel2::GetStoredTrack(itrk);
65 c = CaloLevel2::GetCaloTrkVar(t->GetSeqNo());
66 o = ToFLevel2::GetToFTrkVar(t->GetSeqNo());
67 };
68 // retrieve related ToF-track
69
70 // hence create a "PamTrack" object
71 PamTrack *track = 0;
72 if(t && c && o)track = new PamTrack(t,c,o);
73 return track;
74
75 }
76 //--------------------------------------
77 //
78 //
79 //--------------------------------------
80 /**
81 * Sort physical (tracker) tracks and stores them in a TObjectArray (of TrkTrack objects).
82 * The total number of physical tracks is given by GetNTracks() and the it-th physical track can be retrieved by means of the method GetTrack(int it).
83 * This method overrides TrkLevel2::GetTracks(), where sorting is done by decreasing number of fit points and increasing chi^2.
84 * PamLevel2::GetTracks() keeps the same track order given by TrkLevel2::GetTracks(), but checks image selection by using calorimeter and ToF tracking information.
85 */
86 TClonesArray *PamLevel2::GetTracks(){
87
88 // define new array for sorted tracker tracks
89 TClonesArray *aa = new TClonesArray("TrkTrack");
90 TClonesArray &sorted = *aa;
91
92 // loop over the tracks sorted by the tracker
93 for(Int_t i=0; i < TrkLevel2::GetNTracks(); i++){
94
95 TrkTrack *ts=0;
96
97 // get tracker tracks
98 TrkTrack *tp = TrkLevel2::GetTrack(i); //tracker
99 CaloTrkVar *cp = CaloLevel2::GetCaloTrkVar(tp->GetSeqNo()); //calorimeter
100 ToFTrkVar *op = ToFLevel2::GetToFTrkVar(tp->GetSeqNo()); //tof
101
102 // if track has an image, check image selection
103 if(tp->HasImage()){
104 TrkTrack *ti = TrkLevel2::GetTrackImage(i); //tracker (image)
105 CaloTrkVar *ci = CaloLevel2::GetCaloTrkVar(ti->GetSeqNo());//calorimeter (image)
106 ToFTrkVar *oi = ToFLevel2::GetToFTrkVar(ti->GetSeqNo()); //tof (image)
107
108 //assign starting scores
109 Int_t tp_score = 1;
110 Int_t ti_score = 0;
111 // ------------------------
112 // calorimeter check
113 // ------------------------
114 if(
115 npcfit[1] > 3 && //no. of fit planes on Y view
116 // varcfit[1] < 50.&& //fit variance on Y view
117 true){
118
119 Float_t resy_p = cp->tbar[0][1] - cbar[0][1];if(resy_p < 0)resy_p= - resy_p;
120 Float_t resy_i = ci->tbar[0][1] - cbar[0][1];if(resy_i < 0)resy_i= - resy_i;
121
122 if(resy_p <= resy_i) tp_score++;
123 else ti_score++;
124 };
125 // ------------------------
126 // TOF check
127 // ------------------------
128
129 // ------------------------
130 // the winner is....
131 // ------------------------
132 if(tp_score > ti_score) ts = tp;//the track sorted by the tracker!!
133 else ts = ti;//its image!!
134
135 }else{
136 ts = tp;
137 };
138
139 new(sorted[i]) TrkTrack(*ts); //save the track in the sorted array
140 };
141
142 return aa;
143 };
144 //--------------------------------------
145 //
146 //
147 //--------------------------------------
148 /**
149 * Retrieves the it-th Pamela "physical" track.
150 * It override TrkLevel2::GetTrack(int it).
151 * @param it Track number, ranging from 0 to GetNTracks().
152 */
153 PamTrack *PamLevel2::GetTrack(int it){
154
155 TClonesArray *aa = this->GetTracks();
156 TClonesArray &sorted = *aa;
157
158 TrkTrack *t = 0;
159 CaloTrkVar *c = 0;
160 ToFTrkVar *o = 0;
161
162 if( it >=0 && it < TrkLevel2::GetNTracks() ){
163 t = (TrkTrack*)sorted[it];
164 c = CaloLevel2::GetCaloTrkVar(t->GetSeqNo());
165 o = ToFLevel2::GetToFTrkVar(t->GetSeqNo());
166 };
167
168 // hence create a "PamTrack" object
169 PamTrack *track = 0;
170 if(t && c && o)track = new PamTrack(t,c,o);
171 return track;
172
173 };
174 //--------------------------------------
175 //
176 //
177 //--------------------------------------
178 /**
179 * Retrieves (if present) the image of the it-th Pamela "physical" track, sorted by the method PamLevel2::GetTracks().
180 * @param it Track number, ranging from 0 to GetNTracks().
181 */
182 PamTrack *PamLevel2::GetTrackImage(int it){
183
184 TClonesArray *aa = this->GetTracks();
185 TClonesArray &sorted = *aa;
186
187 TrkTrack *t = 0;
188 CaloTrkVar *c = 0;
189 ToFTrkVar *o = 0;
190
191 if( it >=0 && it < TrkLevel2::GetNTracks() ){
192 TrkTrack *temp = (TrkTrack*)sorted[it];
193 if( temp->HasImage() ){
194 t = TrkLevel2::GetStoredTrack(temp->GetImageSeqNo());
195 c = CaloLevel2::GetCaloTrkVar(temp->GetImageSeqNo());
196 o = ToFLevel2::GetToFTrkVar(temp->GetImageSeqNo());
197 };
198 };
199
200 // hence create a "PamTrack" object
201 PamTrack *image = 0;
202 if(t && c && o)image = new PamTrack(t,c,o);
203 return image;
204
205 }
206
207 //--------------------------------------
208 //
209 //
210 //--------------------------------------
211 /**
212 * Get the Pamela detector trees and make them friends.
213 */
214 TTree *PamLevel2::LoadPamTrees(TFile *f){
215
216 TTree *Tout =0;
217
218 // Tracker
219 TTree *T = (TTree*)f->Get("Tracker");
220 if(T) {
221 T->SetBranchAddress("TrkLevel2", GetPointerToTrk());
222 cout << "Tracker : set branch address TrkLevel2"<<endl;
223 if(!Tout)Tout=T;
224 }else{
225 cout << "Tracker : missing tree"<<endl;
226 };
227 // Calorimeter
228 TTree *C = (TTree*)f->Get("Calorimeter");
229 if(C) {
230 C->SetBranchAddress("CaloLevel2", GetPointerToCalo());
231 cout << "Calorimeter : set branch address CaloLevel2"<<endl;
232 if(!Tout)Tout=C;
233 else Tout->AddFriend(C);
234 }else{
235 cout << "Calorimeter : missing tree"<<endl;
236 };
237 // ToF
238 TTree *O = (TTree*)f->Get("ToF");
239 if(O) {
240 O->SetBranchAddress("ToFLevel2", GetPointerToToF());
241 cout << "ToF : set branch address ToFLevel2"<<endl;
242 if(!Tout)Tout=O;
243 else Tout->AddFriend(O);
244 }else{
245 cout << "ToF : missing tree"<<endl;
246 };
247 // Trigger
248 TTree *R = (TTree*)f->Get("Trigger");
249 if(R) {
250 R->SetBranchAddress("TrigLevel2", GetPointerToTrig());
251 cout << "Trigger : set branch address TrigLevel2"<<endl;
252 if(!Tout)Tout=O;
253 else Tout->AddFriend(R);
254 }else{
255 cout << "Trigger : missing tree"<<endl;
256 };
257 // S4
258 TTree *S = (TTree*)f->Get("S4");
259 if(S) {
260 S->SetBranchAddress("S4Level2", GetPointerToS4());
261 cout << "S4 : set branch address S4Level2"<<endl;
262 if(!Tout)Tout=O;
263 else Tout->AddFriend(S);
264 }else{
265 cout << "S4 : missing tree"<<endl;
266 };
267 // Neutron Detector
268 TTree *N = (TTree*)f->Get("NeutronD");
269 if(N) {
270 N->SetBranchAddress("NDLevel2", GetPointerToND());
271 cout << "NeutronD : set branch address NDLevel2"<<endl;
272 if(!Tout)Tout=O;
273 else Tout->AddFriend(N);
274 }else{
275 cout << "NeutronD : missing tree"<<endl;
276 };
277 // Anticounters
278 TTree *A = (TTree*)f->Get("Anticounter");
279 if(A) {
280 A->SetBranchAddress("AcLevel2", GetPointerToAc());
281 cout << "Anticounter : set branch address AcLevel2"<<endl;
282 if(!Tout)Tout=O;
283 else Tout->AddFriend(A);
284 }else{
285 cout << "Anticounter : missing tree"<<endl;
286 };
287
288 return Tout;
289
290 }

  ViewVC Help
Powered by ViewVC 1.1.23