Privacy and Security Notice

Qset.cc Source File

Qset.cc

Go to the documentation of this file.
00001 #include "Qset.h"
00002 #include <iostream>
00003 #include <math.h>
00004 #include "tree.h"
00005 #ifndef NDetMax
00006 #define NDetMax 1010
00007 #endif
00008 using namespace std;
00009 #define PI 3.141592653589793
00010 
00011 extern Det *rcDETRegion[2][3][4];
00012 extern Det rcDET[NDetMax];
00013 extern EUppLow operator++(enum EUppLow &rs, int );
00014 extern ERegion operator++(enum ERegion &rs, int );
00015 extern Etype operator++(enum Etype &rs, int );
00016 extern Edir operator++(enum Edir &rs, int );
00017 
00018 /*
00019 Qset
00020 Date : 7/30/7
00021 Author : Burnham Stokes */
00034 //____________________________________________________________
00035 int Qset::FillDetec(char *geomfile){
00036         FILE *geom;
00037         char line[256];
00038         
00039         int maxchar = 256,i=0;
00040         geom = fopen(geomfile,"r");
00041         while(!feof(geom)){
00042                 fgets(line,maxchar,geom);
00043                 if(feof(geom))break;
00044                 strcpy(rcDET[i].cName,strtok(line,"\n"));//detector name
00045                 fgets(line,maxchar,geom);
00046                 strcpy(rcDET[i].cType,strtok(line,"\n"));//detector Type
00047                 fgets(line,maxchar,geom);
00048                 rcDET[i].Zpos = atof(strtok(line,"\n"));//z position of detector center
00049                 fgets(line,maxchar,geom);
00050                 rcDET[i].Rot = atof(strtok(line,"\n"));//rotation of detector about the x-axis (degrees)
00051                 rcDET[i].rRotCos = cos(rcDET[i].Rot*PI/180);
00052                 rcDET[i].rRotSin = sin(rcDET[i].Rot*PI/180);
00053                 fgets(line,maxchar,geom);
00054                 rcDET[i].resolution = atof(strtok(line,"\n"));//spatial resolution 
00055                 fgets(line,maxchar,geom);
00056                 rcDET[i].TrackResolution = atof(strtok(line,"\n"));//track resolution
00057                 fgets(line,maxchar,geom);
00058                 rcDET[i].SlopeMatching = atof(strtok(line,"\n"));//front/back track segment slope matching
00059                 fgets(line,maxchar,geom);
00060                 switch(line[0]){//upper or lower detector
00061                         case 'u':
00062                                 rcDET[i].upplow = w_upper;
00063                                 break;
00064                         case 'd':
00065                                 rcDET[i].upplow = w_lower;
00066                                 break;
00067                         default :
00068                                 rcDET[i].upplow = w_nowhere;
00069                                 break;
00070                 }
00071                 fgets(line,maxchar,geom);
00072                 switch(line[0]){//detector region
00073                         case '1':
00074                                 rcDET[i].region = r1;
00075                                 break;
00076                         case '2':
00077                                 rcDET[i].region = r2;
00078                                 break;
00079                         case '3':
00080                                 rcDET[i].region = r3;
00081                                 break;
00082                 }
00083                 fgets(line,maxchar,geom);
00084                 switch(line[0]){//detector type
00085                         case 'd':
00086                                 rcDET[i].type = d_drift;
00087                                 break;
00088                         case 'g':
00089                                 rcDET[i].type = d_gem;
00090                                 break;
00091                         case 't':
00092                                 rcDET[i].type = d_trigscint;
00093                                 break;
00094                         case 'c':
00095                                 rcDET[i].type = d_cerenkov;
00096                                 break;
00097         
00098                 }
00099                 fgets(line,maxchar,geom);
00100                 switch(line[0]){//plane direction
00101                         case 'u':
00102                                 rcDET[i].dir = u_dir;
00103                                 break;
00104                         case 'v':
00105                                 rcDET[i].dir = v_dir;
00106                                 break;
00107                         case 'x':
00108                                 rcDET[i].dir = x_dir;
00109                                 break;
00110                         case 'y':
00111                                 rcDET[i].dir = y_dir;
00112                                 break;
00113                 
00114                 }
00115                 fgets(line,maxchar,geom);
00116                 rcDET[i].center[0]=atof(strtok(line,"\n"));//detector center (x)
00117                 fgets(line,maxchar,geom);
00118                 rcDET[i].center[1]=atof(strtok(line,"\n"));//detector center (y)
00119                 fgets(line,maxchar,geom);
00120                 rcDET[i].width[0]=atof(strtok(line,"\n"));//width of active area (x)
00121                 fgets(line,maxchar,geom);
00122                 rcDET[i].width[1]=atof(strtok(line,"\n"));//width of active area (y)
00123                 fgets(line,maxchar,geom);
00124                 rcDET[i].width[2]=atof(strtok(line,"\n"));//width of active area (z)
00125                 fgets(line,maxchar,geom);
00126                 rcDET[i].WireSpacing=atof(strtok(line,"\n"));//Wire Spacing in X
00127                 fgets(line,maxchar,geom);
00128                 rcDET[i].PosOfFirstWire=atof(strtok(line,"\n"));//position of first wire (x) 
00129                 fgets(line,maxchar,geom);
00130                 rcDET[i].rCos=atof(strtok(line,"\n"));//cosine of wire orientation w.r.t. x-axis
00131                 fgets(line,maxchar,geom);
00132                 rcDET[i].rSin=atof(strtok(line,"\n"));//sine of wire orientation w.r.t. x-axis
00133                 fgets(line,maxchar,geom);
00134                 rcDET[i].NumOfWires=atoi(strtok(line,"\n"));//Number of wires
00135                 fgets(line,maxchar,geom);
00136                 rcDET[i].ID=atoi(strtok(line,"\n"));//detector ID number
00137                 rcDET[i].samesearched=0;
00138                 if(i!=rcDET[i].ID)cerr << "WARNING:DETECTOR ID MUST BE IN ORDER" << endl;
00139                 i++;
00140         }
00141         numdetectors =i;
00142         LinkDetector();
00143         return 0;
00144 }
00145 //____________________________________________________________
00146 void Qset::LinkDetector(){
00147 /*This function strings together groups of detector elements */
00148 
00149         enum EUppLow up_low;
00150         enum ERegion region;
00151         enum Edir dir;
00152         enum Etype type;
00153         Det *rd,*rnd,*rwd;
00154         for(int i = 0; i<=numdetectors; i++) {
00155                 rd = &rcDET[i];
00156                 if( !rd->samesearched ) { 
00157                         up_low = rd->upplow;     
00158                         dir   = rd->dir;
00159                         region  = rd->region;
00160                         type = rd->type;
00161                         if( !rcDETRegion[up_low][region-1][dir] )
00162                                 rcDETRegion[up_low][region-1][dir] = rd;               
00163                         rd->samesearched = 1;     
00164                         rwd = rd;      
00165                         /* check for the same parameters */
00166                         for(int l = i+1; l<=numdetectors; l++ ) {
00167                                 rnd = &rcDET[l];
00168                                 
00169                                 if(   rnd->upplow     == up_low
00170                                         && rnd->type    == type
00171                                         && rnd->dir == dir
00172                                         && !rnd->samesearched
00173                                         && rnd->region      == region  ) {
00174                                         rnd->samesearched = 1;
00175                                         rwd = (rwd->nextsame = rnd);
00176                                 }
00177                                  
00178                         }
00179                 }
00180         }
00181 }
00182 //____________________________________________________________
00183 Qset::Qset(){
00184         numdetectors =0;
00185 }
00186 //____________________________________________________________
00187 

Generated on Fri Jan 11 22:33:59 2008 by  doxygen 1.4.6