ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/FastOpenGlDisplayer/src/Geometry.cpp
Revision: 1.11
Committed: Fri Apr 18 13:08:34 2008 UTC (17 years ago) by querten
Branch: MAIN
Changes since 1.10: +62 -1 lines
Log Message:
Add CSC and RPC Geometry

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 querten 1.11 std::sort( Det_Muon_ALL.begin(), Det_Muon_ALL.end(), isLowerId() );
433 querten 1.10 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.11 /*
577 querten 1.1 TrackerDet* Geometry::Find_TrackerDet (unsigned int DetId){
578 querten 1.10 int Det = (DetId>>28)&0xF;
579 querten 1.1 int SubDet = (DetId>>25)&0x7;
580    
581     std::vector<TrackerDet*>* DetColl = NULL;
582    
583 querten 1.11 printf("Det = %i SubDet = %i\n",Det,SubDet);
584    
585 querten 1.10 if(Det==1){ //Tracker
586     switch(SubDet){
587     case 1 : DetColl = &Det_Tracker_PIB; break;
588     case 2 : DetColl = &Det_Tracker_PIE; break;
589     case 3 : DetColl = &Det_Tracker_TIB; break;
590     case 4 : DetColl = &Det_Tracker_TID; break;
591     case 5 : DetColl = &Det_Tracker_TOB; break;
592     case 6 : DetColl = &Det_Tracker_TEC; break;
593     default: printf("Unknown Subdet %i\n",SubDet);return NULL;
594     }
595     }else if(Det==2){ //Muon
596     switch(SubDet){
597     case 1 : DetColl = &Det_Muon_DT; break;
598     case 2 : DetColl = &Det_Muon_CSC; break;
599     case 3 : DetColl = &Det_Muon_RPC; break;
600     default: printf("Unknown Subdet %i\n",SubDet);return NULL;
601     }
602     }else{
603     printf("Unknown Det %i\n",Det);
604     return NULL;
605 querten 1.1 }
606    
607     if(DetColl==NULL){
608 querten 1.6 printf("No Collection has been found\n");
609 querten 1.1 return NULL;
610     }
611    
612 querten 1.11 printf("test1\n");
613    
614 querten 1.9 TrackerDet* det = new TrackerDet();
615     det->DetId = DetId;
616     std::vector<TrackerDet*>::iterator where = std::lower_bound(DetColl->begin(), DetColl->end(), det, isLowerId());
617     delete det;
618     if( where != DetColl->end()) return *(where);
619 roberfro 1.8
620 querten 1.11 printf("test2\n");
621     return NULL;
622     }
623     */
624    
625     TrackerDet* Geometry::Find_TrackerDet (unsigned int DetId){
626     int Det = (DetId>>28)&0xF;
627     int SubDet = (DetId>>25)&0x7;
628    
629     std::vector<TrackerDet*>::iterator it;
630     std::vector<TrackerDet*>::iterator it_begin;
631     std::vector<TrackerDet*>::iterator it_end;
632    
633     if(Det==1){ // Tracker
634     if(SubDet==1){ // PIB
635     it_begin = Det_Tracker_PIB.begin();
636     it_end = Det_Tracker_PIB.end();
637     }else if(SubDet==2){ // PIE
638     it_begin = Det_Tracker_PIE.begin();
639     it_end = Det_Tracker_PIE.end();
640     }else if(SubDet==3){ // TIB
641     it_begin = Det_Tracker_TIB.begin();
642     it_end = Det_Tracker_TIB.end();
643     }else if(SubDet==4){ // TID
644     it_begin = Det_Tracker_TID.begin();
645     it_end = Det_Tracker_TID.end();
646     }else if(SubDet==5){ // TOB
647     it_begin = Det_Tracker_TOB.begin();
648     it_end = Det_Tracker_TOB.end();
649     }else if(SubDet==6){ // TEC
650     it_begin = Det_Tracker_TEC.begin();
651     it_end = Det_Tracker_TEC.end();
652     }else{
653     return NULL;
654     }
655     }else if(Det==2){ // MUON
656     if(SubDet==1){ // DT
657     it_begin = Det_Muon_DT.begin();
658     it_end = Det_Muon_DT.end();
659     }else if(SubDet==2){ // CSC
660     it_begin = Det_Muon_CSC.begin();
661     it_end = Det_Muon_CSC.end();
662     }else if(SubDet==3){ // RPC
663     it_begin = Det_Muon_RPC.begin();
664     it_end = Det_Muon_RPC.end();
665     }else{
666     return NULL;
667     }
668     }
669    
670     TrackerDet* det = new TrackerDet();
671     det->DetId = DetId;
672     std::vector<TrackerDet*>::iterator where = std::lower_bound(it_begin, it_end, det, isLowerId());
673     delete det;
674     if( where != it_end) return *(where);
675    
676 querten 1.1 return NULL;
677 querten 1.2 }
678    
679 querten 1.7 CaloDet* Geometry::Find_CaloDet (unsigned int DetId){
680 querten 1.2
681 querten 1.7 int Det = (DetId>>28)&0xF;
682     int SubDet = (DetId>>25)&0x7;
683    
684     std::vector<CaloDet*>::iterator it;
685     std::vector<CaloDet*>::iterator it_begin;
686     std::vector<CaloDet*>::iterator it_end;
687    
688     if(Det==3){ //ECAL
689     if(SubDet==1){ // Ecal Barrel
690     it_begin = Det_ECAL_EB.begin();
691     it_end = Det_ECAL_EB.end();
692     }else if(SubDet==2){ // Ecal Endcap
693     it_begin = Det_ECAL_EE.begin();
694     it_end = Det_ECAL_EE.end();
695     }else if(SubDet==3){ // Ecal Preshower
696     it_begin = Det_ECAL_PS.begin();
697     it_end = Det_ECAL_PS.end();
698     }else{
699     return NULL;
700     }
701     }else if(Det==4){ //HCAL
702     if(SubDet==1){ // Hcal Barrel
703     it_begin = Det_HCAL_HB.begin();
704     it_end = Det_HCAL_HB.end();
705     }else if(SubDet==2){ // Hcal Endcap
706     it_begin = Det_HCAL_HE.begin();
707     it_end = Det_HCAL_HE.end();
708     }else if(SubDet==3){ // Hcal Outer
709     it_begin = Det_HCAL_HO.begin();
710     it_end = Det_HCAL_HO.end();
711     }else if(SubDet==4){ // Hcal Forward
712     it_begin = Det_HCAL_HF.begin();
713     it_end = Det_HCAL_HF.end();
714     }else{
715     return NULL;
716     }
717     }
718    
719 querten 1.9 CaloDet* det = new CaloDet();
720     det->DetId = DetId;
721     std::vector<CaloDet*>::iterator where = std::lower_bound(it_begin, it_end, det, isLowerId());
722     delete det;
723     if( where != it_end) return *(where);
724 querten 1.7
725     return NULL;
726     }