/[PAMELA software]/DarthVader/CalorimeterLevel2/src/CaloLevel2.cpp
ViewVC logotype

Annotation of /DarthVader/CalorimeterLevel2/src/CaloLevel2.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.13 - (hide annotations) (download)
Fri Jul 20 09:13:07 2007 UTC (17 years, 4 months ago) by mocchiut
Branch: MAIN
Changes since 1.12: +27 -0 lines
New method CaloLevel2::GetCaloStoredTrack(int) added

1 mocchiut 1.1 /**
2     * \file src/CaloLevel2.cpp
3     * \author Emiliano Mocchiutti
4     *
5     **/
6     #include <TObject.h>
7     #include <CaloLevel2.h>
8 mocchiut 1.9
9     //
10 mocchiut 1.1 ClassImp(CaloTrkVar);
11     ClassImp(CaloLevel2);
12    
13     /**
14     * CaloTrkVar constructor
15     **/
16     CaloTrkVar::CaloTrkVar() {
17 mocchiut 1.7 this->Clear();
18     };
19    
20     /**
21     * Clear variables
22     **/
23     void CaloTrkVar::Clear() {
24 mocchiut 1.1 trkseqno = 0;
25     noint = 0;
26     ncore = 0;
27     qcore = 0.;
28     ncyl = 0;
29     qcyl = 0.;
30     qtrack = 0.;
31     qtrackx = 0.;
32     qtracky = 0.;
33     dxtrack = 0.;
34     dytrack = 0.;
35     qlast = 0.;
36     nlast = 0;
37     qpre = 0.;
38     npre = 0;
39     qpresh = 0.;
40     npresh = 0;
41     qtr = 0.;
42     ntr = 0;
43     planetot = 0;
44     qmean = 0.;
45     qlow = 0.;
46     nlow = 0;
47     dX0l = 0.;
48 mocchiut 1.5 memset(tbar, 0, 2*22*sizeof(Float_t));
49     memset(tibar, 0, 2*22*sizeof(Int_t));
50 mocchiut 1.1 }
51    
52     /**
53     * Copies from t to this
54     **/
55     CaloTrkVar::CaloTrkVar(const CaloTrkVar &t){
56     trkseqno = t.trkseqno;
57     noint = t.noint;
58     ncore = t.ncore;
59     qcore = t.qcore;
60     ncyl = t.ncyl;
61     qcyl = t.qcyl;
62     qtrack = t.qtrack;
63     qtrackx = t.qtrackx;
64     qtracky = t.qtracky;
65     dxtrack = t.dxtrack;
66     dytrack = t.dytrack;
67     qlast = t.qlast;
68     nlast = t.nlast;
69     qpre = t.qpre;
70     npre = t.npre;
71     qpresh = t.qpresh;
72     npresh = t.npresh;
73     qtr = t.qtr;
74     ntr = t.ntr;
75     planetot = t.planetot;
76     qmean = t.qmean;
77     dX0l = t.dX0l;
78     qlow = t.qlow;
79     nlow = t.nlow;
80     memcpy(tibar,t.tibar,sizeof(tibar));
81     memcpy(tbar,t.tbar,sizeof(tbar));
82     }
83    
84     /**
85     * CaloLevel2 constructor
86     **/
87     CaloLevel2::CaloLevel2() {
88     //
89 pam-fi 1.10 // CaloTrk = new TClonesArray("CaloTrkVar",1); //ELENA
90     CaloTrk = 0; //ELENA
91 mocchiut 1.7 //
92     this->Clear();
93 mocchiut 1.1 //
94     };
95 pam-fi 1.11 /**
96     * Create the TClonesArray
97     **/
98     void CaloLevel2::Set(){//ELENA
99     if(!CaloTrk)CaloTrk = new TClonesArray("CaloTrkVar",1); //ELENA
100     }//ELENA
101 mocchiut 1.1
102 mocchiut 1.8 /**
103     * Clear the CaloLevel2 object
104     **/
105 mocchiut 1.2 void CaloLevel2::Clear() {
106     //
107 pam-fi 1.10 // CaloTrk->Clear(); //ELENA
108     if(CaloTrk)CaloTrk->Delete(); //ELENA
109 mocchiut 1.2 //
110     nstrip = 0;
111     qtot = 0.;
112 mocchiut 1.12 // impx = 0.;
113     // impy = 0.;
114 mocchiut 1.2 qmax = 0.;
115     nx22 = 0;
116     qx22 = 0.;
117     elen = 0.;
118     selen = 0.;
119 mocchiut 1.5 memset(perr, 0, 4*sizeof(Int_t));
120     memset(swerr, 0, 4*sizeof(Int_t));
121     memset(crc, 0, 4*sizeof(Int_t));
122     memset(qq, 0, 4*sizeof(Int_t));
123 mocchiut 1.12 memset(varcfit, 0, 4*sizeof(Float_t));
124     memset(npcfit, 0, 4*sizeof(Int_t));
125     memset(tanx, 0, 2*sizeof(Int_t));
126     memset(tany, 0, 2*sizeof(Int_t));
127     memset(fitmode, 0, 2*sizeof(Int_t));
128 mocchiut 1.5 memset(planemax, 0, 2*sizeof(Int_t));
129     memset(cibar, 0, 2*22*sizeof(Int_t));
130     memset(cbar, 0, 2*22*sizeof(Float_t));
131 mocchiut 1.2 good = 0;
132     selftrigger = 0;
133 mocchiut 1.9 //
134 mocchiut 1.2 };
135    
136 pam-fi 1.10 /**
137     * Delete the CaloLevel2 object
138     **/
139     void CaloLevel2::Delete() { //ELENA
140     if(CaloTrk){ //ELENA
141     CaloTrk->Delete(); //ELENA
142     delete CaloTrk; //ELENA
143     } //ELENA
144     } //ELENA
145 pam-fi 1.4
146     /**
147     * Fills a struct cCaloLevel2 with values from a CaloLevel2 object (to put data into a F77 common).
148     */
149     void CaloLevel2::GetLevel2Struct(cCaloLevel2 *l2) const {
150    
151     l2->good = good;
152     l2->selftrigger = selftrigger;
153     l2->nstrip = nstrip;
154     l2->nx22 = nx22;
155     l2->qtot = qtot;
156     l2->qx22 = qx22;
157     l2->qmax = qmax;
158 mocchiut 1.12 // l2->impx = impx;
159     // l2->impy = impy;
160     // l2->tanx = tanx;
161     // l2->tany = tany;
162 pam-fi 1.4 l2->elen = elen;
163     l2->selen = selen;
164    
165     for(Int_t i=0;i<2;i++){
166     l2->planemax[i] = planemax[i];
167     l2->varcfit[i] = varcfit[i];
168     l2->npcfit[i] = npcfit[i];
169     }
170     for(Int_t i=0;i<4;i++){
171     l2->perr[i] = perr[i];
172     l2->swerr[i] = swerr[i];
173     l2->calcrc[i] = crc[i];
174     l2->qq[i] = qq[i];
175     }
176    
177 pam-fi 1.10 if(CaloTrk){ //ELENA
178     l2->calntrk = CaloTrk->GetEntries();
179     for(Int_t i=0;i<l2->calntrk;i++){
180     l2->caltrkseqno[i] = ((CaloTrkVar *)CaloTrk->At(i))->trkseqno;
181     l2->ncore[i] = ((CaloTrkVar *)CaloTrk->At(i))->ncore;
182     l2->noint[i] = ((CaloTrkVar *)CaloTrk->At(i))->noint;
183     l2->ncyl[i] = ((CaloTrkVar *)CaloTrk->At(i))->ncyl;
184     l2->nlast[i] = ((CaloTrkVar *)CaloTrk->At(i))->nlast;
185     l2->npre[i] = ((CaloTrkVar *)CaloTrk->At(i))->npre;
186     l2->npresh[i] = ((CaloTrkVar *)CaloTrk->At(i))->npresh;
187     l2->ntr[i] = ((CaloTrkVar *)CaloTrk->At(i))->ntr;
188     l2->planetot[i] = ((CaloTrkVar *)CaloTrk->At(i))->planetot;
189     l2->nlow[i] = ((CaloTrkVar *)CaloTrk->At(i))->nlow;
190     l2->qcore[i] =((CaloTrkVar *)CaloTrk->At(i))->qcore ;
191     l2->qcyl[i] = ((CaloTrkVar *)CaloTrk->At(i))->qcyl;
192     l2->qlast[i] = ((CaloTrkVar *)CaloTrk->At(i))->qlast;
193     l2->qpre[i] = ((CaloTrkVar *)CaloTrk->At(i))->qpre;
194     l2->qpresh[i] = ((CaloTrkVar *)CaloTrk->At(i))->qpresh;
195     l2->qtr[i] = ((CaloTrkVar *)CaloTrk->At(i))->qtr;
196     l2->qtrack[i] = ((CaloTrkVar *)CaloTrk->At(i))->qtrack;
197     l2->qtrackx[i] = ((CaloTrkVar *)CaloTrk->At(i))->qtrackx;
198     l2->qtracky[i] = ((CaloTrkVar *)CaloTrk->At(i))->qtracky;
199     l2->dxtrack[i] = ((CaloTrkVar *)CaloTrk->At(i))->dxtrack;
200     l2->dytrack[i] = ((CaloTrkVar *)CaloTrk->At(i))->dytrack;
201     l2->qmean[i] = ((CaloTrkVar *)CaloTrk->At(i))->qmean;
202     l2->qlow[i] = ((CaloTrkVar *)CaloTrk->At(i))->qlow;
203     l2->dX0l[i] = ((CaloTrkVar *)CaloTrk->At(i))->dX0l;
204     for (Int_t j=0; j<2; j++){
205     for (Int_t k=0; k<22; k++){
206     l2->tbar[i][k][j] = ((CaloTrkVar *)CaloTrk->At(i))->tbar[k][j];
207     };
208     };
209     }
210     } //ELENA
211 pam-fi 1.4 }
212    
213 mocchiut 1.1 /**
214 mocchiut 1.12 * Returns the impact position on the top of the calorimeter as determined by the calorimeter itself.
215     * @param tr : if tr = 0 use the calorimeter "normal" fit, if 1 use the calorimeter "selftrigger" fit (if any!)
216     **/
217     Float_t CaloLevel2::impx(Int_t tr){
218     if ( tr == 0 ) return(cbar[0][0]);
219     if ( tr == 1 ) {
220     if ( !CaloTrk ) return(-110.);
221     TClonesArray &t = *(CaloTrk);
222     for (Int_t itrk=0; itrk<ntrk(); itrk++){
223     CaloTrkVar *calotrack = (CaloTrkVar*)t[itrk];
224     if ( calotrack->trkseqno == -1 ) return(calotrack->tbar[0][0]);
225     };
226     };
227     if ( tr !=0 && tr !=1 ){
228     printf(" Cannot get impx for other than calo or selftrigger tracks!\n");
229     } else {
230     printf(" Cannot find selftrigger block\n");
231     };
232     return(-100.);
233     };
234    
235     /**
236     * Returns the impact position on the top of the calorimeter as determined by the calorimeter itself.
237     * @param tr : if tr = 0 use the calorimeter "normal" fit, if 1 use the calorimeter "selftrigger" fit (if any!)
238     **/
239     Float_t CaloLevel2::impy(Int_t tr){
240     if ( tr == 0 ) return(cbar[0][1]);
241     if ( tr == 1 ) {
242     if ( !CaloTrk ) return(-110.);
243     TClonesArray &t = *(CaloTrk);
244     for (Int_t itrk=0; itrk<ntrk(); itrk++){
245     CaloTrkVar *calotrack = (CaloTrkVar*)t[itrk];
246     if ( calotrack->trkseqno == -1 ) return(calotrack->tbar[0][1]);
247     };
248     };
249     if ( tr !=0 && tr !=1 ){
250     printf(" Cannot get impy for other than calo or selftrigger tracks!\n");
251     } else {
252     printf(" Cannot find selftrigger block\n");
253     };
254     return(-100.);
255     };
256     /**
257 mocchiut 1.8 * Should return the energy in GeV if the particle would be an electron
258     * using a parametrization taken from Monte Carlo simulation
259     **/
260 mocchiut 1.1 void CaloLevel2::GetElectronEnergy(Float_t &energy, Float_t &sigma){
261     if ( nstrip == 0 ) return;
262     energy = qtot * 40.82 * 0.000106;
263     sigma = 0.;
264     if ( energy > 0. ) sigma = energy * (0.01183 + 0.121/sqrt(energy));
265     return;
266     };
267    
268     /**
269     * Returns pointer to the set of track-related variables "itrk"
270     **/
271     CaloTrkVar *CaloLevel2::GetCaloTrkVar(Int_t itrk){
272     //
273     if(itrk >= ntrk()){
274     printf(" CaloLevel2 ERROR: track related variables set %i does not exists! \n",itrk);
275     printf(" stored track related variables = %i \n",ntrk());
276     return(NULL);
277     }
278 pam-fi 1.10 if(!CaloTrk)return 0; //ELENA
279 mocchiut 1.1 TClonesArray &t = *(CaloTrk);
280     CaloTrkVar *calotrack = (CaloTrkVar*)t[itrk];
281     return calotrack;
282     }
283 mocchiut 1.13
284     /**
285     * Retrieves the calorimeter track matching the seqno-th tracker stored track.
286     * (If seqno = -1 retrieves the self-trigger calorimeter track)
287     */
288     CaloTrkVar *CaloLevel2::GetCaloStoredTrack(int seqno){
289    
290     if( ntrk()==0 ){
291     printf("CaloLevel2::GetCaloStoredTrack(int) : requested tracker SeqNo %i but no Calorimeter tracks are stored\n",seqno);
292     return NULL;
293     };
294    
295     CaloTrkVar *c = 0;
296     Int_t it_calo=0;
297    
298     do {
299     c = GetCaloTrkVar(it_calo);
300     it_calo++;
301     } while( c && seqno != c->trkseqno && it_calo < ntrk());
302    
303     if(!c || seqno != c->trkseqno){
304     c = 0;
305     if(seqno!=-1 && seqno !=-2 && seqno!=-3 ) printf("CaloLevel2::GetCaloStoredTrack(int) : requested tracker SeqNo %i does not match Calorimeter stored tracks\n",seqno);
306     };
307     return c;
308    
309     };

  ViewVC Help
Powered by ViewVC 1.1.23