ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/FastOpenGlDisplayer/src/Geometry.cpp
Revision: 1.10
Committed: Fri Apr 18 11:31:21 2008 UTC (17 years ago) by querten
Branch: MAIN
Changes since 1.9: +107 -22 lines
Log Message:
Add DT Geometry In

File Contents

# User Rev Content
1 querten 1.1 // Geometry.cpp: implementation of the Geometry class.
2     //
3     //////////////////////////////////////////////////////////////////////
4    
5     #include "../interface/Geometry.h"
6 roberfro 1.8 #include <algorithm>
7 querten 1.1
8     Geometry::Geometry(void)
9     {
10     }
11    
12     Geometry::~Geometry(void)
13     {
14     }
15    
16     void Geometry::Load (char* path)
17     {
18     FILE* pFile = fopen(path,"rb" );
19 querten 1.6 if(pFile==NULL){
20     printf("The file %s can not be open !\n",path);
21     return;
22     }
23 querten 1.1
24     stChunk* PrimaryChunk = new stChunk;
25    
26     PrimaryChunk->read =fread(&PrimaryChunk->type,1,2,pFile);
27     PrimaryChunk->read +=fread(&PrimaryChunk->size,1,4,pFile);
28    
29     if(PrimaryChunk->type!=C_PRIMARY){
30     printf("PrimaryChunk has not a good Id (%i!=%i)\n",PrimaryChunk->type,C_PRIMARY);
31     printf("Exiting...\n");
32     exit(0);
33     }
34    
35     Read(pFile,PrimaryChunk);
36 querten 1.9 fclose(pFile);
37 querten 1.1
38 querten 1.9 sortDet();
39 querten 1.1 }
40    
41     void Geometry::Read (FILE* pFile, stChunk* ParentChunk)
42     {
43 querten 1.3 // unsigned short temp;
44     // fread(&temp,1,2,pFile);
45     // fseek(pFile,-2,SEEK_CUR);
46     // printf("Parent = %i --> Current ChunkId = %i to read = %i\n",ParentChunk->type,temp,0);
47 querten 1.1
48     stChunk* CurrentChunk = new stChunk;
49     ReadChunk(pFile, CurrentChunk);
50    
51     switch(CurrentChunk->type)
52     {
53     case C_GEOMETRY: // Geometry
54     while(CurrentChunk->read<CurrentChunk->size){
55     Read(pFile,CurrentChunk);
56     }
57     break;
58    
59    
60     ////////////////////////TRACKER DATA//////////////////////////
61     case C_TRACKER: // TRACKER
62     while(CurrentChunk->read<CurrentChunk->size){
63     Read(pFile,CurrentChunk);
64     }
65     break;
66    
67     case C_TRACKER_PIB:{ // PIB
68     TrackerDet* Temp = new TrackerDet;
69     CurrentChunk->read += fread(Temp,sizeof(TrackerDet),1,pFile) * sizeof(TrackerDet);
70     Det_Tracker_PIB.push_back(Temp);
71     Det_Tracker_ALL.push_back(Temp);
72     }break;
73     case C_TRACKER_PIE:{ // PIE
74     TrackerDet* Temp = new TrackerDet;
75     CurrentChunk->read += fread(Temp,sizeof(TrackerDet),1,pFile) * sizeof(TrackerDet);
76     Det_Tracker_PIE.push_back(Temp);
77     Det_Tracker_ALL.push_back(Temp);
78     }break;
79     case C_TRACKER_TIB:{ // TIB
80     TrackerDet* Temp = new TrackerDet;
81     CurrentChunk->read += fread(Temp,sizeof(TrackerDet),1,pFile) * sizeof(TrackerDet);
82     Det_Tracker_TIB.push_back(Temp);
83     Det_Tracker_ALL.push_back(Temp);
84     }break;
85     case C_TRACKER_TID:{ // TID
86     TrackerDet* Temp = new TrackerDet;
87     CurrentChunk->read += fread(Temp,sizeof(TrackerDet),1,pFile) * sizeof(TrackerDet);
88     Det_Tracker_TID.push_back(Temp);
89     Det_Tracker_ALL.push_back(Temp);
90     }break;
91     case C_TRACKER_TOB:{ // TOB
92     TrackerDet* Temp = new TrackerDet;
93     CurrentChunk->read += fread(Temp,sizeof(TrackerDet),1,pFile) * sizeof(TrackerDet);
94     Det_Tracker_TOB.push_back(Temp);
95     Det_Tracker_ALL.push_back(Temp);
96     }break;
97     case C_TRACKER_TEC:{ // TEC
98     TrackerDet* Temp = new TrackerDet;
99     CurrentChunk->read += fread(Temp,sizeof(TrackerDet),1,pFile) * sizeof(TrackerDet);
100     Det_Tracker_TEC.push_back(Temp);
101     Det_Tracker_ALL.push_back(Temp);
102     }break;
103    
104 querten 1.5 ////////////////////////ECAL DATA//////////////////////////
105     case C_ECAL: // ECAL
106     while(CurrentChunk->read<CurrentChunk->size){
107     Read(pFile,CurrentChunk);
108     }
109     break;
110    
111     case C_ECAL_EB:{ // EB
112     CaloDet* Temp = new CaloDet;
113     CurrentChunk->read += fread(Temp,sizeof(CaloDet),1,pFile) * sizeof(CaloDet);
114     Det_ECAL_EB.push_back(Temp);
115     Det_ECAL_ALL.push_back(Temp);
116     }break;
117 querten 1.6 case C_ECAL_EE:{ // EE
118 querten 1.5 CaloDet* Temp = new CaloDet;
119     CurrentChunk->read += fread(Temp,sizeof(CaloDet),1,pFile) * sizeof(CaloDet);
120     Det_ECAL_EE.push_back(Temp);
121     Det_ECAL_ALL.push_back(Temp);
122     }break;
123 querten 1.6 case C_ECAL_PS:{ // PS
124     CaloDet* Temp = new CaloDet;
125     CurrentChunk->read += fread(Temp,sizeof(CaloDet),1,pFile) * sizeof(CaloDet);
126     Det_ECAL_PS.push_back(Temp);
127     Det_ECAL_ALL.push_back(Temp);
128     }break;
129    
130    
131     ////////////////////////HCAL DATA//////////////////////////
132     case C_HCAL: // HCAL
133     while(CurrentChunk->read<CurrentChunk->size){
134     Read(pFile,CurrentChunk);
135     }
136     break;
137    
138     case C_HCAL_HB:{ // HB
139     CaloDet* Temp = new CaloDet;
140     CurrentChunk->read += fread(Temp,sizeof(CaloDet),1,pFile) * sizeof(CaloDet);
141     Det_HCAL_HB.push_back(Temp);
142     Det_HCAL_ALL.push_back(Temp);
143     }break;
144     case C_HCAL_HE:{ // HE
145     CaloDet* Temp = new CaloDet;
146     CurrentChunk->read += fread(Temp,sizeof(CaloDet),1,pFile) * sizeof(CaloDet);
147     Det_HCAL_HE.push_back(Temp);
148     Det_HCAL_ALL.push_back(Temp);
149     }break;
150     case C_HCAL_HO:{ // HO
151     CaloDet* Temp = new CaloDet;
152     CurrentChunk->read += fread(Temp,sizeof(CaloDet),1,pFile) * sizeof(CaloDet);
153     Det_HCAL_HO.push_back(Temp);
154     Det_HCAL_ALL.push_back(Temp);
155     }break;
156     case C_HCAL_HF:{ // HF
157     CaloDet* Temp = new CaloDet;
158     CurrentChunk->read += fread(Temp,sizeof(CaloDet),1,pFile) * sizeof(CaloDet);
159     Det_HCAL_HF.push_back(Temp);
160     Det_HCAL_ALL.push_back(Temp);
161     }break;
162 querten 1.10 ////////////////////////MUON DATA//////////////////////////
163     case C_MUON: // MUON
164     while(CurrentChunk->read<CurrentChunk->size){
165     Read(pFile,CurrentChunk);
166     }
167     break;
168    
169     case C_MUON_DT:{ // DT
170     TrackerDet* Temp = new TrackerDet;
171     CurrentChunk->read += fread(Temp,sizeof(TrackerDet),1,pFile) * sizeof(TrackerDet);
172     Det_Muon_DT.push_back(Temp);
173     Det_Muon_ALL.push_back(Temp);
174     }break;
175     case C_MUON_CSC:{ // CSC
176     TrackerDet* Temp = new TrackerDet;
177     CurrentChunk->read += fread(Temp,sizeof(TrackerDet),1,pFile) * sizeof(TrackerDet);
178     Det_Muon_CSC.push_back(Temp);
179     Det_Muon_ALL.push_back(Temp);
180     }break;
181     case C_MUON_RPC:{ // RPC
182     TrackerDet* Temp = new TrackerDet;
183     CurrentChunk->read += fread(Temp,sizeof(TrackerDet),1,pFile) * sizeof(TrackerDet);
184     Det_Muon_RPC.push_back(Temp);
185     Det_Muon_ALL.push_back(Temp);
186     }break;
187 querten 1.5
188    
189 querten 1.1 ////////////////////////UNKOWN CHUNK ////////////////////////
190     default:
191     printf("Unknown ChunkID (%i)\n",CurrentChunk->type);
192     printf("Chunk will be skipped\n");
193     printf("The program can not run properly\n");
194     fseek (pFile,CurrentChunk->size-CurrentChunk->read,SEEK_CUR);
195     CurrentChunk->read += CurrentChunk->size-CurrentChunk->read;
196     break;
197     }
198    
199     ParentChunk->read += CurrentChunk->read;
200    
201     }
202    
203     void Geometry::Save (char* path)
204     {
205 querten 1.9 sortDet();
206 querten 1.1 stChunkToSave* Primary_chunk = new stChunkToSave;
207    
208     Primary_chunk->type = C_PRIMARY;
209     Primary_chunk->size = 6;
210    
211     Write(Primary_chunk);
212 querten 1.5 /*
213 querten 1.1 printf("%i (%i)\n",Primary_chunk->type,Primary_chunk->size);
214     for(unsigned int i=0;i<Primary_chunk->daughters.size();i++){
215     stChunkToSave* tmp = Primary_chunk->daughters[i];
216     printf(" %i (%i)\n",tmp->type,tmp->size);
217     for(unsigned int j=0;j<tmp->daughters.size();j++){
218     stChunkToSave* Tmp = tmp->daughters[j];
219     printf(" %i (%i)\n",Tmp->type,Tmp->size);
220     for(unsigned int k=0;k<Tmp->daughters.size();k++){
221     stChunkToSave* TMp = Tmp->daughters[k];
222     printf(" %i (%i)\n",TMp->type,TMp->size);
223     for(unsigned int l=0;l<TMp->daughters.size();l++){
224     stChunkToSave* TMP = TMp->daughters[l];
225     printf(" %i (%i)\n",TMP->type,TMP->size);
226     }
227     }
228     }
229     }
230 querten 1.5 */
231 querten 1.1
232     FILE* pFile = fopen(path,"wb" );
233     WriteChunk(pFile, Primary_chunk);
234     fclose(pFile);
235     }
236    
237     void Geometry::Write(stChunkToSave* ParentChunk)
238     {
239     unsigned int i;
240     stChunkToSave* CurrentChunk;
241    
242     switch(ParentChunk->type)
243     {
244     case C_PRIMARY: // PrimaryChunk
245     CurrentChunk = new stChunkToSave;
246     CurrentChunk->type = C_GEOMETRY;
247     CurrentChunk->size = 6;
248     ParentChunk->daughters.push_back(CurrentChunk);
249     break;
250    
251     case C_GEOMETRY: // Geometry
252     CurrentChunk = new stChunkToSave;
253     CurrentChunk->type = C_TRACKER;
254     CurrentChunk->size = 6;
255     ParentChunk->daughters.push_back(CurrentChunk);
256 querten 1.5
257     CurrentChunk = new stChunkToSave;
258     CurrentChunk->type = C_ECAL;
259     CurrentChunk->size = 6;
260     ParentChunk->daughters.push_back(CurrentChunk);
261 querten 1.6
262     CurrentChunk = new stChunkToSave;
263     CurrentChunk->type = C_HCAL;
264     CurrentChunk->size = 6;
265     ParentChunk->daughters.push_back(CurrentChunk);
266 querten 1.10
267     CurrentChunk = new stChunkToSave;
268     CurrentChunk->type = C_MUON;
269     CurrentChunk->size = 6;
270     ParentChunk->daughters.push_back(CurrentChunk);
271 querten 1.1 break;
272    
273     case C_TRACKER: // Tracker
274     for(i=0;i<Det_Tracker_PIB.size();i++){
275     CurrentChunk = new stChunkToSave;
276     CurrentChunk->type = C_TRACKER_PIB;
277     CurrentChunk->size = 6 + sizeof(TrackerDet);
278     CurrentChunk->data = Det_Tracker_PIB[i];
279     ParentChunk->daughters.push_back(CurrentChunk);
280     }
281     for(i=0;i<Det_Tracker_PIE.size();i++){
282     CurrentChunk = new stChunkToSave;
283     CurrentChunk->type = C_TRACKER_PIE;
284     CurrentChunk->size = 6 + sizeof(TrackerDet);
285     CurrentChunk->data = Det_Tracker_PIE[i];
286     ParentChunk->daughters.push_back(CurrentChunk);
287     }
288     for(i=0;i<Det_Tracker_TIB.size();i++){
289     CurrentChunk = new stChunkToSave;
290     CurrentChunk->type = C_TRACKER_TIB;
291     CurrentChunk->size = 6 + sizeof(TrackerDet);
292     CurrentChunk->data = Det_Tracker_TIB[i];
293     ParentChunk->daughters.push_back(CurrentChunk);
294     }
295     for(i=0;i<Det_Tracker_TID.size();i++){
296     CurrentChunk = new stChunkToSave;
297     CurrentChunk->type = C_TRACKER_TID;
298     CurrentChunk->size = 6 + sizeof(TrackerDet);
299     CurrentChunk->data = Det_Tracker_TID[i];
300     ParentChunk->daughters.push_back(CurrentChunk);
301     }
302     for(i=0;i<Det_Tracker_TOB.size();i++){
303     CurrentChunk = new stChunkToSave;
304     CurrentChunk->type = C_TRACKER_TOB;
305     CurrentChunk->size = 6 + sizeof(TrackerDet);
306     CurrentChunk->data = Det_Tracker_TOB[i];
307     ParentChunk->daughters.push_back(CurrentChunk);
308     }
309     for(i=0;i<Det_Tracker_TEC.size();i++){
310     CurrentChunk = new stChunkToSave;
311     CurrentChunk->type = C_TRACKER_TEC;
312     CurrentChunk->size = 6 + sizeof(TrackerDet);
313     CurrentChunk->data = Det_Tracker_TEC[i];
314     ParentChunk->daughters.push_back(CurrentChunk);
315     }
316     break;
317    
318 querten 1.5 case C_ECAL: // ECAL
319     for(i=0;i<Det_ECAL_EB.size();i++){
320     CurrentChunk = new stChunkToSave;
321     CurrentChunk->type = C_ECAL_EB;
322     CurrentChunk->size = 6 + sizeof(CaloDet);
323     CurrentChunk->data = Det_ECAL_EB[i];
324     ParentChunk->daughters.push_back(CurrentChunk);
325     }
326 querten 1.6 for(i=0;i<Det_ECAL_EE.size();i++){
327     CurrentChunk = new stChunkToSave;
328     CurrentChunk->type = C_ECAL_EE;
329     CurrentChunk->size = 6 + sizeof(CaloDet);
330     CurrentChunk->data = Det_ECAL_EE[i];
331     ParentChunk->daughters.push_back(CurrentChunk);
332     }
333     for(i=0;i<Det_ECAL_PS.size();i++){
334     CurrentChunk = new stChunkToSave;
335     CurrentChunk->type = C_ECAL_PS;
336     CurrentChunk->size = 6 + sizeof(CaloDet);
337     CurrentChunk->data = Det_ECAL_PS[i];
338     ParentChunk->daughters.push_back(CurrentChunk);
339     }
340 querten 1.5 break;
341    
342 querten 1.6
343     case C_HCAL: // HCAL
344     for(i=0;i<Det_HCAL_HB.size();i++){
345     CurrentChunk = new stChunkToSave;
346     CurrentChunk->type = C_HCAL_HB;
347     CurrentChunk->size = 6 + sizeof(CaloDet);
348     CurrentChunk->data = Det_HCAL_HB[i];
349     ParentChunk->daughters.push_back(CurrentChunk);
350     }
351     for(i=0;i<Det_HCAL_HE.size();i++){
352     CurrentChunk = new stChunkToSave;
353     CurrentChunk->type = C_HCAL_HE;
354     CurrentChunk->size = 6 + sizeof(CaloDet);
355     CurrentChunk->data = Det_HCAL_HE[i];
356     ParentChunk->daughters.push_back(CurrentChunk);
357     }
358     for(i=0;i<Det_HCAL_HO.size();i++){
359     CurrentChunk = new stChunkToSave;
360     CurrentChunk->type = C_HCAL_HO;
361     CurrentChunk->size = 6 + sizeof(CaloDet);
362     CurrentChunk->data = Det_HCAL_HO[i];
363     ParentChunk->daughters.push_back(CurrentChunk);
364     }
365     for(i=0;i<Det_HCAL_HF.size();i++){
366     CurrentChunk = new stChunkToSave;
367     CurrentChunk->type = C_HCAL_HF;
368     CurrentChunk->size = 6 + sizeof(CaloDet);
369     CurrentChunk->data = Det_HCAL_HF[i];
370     ParentChunk->daughters.push_back(CurrentChunk);
371     }
372     break;
373 querten 1.10
374     case C_MUON: // MUON
375     for(i=0;i<Det_Muon_DT.size();i++){
376     CurrentChunk = new stChunkToSave;
377     CurrentChunk->type = C_MUON_DT;
378     CurrentChunk->size = 6 + sizeof(TrackerDet);
379     CurrentChunk->data = Det_Muon_DT[i];
380     ParentChunk->daughters.push_back(CurrentChunk);
381     }
382     for(i=0;i<Det_Muon_CSC.size();i++){
383     CurrentChunk = new stChunkToSave;
384     CurrentChunk->type = C_MUON_CSC;
385     CurrentChunk->size = 6 + sizeof(TrackerDet);
386     CurrentChunk->data = Det_Muon_CSC[i];
387     ParentChunk->daughters.push_back(CurrentChunk);
388     }
389     for(i=0;i<Det_Muon_RPC.size();i++){
390     CurrentChunk = new stChunkToSave;
391     CurrentChunk->type = C_MUON_RPC;
392     CurrentChunk->size = 6 + sizeof(TrackerDet);
393     CurrentChunk->data = Det_Muon_RPC[i];
394     ParentChunk->daughters.push_back(CurrentChunk);
395     }
396     break;
397 querten 1.1
398     default:
399     break;
400     }
401    
402    
403     for(i=0; i<ParentChunk->daughters.size();i++)
404     {
405     // if( !(ParentChunk->type == C_PRIMARY && i!=ParentChunk->daughters.size()-1))
406     Write(ParentChunk->daughters[i]);
407     ParentChunk->size += ParentChunk->daughters[i]->size;
408     }
409     }
410    
411 roberfro 1.8 void Geometry::sortDet() {
412     // Tracker
413 querten 1.9 std::sort( Det_Tracker_ALL.begin(), Det_Tracker_ALL.end(), isLowerId() );
414 roberfro 1.8 std::sort( Det_Tracker_PIB.begin(), Det_Tracker_PIB.end(), isLowerId() );
415     std::sort( Det_Tracker_PIE.begin(), Det_Tracker_PIE.end(), isLowerId() );
416     std::sort( Det_Tracker_TIB.begin(), Det_Tracker_TIB.end(), isLowerId() );
417     std::sort( Det_Tracker_TID.begin(), Det_Tracker_TID.end(), isLowerId() );
418     std::sort( Det_Tracker_TOB.begin(), Det_Tracker_TOB.end(), isLowerId() );
419     std::sort( Det_Tracker_TEC.begin(), Det_Tracker_TEC.end(), isLowerId() );
420     // ECAL
421 querten 1.9 std::sort( Det_ECAL_ALL.begin(), Det_ECAL_ALL.end(), isLowerId() );
422     std::sort( Det_ECAL_EB.begin() , Det_ECAL_EB.end() , isLowerId() );
423     std::sort( Det_ECAL_EE.begin() , Det_ECAL_EE.end() , isLowerId() );
424     std::sort( Det_ECAL_PS.begin() , Det_ECAL_PS.end() , isLowerId() );
425 roberfro 1.8 // HCAL
426 querten 1.9 std::sort( Det_HCAL_ALL.begin(), Det_HCAL_ALL.end(), isLowerId() );
427     std::sort( Det_HCAL_HB.begin() , Det_HCAL_HB.end() , isLowerId() );
428     std::sort( Det_HCAL_HE.begin() , Det_HCAL_HE.end() , isLowerId() );
429     std::sort( Det_HCAL_HO.begin() , Det_HCAL_HO.end() , isLowerId() );
430     std::sort( Det_HCAL_HF.begin() , Det_HCAL_HF.end() , isLowerId() );
431 querten 1.10 // MUON
432     std::sort( Det_Muon_ALL.begin(), Det_Muon_ALL.end(), isLowerId() );
433     std::sort( Det_Muon_DT.begin() , Det_Muon_DT.end() , isLowerId() );
434     std::sort( Det_Muon_CSC.begin(), Det_Muon_CSC.end(), isLowerId() );
435     std::sort( Det_Muon_RPC.begin(), Det_Muon_RPC.end(), isLowerId() );
436 roberfro 1.8 }
437    
438 querten 1.1
439    
440 querten 1.4 void Geometry::Add_TrackerDet(unsigned int DetId, float TrapezoidalParam,
441 querten 1.2 float PosX, float PosY, float PosZ,
442     float WidthX, float WidthY, float WidthZ,
443     float LengthX, float LengthY, float LengthZ,
444     float ThickX, float ThickY, float ThickZ){
445    
446 querten 1.10 int Det = (DetId>>28)&0xF;
447 querten 1.2 int SubDet = (DetId>>25)&0x7;
448    
449 querten 1.1 if(SubDet<0 || SubDet>6)
450     {
451     printf("Unknown Subdet %i\n",SubDet);
452     return;
453     }
454    
455     TrackerDet* temp = new TrackerDet();
456     temp->DetId = DetId;
457 querten 1.2 temp->PosX = PosX;
458     temp->PosY = PosY;
459     temp->PosZ = PosZ;
460     temp->WidthX = WidthX;
461     temp->WidthY = WidthY;
462     temp->WidthZ = WidthZ;
463     temp->LengthX = LengthX;
464     temp->LengthY = LengthY;
465     temp->LengthZ = LengthZ;
466     temp->ThickX = ThickX;
467     temp->ThickY = ThickY;
468     temp->ThickZ = ThickZ;
469 querten 1.4 temp->TrapezoidalParam = TrapezoidalParam;
470 querten 1.10
471     if(Det==1){ //Tracker
472     Det_Tracker_ALL.push_back(temp);
473     switch(SubDet)
474     {
475     case 1 : Det_Tracker_PIB.push_back(temp); break;
476     case 2 : Det_Tracker_PIE.push_back(temp); break;
477     case 3 : Det_Tracker_TIB.push_back(temp); break;
478     case 4 : Det_Tracker_TID.push_back(temp); break;
479     case 5 : Det_Tracker_TOB.push_back(temp); break;
480     case 6 : Det_Tracker_TEC.push_back(temp); break;
481     default: delete temp;
482     }
483     }else if(Det==2){ //MUON
484     Det_Muon_ALL.push_back(temp);
485     switch(SubDet)
486     {
487     case 1 : Det_Muon_DT.push_back(temp); break;
488     case 2 : Det_Muon_CSC.push_back(temp); break;
489     case 3 : Det_Muon_RPC.push_back(temp); break;
490     default: delete temp;
491     }
492     }else{
493     delete temp;
494     printf("Unknown Det %i\n",Det);
495     return;
496 querten 1.1 }
497     }
498    
499 querten 1.5 void Geometry::Add_CaloDet(unsigned int DetId,
500     float PosX, float PosY, float PosZ,
501     float C1X, float C1Y, float C1Z,
502     float C2X, float C2Y, float C2Z,
503     float C3X, float C3Y, float C3Z,
504     float C4X, float C4Y, float C4Z,
505     float C5X, float C5Y, float C5Z,
506     float C6X, float C6Y, float C6Z,
507     float C7X, float C7Y, float C7Z,
508     float C8X, float C8Y, float C8Z){
509    
510     CaloDet* temp = new CaloDet();
511     temp->DetId = DetId;
512     temp->PosX = PosX;
513     temp->PosY = PosY;
514     temp->PosZ = PosZ;
515     temp->C1X = C1X; temp->C1Y = C1Y; temp->C1Z = C1Z;
516     temp->C2X = C2X; temp->C2Y = C2Y; temp->C2Z = C2Z;
517     temp->C3X = C3X; temp->C3Y = C3Y; temp->C3Z = C3Z;
518     temp->C4X = C4X; temp->C4Y = C4Y; temp->C4Z = C4Z;
519     temp->C5X = C5X; temp->C5Y = C5Y; temp->C5Z = C5Z;
520     temp->C6X = C6X; temp->C6Y = C6Y; temp->C6Z = C6Z;
521     temp->C7X = C7X; temp->C7Y = C7Y; temp->C7Z = C7Z;
522     temp->C8X = C8X; temp->C8Y = C8Y; temp->C8Z = C8Z;
523 querten 1.6
524    
525     int Det = (DetId>>28)&0xF;
526     int SubDet = (DetId>>25)&0x7;
527    
528     if(Det==3){ //ECAL
529     Det_ECAL_ALL.push_back(temp);
530    
531     if(SubDet==1){ // Ecal Barrel
532     Det_ECAL_EB.push_back(temp);
533     }else if(SubDet==2){ // Ecal Endcap
534     Det_ECAL_EE.push_back(temp);
535     }else if(SubDet==3){ // Ecal Preshower
536     Det_ECAL_PS.push_back(temp);
537     }else{
538     //SubDet==4 --> EcalTriggerTower
539     //SubDet==5 --> EcalLaserPnDiode
540    
541     delete temp;
542     printf("Unknown Subdet %i\n",SubDet);
543     return;
544     }
545     }else if(Det==4){ //HCAL
546     Det_HCAL_ALL.push_back(temp);
547    
548     if(SubDet==1){ // Hcal Barrel
549     Det_HCAL_HB.push_back(temp);
550     }else if(SubDet==2){ // Hcal Endcap
551     Det_HCAL_HE.push_back(temp);
552     }else if(SubDet==3){ // Hcal Outer
553     Det_HCAL_HO.push_back(temp);
554     }else if(SubDet==4){ // Hcal Forward
555     Det_HCAL_HF.push_back(temp);
556     }else{
557     //SubDet==0 --> HcalEmpty
558     //SubDet==5 --> HcalTriggerTower
559     //SubDet==7 --> HcalOther (HcalOtherEmpty or HcalCalibration)
560    
561     delete temp;
562     printf("Unknown Subdet %i\n",SubDet);
563     return;
564     }
565    
566     }else if(Det==5){ //CALO?
567     delete temp;
568    
569     }else{
570     delete temp;
571     printf("Unknown Det %i\n",Det);
572     return;
573     }
574 querten 1.5 }
575    
576 querten 1.1 TrackerDet* Geometry::Find_TrackerDet (unsigned int DetId){
577 querten 1.10 int Det = (DetId>>28)&0xF;
578 querten 1.1 int SubDet = (DetId>>25)&0x7;
579    
580     std::vector<TrackerDet*>* DetColl = NULL;
581    
582 querten 1.10 if(Det==1){ //Tracker
583     switch(SubDet){
584     case 1 : DetColl = &Det_Tracker_PIB; break;
585     case 2 : DetColl = &Det_Tracker_PIE; break;
586     case 3 : DetColl = &Det_Tracker_TIB; break;
587     case 4 : DetColl = &Det_Tracker_TID; break;
588     case 5 : DetColl = &Det_Tracker_TOB; break;
589     case 6 : DetColl = &Det_Tracker_TEC; break;
590     default: printf("Unknown Subdet %i\n",SubDet);return NULL;
591     }
592     }else if(Det==2){ //Muon
593     switch(SubDet){
594     case 1 : DetColl = &Det_Muon_DT; break;
595     case 2 : DetColl = &Det_Muon_CSC; break;
596     case 3 : DetColl = &Det_Muon_RPC; break;
597     default: printf("Unknown Subdet %i\n",SubDet);return NULL;
598     }
599     }else{
600     printf("Unknown Det %i\n",Det);
601     return NULL;
602 querten 1.1 }
603    
604     if(DetColl==NULL){
605 querten 1.6 printf("No Collection has been found\n");
606 querten 1.1 return NULL;
607     }
608    
609 querten 1.9 TrackerDet* det = new TrackerDet();
610     det->DetId = DetId;
611     std::vector<TrackerDet*>::iterator where = std::lower_bound(DetColl->begin(), DetColl->end(), det, isLowerId());
612     delete det;
613     if( where != DetColl->end()) return *(where);
614 roberfro 1.8
615 querten 1.1 return NULL;
616 querten 1.2 }
617    
618 querten 1.7 CaloDet* Geometry::Find_CaloDet (unsigned int DetId){
619 querten 1.2
620 querten 1.7 int Det = (DetId>>28)&0xF;
621     int SubDet = (DetId>>25)&0x7;
622    
623     std::vector<CaloDet*>::iterator it;
624     std::vector<CaloDet*>::iterator it_begin;
625     std::vector<CaloDet*>::iterator it_end;
626    
627     if(Det==3){ //ECAL
628     if(SubDet==1){ // Ecal Barrel
629     it_begin = Det_ECAL_EB.begin();
630     it_end = Det_ECAL_EB.end();
631     }else if(SubDet==2){ // Ecal Endcap
632     it_begin = Det_ECAL_EE.begin();
633     it_end = Det_ECAL_EE.end();
634     }else if(SubDet==3){ // Ecal Preshower
635     it_begin = Det_ECAL_PS.begin();
636     it_end = Det_ECAL_PS.end();
637     }else{
638     return NULL;
639     }
640     }else if(Det==4){ //HCAL
641     if(SubDet==1){ // Hcal Barrel
642     it_begin = Det_HCAL_HB.begin();
643     it_end = Det_HCAL_HB.end();
644     }else if(SubDet==2){ // Hcal Endcap
645     it_begin = Det_HCAL_HE.begin();
646     it_end = Det_HCAL_HE.end();
647     }else if(SubDet==3){ // Hcal Outer
648     it_begin = Det_HCAL_HO.begin();
649     it_end = Det_HCAL_HO.end();
650     }else if(SubDet==4){ // Hcal Forward
651     it_begin = Det_HCAL_HF.begin();
652     it_end = Det_HCAL_HF.end();
653     }else{
654     return NULL;
655     }
656     }
657    
658 querten 1.9 CaloDet* det = new CaloDet();
659     det->DetId = DetId;
660     std::vector<CaloDet*>::iterator where = std::lower_bound(it_begin, it_end, det, isLowerId());
661     delete det;
662     if( where != it_end) return *(where);
663 querten 1.7
664     return NULL;
665     }