//Generator for CbmTof Geometry //Update 01/10/2012 nh // 08/10/2012 add sensitive gas gaps #include #include #include #include #include #include "math.h" #define PI 3.14159265 FILE *geof; FILE *info; FILE *parf; using namespace std; void TOFSMi(int, float, float, float, float); //inner modules - dummies void TOFSMs(int, float, float, float, float); void TOFSMo(int, float, float, float, float); void TOFSMb(int, float, float, float, float); void TofPole(int, float, float, float); void TOFBox(int, float, float, float, float, float, float); int TOFRegion(int, int, float, float, float, float, float, float, char *, int, float, float, float, float, float&, float&); int main(void) { //----------Initialization--------------------------------------- const char* c_str(); float B_factor, Dgap=0, Dplate=0; int Nchannel = 0, chanl = 0, ngaps ; string path = "data/"; string geoname = path + "test.geo" ; geof = fopen(geoname.c_str(), "w+"); string infoname = path + "test.info"; info = fopen(infoname.c_str(), "w+"); string parname = path + "par_tof.txt"; parf = fopen(parname.c_str(), "w+"); //Initialize parameters // Common //Print Header for the info file fprintf(info, " -------------------------------------------------------------------\n"); fprintf(info, " Tof Geometry : %s \n", geoname.c_str()); fprintf(info, " -------------------------------------------------------------------\n"); //Print Header for the geometry file fprintf(parf,"#####################################################################################\n"); fprintf(parf,"# Geometry for the TOF detector \n"); fprintf(parf,"# Format: \n"); fprintf(parf,"# \n"); fprintf(parf,"# SMod Mod Cell smtype X[mm] Y[mm] Z[mm] Dx[mm] Dy[mm] \n"); fprintf(parf,"#####################################################################################\n"); fprintf(parf,"[TofGeoPar] \n"); fprintf(parf,"0\n"); //----------RUN--------------------------------------- float xpos=0.; float yposmax=4500.; float ypos1=500.; float dypos=500.; float dyposb=750.; float dyposi=250.; float dzpos=200.; float DZwall=2.*dzpos; float DXcol=1400.; float Dwall=6500.; int nSMi=0; int nSMs=0; int nSMo=0; int nSMb=0; int nPole=0; int nStrip=0; cout << "Start placing SMs from "<2) { nSMs++; TOFSMs(nSMs, Dwall+dzpos, 0., xpos, ypos-dypos/2.); nStrip+=5*32; nSMs++; TOFSMs(nSMs, Dwall+dzpos, 0., xpos, -ypos+dypos/2.); nStrip+=5*32; } } cout << nSMs << " SMs placed." << endl; // add mounting structure nPole++; TofPole(nPole, Dwall, 0., xpos); nPole++; TofPole(nPole, Dwall+dzpos, 0., xpos); // now place small outer supermodules xpos=120; // offset for(int i=1; i<4;i++){ for (float ypos=0; ypos2) { nSMo++; TOFSMo(nSMo, Dwall-i*DZwall, 0., xpos+i*DXcol, -ypos); nStrip+=5*32; nSMo++; TOFSMo(nSMo, Dwall-i*DZwall, 180.,-xpos-i*DXcol, -ypos); nStrip+=5*32; // 2. layer nSMo++; TOFSMo(nSMo, Dwall-i*DZwall+dzpos, 0., xpos+i*DXcol, ypos-dypos/2.); nStrip+=5*32; nSMo++; TOFSMo(nSMo, Dwall-i*DZwall+dzpos, 180.,-xpos-i*DXcol, ypos-dypos/2.); nStrip+=5*32; nSMo++; TOFSMo(nSMo, Dwall-i*DZwall+dzpos, 0., xpos+i*DXcol, -ypos+dypos/2.); nStrip+=5*32; nSMo++; TOFSMo(nSMo, Dwall-i*DZwall+dzpos, 180.,-xpos-i*DXcol, -ypos+dypos/2.); nStrip+=5*32; } } nPole++; TofPole(nPole, Dwall-i*DZwall, 180., xpos+i*DXcol); nPole++; TofPole(nPole, Dwall-i*DZwall+dzpos, 180., xpos+i*DXcol); nPole++; TofPole(nPole, Dwall-i*DZwall, 0., -xpos-i*DXcol); nPole++; TofPole(nPole, Dwall-i*DZwall+dzpos, 0., -xpos-i*DXcol); } cout << nSMo << " SMo placed." << endl; // now place big outer supermodules //xpos=xpos+3*DXcol; // offset for(int i=4; i<5;i++){ for (float ypos=0; ypos2) { nSMb++; TOFSMb(nSMb, Dwall-i*DZwall, 0., xpos+i*DXcol, -ypos); nStrip+=3*52; nSMb++; TOFSMb(nSMb, Dwall-i*DZwall, 180.,-xpos-i*DXcol, -ypos); nStrip+=3*52; // 2. layer nSMb++; TOFSMb(nSMb, Dwall-i*DZwall+dzpos, 0., xpos+i*DXcol, ypos-dyposb/2.); nStrip+=3*52; nSMb++; TOFSMb(nSMb, Dwall-i*DZwall+dzpos, 180.,-xpos-i*DXcol, ypos-dyposb/2.); nStrip+=3*52; nSMb++; TOFSMb(nSMb, Dwall-i*DZwall+dzpos, 0., xpos+i*DXcol, -ypos+dyposb/2.); nStrip+=3*52; nSMb++; TOFSMb(nSMb, Dwall-i*DZwall+dzpos, 180.,-xpos-i*DXcol, -ypos+dyposb/2.); nStrip+=3*52; } } nPole++; TofPole(nPole, Dwall-i*DZwall, 180., xpos+i*DXcol); nPole++; TofPole(nPole, Dwall-i*DZwall+dzpos, 180., xpos+i*DXcol); nPole++; TofPole(nPole, Dwall-i*DZwall, 0., -xpos-i*DXcol); nPole++; TofPole(nPole, Dwall-i*DZwall+dzpos, 0., -xpos-i*DXcol); } cout << nSMb << " SMb placed." << endl; // now place small innermost supermodule dummies xpos=0.; for (float ypos=0.; ypos1) { nSMi++; TOFSMi(nSMi, Dwall+DZwall, 0., xpos, -ypos); nStrip+=5*64; nSMi++; TOFSMi(nSMi, Dwall+DZwall+dzpos, 0., xpos, ypos-dyposi/2.); nStrip+=5*64; nSMi++; TOFSMi(nSMi, Dwall+DZwall+dzpos, 0., xpos, -ypos+dyposi/2.); nStrip+=5*64; } } cout << nSMi << " SMi placed." << endl; // add mounting structure nPole++; TofPole(nPole, Dwall+DZwall, 0., xpos); nPole++; TofPole(nPole, Dwall+DZwall+dzpos, 0., xpos); Nchannel=nStrip*2; cout << nSMo << " SMo placed." << endl; cout << nStrip << " strips," << Nchannel << " channels in setup." << endl; //---------------------END---------------------------- fprintf(info, "\n"); fprintf(info, "Total number of channels in the TOF : %d \n", Nchannel); fclose(geof); fclose(info); cout<<"\n"<0 fprintf(geof,"t1reg1gla#%d \n", k); fprintf(geof,"t1reg1mod#%d \n",j); fprintf(geof, "%f %f %f \n" , 0.0, 0.0 , startzpos+(k-1)*dzpos); //position fprintf(geof, "%f %f %f " , 1.0 , 0.0 , 0.0); //rotation matrix fprintf(geof, "%f %f %f " , 0.0 , 1.0 , 0.0); fprintf(geof, "%f %f %f \n" , 0.0 , 0.0 , 1.0); if (k<9) { fprintf(geof,"t1reg1gap#%d \n", k); fprintf(geof,"t1reg1mod#%d \n",j); fprintf(geof, "%f %f %f \n" , 0.0, 0.0 , startzposg+(k-1)*dzpos); //position fprintf(geof, "%f %f %f " , 1.0 , 0.0 , 0.0); //rotation matrix fprintf(geof, "%f %f %f " , 0.0 , 1.0 , 0.0); fprintf(geof, "%f %f %f \n" , 0.0 , 0.0 , 1.0); fprintf(geof,"//------------------------------------------ \n"); if (k==4){ //take geometry from center gap (#4) cout << "write geo para1 for i="< media.geo fprintf(geof, " %f %f %f \n", dxe/2, -dye/2, -dze/2); fprintf(geof, " %f %f %f \n", dxe/2, dye/2, -dze/2); fprintf(geof, " %f %f %f \n", -dxe/2, dye/2, -dze/2); fprintf(geof, " %f %f %f \n", -dxe/2, -dye/2, -dze/2); fprintf(geof, " %f %f %f \n", dxe/2, -dye/2, dze/2); fprintf(geof, " %f %f %f \n", dxe/2, dye/2, dze/2); fprintf(geof, " %f %f %f \n", -dxe/2, dye/2, dze/2); fprintf(geof, " %f %f %f \n", -dxe/2, -dye/2, dze/2); fprintf(geof, "\n"); fprintf(geof, "%f %f %f \n" , startxpos+(j-1)*dxpos , yele , zoff*dzoff); fprintf(geof, "%f %f %f " , 1.0 , 0.0 , 0.0 ); fprintf(geof, "%f %f %f " , 0.0 , 1.0 , 0.0 ); fprintf(geof, "%f %f %f \n" , 0.0 , 0.0 , 1.0 ); fprintf(geof,"//------------------------------------------ \n"); fprintf(geof,"t1pcb#%d \n", j); fprintf(geof,"tof%dgas \n", i); fprintf(geof, "%f %f %f \n" , startxpos+(j-1)*dxpos ,-yele , zoff*dzoff); fprintf(geof, "%f %f %f " , 1.0 , 0.0 , 0.0 ); fprintf(geof, "%f %f %f " , 0.0 , 1.0 , 0.0 ); fprintf(geof, "%f %f %f \n" , 0.0 , 0.0 , 1.0 ); fprintf(geof,"//------------------------------------------ \n"); }else{ //j>1 fprintf(geof,"t%dreg%dmod#%d \n",i,i,j); fprintf(geof,"tof%dgas \n", i); fprintf(geof, "%f %f %f \n" , startxpos+(j-1)*dxpos , 0.0 , zoff*dzoff); //position fprintf(geof, "%f %f %f " , 1.0 , 0.0 , 0.0); //rotation matrix fprintf(geof, "%f %f %f " , 0.0 , 1.0 , 0.0); fprintf(geof, "%f %f %f \n" , 0.0 , 0.0 , 1.0); fprintf(geof,"//------------------------------------------ \n"); // cout << "write geo para for i="<0 fprintf(geof,"tof1#%d\n", i); fprintf(geof,"cave \n"); fprintf(geof, "%f %f %f \n" , xpos, ypos, Z); fprintf(geof, "%f %f %f " , 1.0 , 0.0 , 0.0 ); fprintf(geof, "%f %f %f " , 0.0 , 1.0 , 0.0 ); fprintf(geof, "%f %f %f \n" , 0.0 , 0.0 , 1.0 ); fprintf(geof,"//------------------------------------------ \n"); zoff=1; for (int j=1; j<6; j++){ //loop over counters (modules) zoff=-zoff; for (int l=0; l0 fprintf(geof,"t4reg1gla#%d \n", k); fprintf(geof,"t4reg1mod#%d \n",j); fprintf(geof, "%f %f %f \n" , 0.0, 0.0 , startzpos+(k-1)*dzpos); //position fprintf(geof, "%f %f %f " , 1.0 , 0.0 , 0.0); //rotation matrix fprintf(geof, "%f %f %f " , 0.0 , 1.0 , 0.0); fprintf(geof, "%f %f %f \n" , 0.0 , 0.0 , 1.0); if (k<9) { fprintf(geof,"t4reg1gap#%d \n", k); fprintf(geof,"t4reg1mod#%d \n",j); fprintf(geof, "%f %f %f \n" , 0.0, 0.0 , startzposg+(k-1)*dzpos); //position fprintf(geof, "%f %f %f " , 1.0 , 0.0 , 0.0); //rotation matrix fprintf(geof, "%f %f %f " , 0.0 , 1.0 , 0.0); fprintf(geof, "%f %f %f \n" , 0.0 , 0.0 , 1.0); fprintf(geof,"//------------------------------------------ \n"); if (k==4){ //take geometry from center gap (#4) cout << "write geo para1 for i="< media.geo fprintf(geof, " %f %f %f \n", dxe/2, -dye/2, -dze/2); fprintf(geof, " %f %f %f \n", dxe/2, dye/2, -dze/2); fprintf(geof, " %f %f %f \n", -dxe/2, dye/2, -dze/2); fprintf(geof, " %f %f %f \n", -dxe/2, -dye/2, -dze/2); fprintf(geof, " %f %f %f \n", dxe/2, -dye/2, dze/2); fprintf(geof, " %f %f %f \n", dxe/2, dye/2, dze/2); fprintf(geof, " %f %f %f \n", -dxe/2, dye/2, dze/2); fprintf(geof, " %f %f %f \n", -dxe/2, -dye/2, dze/2); fprintf(geof, "\n"); fprintf(geof, "%f %f %f \n" , startxpos+(j-1)*dxpos , yele , zoff*dzoff); fprintf(geof, "%f %f %f " , 1.0 , 0.0 , 0.0 ); fprintf(geof, "%f %f %f " , 0.0 , 1.0 , 0.0 ); fprintf(geof, "%f %f %f \n" , 0.0 , 0.0 , 1.0 ); fprintf(geof,"//------------------------------------------ \n"); fprintf(geof,"t4pcb#%d \n", j); fprintf(geof,"tof%dgas \n", i); fprintf(geof, "%f %f %f \n" , startxpos+(j-1)*dxpos ,-yele , zoff*dzoff); fprintf(geof, "%f %f %f " , 1.0 , 0.0 , 0.0 ); fprintf(geof, "%f %f %f " , 0.0 , 1.0 , 0.0 ); fprintf(geof, "%f %f %f \n" , 0.0 , 0.0 , 1.0 ); fprintf(geof,"//------------------------------------------ \n"); }else{ //j>1 fprintf(geof,"t%dreg%dmod#%d \n",4,i,j); fprintf(geof,"tof%dgas \n", 4); fprintf(geof, "%f %f %f \n" , startxpos+(j-1)*dxpos , 0.0 , zoff*dzoff); //position fprintf(geof, "%f %f %f " , 1.0 , 0.0 , 0.0); //rotation matrix fprintf(geof, "%f %f %f " , 0.0 , 1.0 , 0.0); fprintf(geof, "%f %f %f \n" , 0.0 , 0.0 , 1.0); fprintf(geof,"//------------------------------------------ \n"); // cout << "write geo para for i="<0 fprintf(geof,"tof4#%d\n", i); fprintf(geof,"cave \n"); fprintf(geof, "%f %f %f \n" , xpos, ypos, Z); fprintf(geof, "%f %f %f " , 1.0 , 0.0 , 0.0 ); fprintf(geof, "%f %f %f " , 0.0 , 1.0 , 0.0 ); fprintf(geof, "%f %f %f \n" , 0.0 , 0.0 , 1.0 ); fprintf(geof,"//------------------------------------------ \n"); zoff=1; for (int j=1; j<6; j++){ //loop over counters (modules) zoff=-zoff; for (int l=0; l0 fprintf(geof,"t2reg1gla#%d \n", k); fprintf(geof,"t2reg1mod#%d \n",j); fprintf(geof, "%f %f %f \n" , 0.0, 0.0 , startzpos+(k-1)*dzpos); //position fprintf(geof, "%f %f %f " , 1.0 , 0.0 , 0.0); //rotation matrix fprintf(geof, "%f %f %f " , 0.0 , 1.0 , 0.0); fprintf(geof, "%f %f %f \n" , 0.0 , 0.0 , 1.0); if (k<9){ fprintf(geof,"t2reg1gap#%d \n", k); fprintf(geof,"t2reg1mod#%d \n",j); fprintf(geof, "%f %f %f \n" , 0.0, 0.0 , startzposg+(k-1)*dzpos); //position fprintf(geof, "%f %f %f " , 1.0 , 0.0 , 0.0); //rotation matrix fprintf(geof, "%f %f %f " , 0.0 , 1.0 , 0.0); fprintf(geof, "%f %f %f \n" , 0.0 , 0.0 , 1.0); fprintf(geof,"//------------------------------------------ \n"); if (k==4){ //take geometry from center gap (#4) cout << "write geo para2 for i="< media.geo fprintf(geof, " %f %f %f \n", dxe/2, -dye/2, -dze/2); fprintf(geof, " %f %f %f \n", dxe/2, dye/2, -dze/2); fprintf(geof, " %f %f %f \n", -dxe/2, dye/2, -dze/2); fprintf(geof, " %f %f %f \n", -dxe/2, -dye/2, -dze/2); fprintf(geof, " %f %f %f \n", dxe/2, -dye/2, dze/2); fprintf(geof, " %f %f %f \n", dxe/2, dye/2, dze/2); fprintf(geof, " %f %f %f \n", -dxe/2, dye/2, dze/2); fprintf(geof, " %f %f %f \n", -dxe/2, -dye/2, dze/2); fprintf(geof, "\n"); fprintf(geof, "%f %f %f \n" , startxpos+(j-1)*dxpos , yele , 0.); //position fprintf(geof, "%f %f %f " , cphi , 0.0 , sphi); //rotation matrix fprintf(geof, "%f %f %f " , 0.0 , 1.0 , 0.0); fprintf(geof, "%f %f %f \n" , -sphi , 0.0 , cphi); fprintf(geof,"//------------------------------------------ \n"); fprintf(geof,"t2pcb#%d \n",j); fprintf(geof,"tof%dgas \n", 2); fprintf(geof, "%f %f %f \n" , startxpos+(j-1)*dxpos ,-yele , 0.); //position fprintf(geof, "%f %f %f " , cphi , 0.0 , sphi); //rotation matrix fprintf(geof, "%f %f %f " , 0.0 , 1.0 , 0.0); fprintf(geof, "%f %f %f \n" , -sphi , 0.0 , cphi); fprintf(geof,"//------------------------------------------ \n"); }else{ //j>1 fprintf(geof,"t%dreg%dmod#%d \n",2,1,j); fprintf(geof,"tof%dgas \n", 2); fprintf(geof, "%f %f %f \n" , startxpos+(j-1)*dxpos , 0.0 , 0.); //position fprintf(geof, "%f %f %f " , cphi , 0.0 , sphi); //rotation matrix fprintf(geof, "%f %f %f " , 0.0 , 1.0 , 0.0); fprintf(geof, "%f %f %f \n" , -sphi , 0.0 , cphi); fprintf(geof,"//------------------------------------------ \n"); //cout << "write geo para2 for i="<0 fprintf(geof,"tof2#%d\n", i); fprintf(geof,"cave \n"); fprintf(geof, "%f %f %f \n" , xpos, ypos, Z); fprintf(geof, "%f %f %f " , cph , -sph , 0.0 ); fprintf(geof, "%f %f %f " , sph , cph , 0.0 ); fprintf(geof, "%f %f %f \n" , 0.0 , 0.0 , 1.0 ); fprintf(geof,"//------------------------------------------ \n"); for (int j=1; j<6; j++){ //loop over counters (modules) for (int l=0; l0 fprintf(geof,"twa1pol#%d\n", i); fprintf(geof,"cave \n"); fprintf(geof, "%f %f %f \n" , xpos+cphi*(-dx/2.-dxb/2.), 0., Z); fprintf(geof, "%f %f %f " , 1.0 , 0.0 , 0.0 ); fprintf(geof, "%f %f %f " , 0.0 , 1.0 , 0.0 ); fprintf(geof, "%f %f %f \n" , 0.0 , 0.0 , 1.0 ); fprintf(geof,"//------------------------------------------ \n"); } } void TOFSMb(int i, float Z, float phi, float xpos, float ypos){ //i = index of the first box/tower //Z = distance to the target //phi = angle in along the Z axis //dy = Thickness in Y //dx = Thickness in X //dz = Thickness in Z //width_alu = Aluminum thickness float dx,dy,dz,width_alux,gasoff,width_aluy,width_aluz; //Aluminum box dx=1800.; dy=750.; dz=200.; width_alux=30.; gasoff=-20.; // to get asymmetric wall thicknesses width_aluy=10.; width_aluz=1.; //Counter (inside) float cdx=550; float cdy=560; float cdz=80; int nstrips=52; float dxpos=490.; float startxpos=-560.; float phic=10./180.*PI;// counter tilt angle float cphi=cos(phic); float sphi=sin(phic); float gdx=520; //glass float gdy=530; float gdz=1; float ggdx=gdx; //gas gap float ggdy=gdy; float ggdz=0.25; float gsdx=ggdx/float(nstrips); float dzpos=gdz+ggdz; float startzpos=-6.; float startzposg=-6.+gdz/2.; // electronics float dxe=530.; //pcb dimensions float dye=50.; float dze=3.; float yele=cdy/2.+dye/2.; float cph=cos(phi/180.*PI); float sph=sin(phi/180.*PI); if (i==1) { fprintf(geof,"tof%d#%d\n", 3,i); fprintf(geof,"cave \n"); fprintf(geof,"BOX\n"); fprintf(geof,"aluminium \n"); fprintf(geof, " %f %f %f \n", dx/2, -dy/2, -dz/2); fprintf(geof, " %f %f %f \n", dx/2, dy/2, -dz/2); fprintf(geof, " %f %f %f \n", -dx/2, dy/2, -dz/2); fprintf(geof, " %f %f %f \n", -dx/2, -dy/2, -dz/2); fprintf(geof, " %f %f %f \n", dx/2, -dy/2, dz/2); fprintf(geof, " %f %f %f \n", dx/2, dy/2, dz/2); fprintf(geof, " %f %f %f \n", -dx/2, dy/2, dz/2); fprintf(geof, " %f %f %f \n", -dx/2, -dy/2, dz/2); fprintf(geof, "\n"); fprintf(geof, "%f %f %f \n" , xpos, ypos, Z); fprintf(geof, "%f %f %f " , cph , -sph , 0.0 ); fprintf(geof, "%f %f %f " , sph , cph , 0.0 ); fprintf(geof, "%f %f %f \n" , 0.0 , 0.0 , 1.0 ); fprintf(geof,"//------------------------------------------ \n"); //Gas (inside) fprintf(geof,"tof%dgas \n",3); fprintf(geof,"tof3#%d \n", i); fprintf(geof,"BOX\n"); fprintf(geof,"RPCgas_noact \n"); fprintf(geof, " %f %f %f \n", dx/2-width_alux, -(dy/2-width_aluy), -(dz/2-width_aluz)); fprintf(geof, " %f %f %f \n", dx/2-width_alux, dy/2-width_aluy, -(dz/2-width_aluz)); fprintf(geof, " %f %f %f \n", -(dx/2-width_alux), dy/2-width_aluy, -(dz/2-width_aluz)); fprintf(geof, " %f %f %f \n", -(dx/2-width_alux),-(dy/2-width_aluy), -(dz/2-width_aluz)); fprintf(geof, " %f %f %f \n", dx/2-width_alux, -(dy/2-width_aluy), dz/2-width_aluz); fprintf(geof, " %f %f %f \n", dx/2-width_alux, dy/2-width_aluy, dz/2-width_aluz); fprintf(geof, " %f %f %f \n", -(dx/2-width_alux), dy/2-width_aluy, dz/2-width_aluz); fprintf(geof, " %f %f %f \n", -(dx/2-width_alux),-(dy/2-width_aluy), dz/2-width_aluz); fprintf(geof, "\n"); fprintf(geof, "%f %f %f \n" , gasoff , 0.0 , 0.0); fprintf(geof, "%f %f %f " , 1.0 , 0.0 , 0.0); fprintf(geof, "%f %f %f " , 0.0 , 1.0 , 0.0); fprintf(geof, "%f %f %f \n" , 0.0 , 0.0 , 1.0); fprintf(geof,"//------------------------------------------ \n"); for (int j=1; j<4; j++){ //loop over counters if(j==1) { fprintf(geof,"t%dreg%dmod#%d \n",3,1,j); fprintf(geof,"tof%dgas \n", 3); fprintf(geof,"BOX\n"); fprintf(geof,"RPCgas_noact \n"); fprintf(geof, " %f %f %f \n", cdx/2, -cdy/2, -cdz/2); fprintf(geof, " %f %f %f \n", cdx/2, cdy/2, -cdz/2); fprintf(geof, " %f %f %f \n", -cdx/2, cdy/2, -cdz/2); fprintf(geof, " %f %f %f \n", -cdx/2, -cdy/2, -cdz/2); fprintf(geof, " %f %f %f \n", cdx/2, -cdy/2, cdz/2); fprintf(geof, " %f %f %f \n", cdx/2, cdy/2, cdz/2); fprintf(geof, " %f %f %f \n", -cdx/2, cdy/2, cdz/2); fprintf(geof, " %f %f %f \n", -cdx/2, -cdy/2, cdz/2); fprintf(geof, "\n"); fprintf(geof, "%f %f %f \n" , startxpos+(j-1)*dxpos , 0.0 , 0.); //position fprintf(geof, "%f %f %f " , cphi , 0.0 , sphi); //rotation matrix fprintf(geof, "%f %f %f " , 0.0 , 1.0 , 0.0); fprintf(geof, "%f %f %f \n" , -sphi , 0.0 , cphi); fprintf(geof,"//------------------------------------------ \n"); for (int k=1; k<10; k++){ //loop over glass plates if(k==1) { fprintf(geof,"t3reg1gla#%d \n", k); fprintf(geof,"t3reg1mod#%d \n",j); fprintf(geof,"BOX\n"); fprintf(geof,"RPCglass \n"); fprintf(geof, " %f %f %f \n", gdx/2, -gdy/2, -gdz/2); fprintf(geof, " %f %f %f \n", gdx/2, gdy/2, -gdz/2); fprintf(geof, " %f %f %f \n", -gdx/2, gdy/2, -gdz/2); fprintf(geof, " %f %f %f \n", -gdx/2, -gdy/2, -gdz/2); fprintf(geof, " %f %f %f \n", gdx/2, -gdy/2, gdz/2); fprintf(geof, " %f %f %f \n", gdx/2, gdy/2, gdz/2); fprintf(geof, " %f %f %f \n", -gdx/2, gdy/2, gdz/2); fprintf(geof, " %f %f %f \n", -gdx/2, -gdy/2, gdz/2); fprintf(geof, "\n"); fprintf(geof, "%f %f %f \n" , 0.0, 0.0 , startzpos+(k-1)*dzpos); //position fprintf(geof, "%f %f %f " , 1.0 , 0.0 , 0.0); //rotation matrix fprintf(geof, "%f %f %f " , 0.0 , 1.0 , 0.0); fprintf(geof, "%f %f %f \n" , 0.0 , 0.0 , 1.0); fprintf(geof,"//------------------------------------------ \n"); fprintf(geof,"t3reg1gap#%d \n", k); fprintf(geof,"t3reg1mod#%d \n",j); fprintf(geof,"BOX\n"); fprintf(geof,"RPCgas_noact \n"); fprintf(geof, " %f %f %f \n", ggdx/2, -ggdy/2, -ggdz/2); fprintf(geof, " %f %f %f \n", ggdx/2, ggdy/2, -ggdz/2); fprintf(geof, " %f %f %f \n", -ggdx/2, ggdy/2, -ggdz/2); fprintf(geof, " %f %f %f \n", -ggdx/2, -ggdy/2, -ggdz/2); fprintf(geof, " %f %f %f \n", ggdx/2, -ggdy/2, ggdz/2); fprintf(geof, " %f %f %f \n", ggdx/2, ggdy/2, ggdz/2); fprintf(geof, " %f %f %f \n", -ggdx/2, ggdy/2, ggdz/2); fprintf(geof, " %f %f %f \n", -ggdx/2, -ggdy/2, ggdz/2); fprintf(geof, "\n"); fprintf(geof, "%f %f %f \n" , 0.0, 0.0 , startzposg+(k-1)*dzpos); //position fprintf(geof, "%f %f %f " , 1.0 , 0.0 , 0.0); //rotation matrix fprintf(geof, "%f %f %f " , 0.0 , 1.0 , 0.0); fprintf(geof, "%f %f %f \n" , 0.0 , 0.0 , 1.0); fprintf(geof,"//------------------------------------------ \n"); for (int l=0; l0 fprintf(geof,"t3reg1gla#%d \n", k); fprintf(geof,"t3reg1mod#%d \n",j); fprintf(geof, "%f %f %f \n" , 0.0, 0.0 , startzpos+(k-1)*dzpos); //position fprintf(geof, "%f %f %f " , 1.0 , 0.0 , 0.0); //rotation matrix fprintf(geof, "%f %f %f " , 0.0 , 1.0 , 0.0); fprintf(geof, "%f %f %f \n" , 0.0 , 0.0 , 1.0); if (k<9){ fprintf(geof,"t3reg1gap#%d \n", k); fprintf(geof,"t3reg1mod#%d \n",j); fprintf(geof, "%f %f %f \n" , 0.0, 0.0 , startzposg+(k-1)*dzpos); //position fprintf(geof, "%f %f %f " , 1.0 , 0.0 , 0.0); //rotation matrix fprintf(geof, "%f %f %f " , 0.0 , 1.0 , 0.0); fprintf(geof, "%f %f %f \n" , 0.0 , 0.0 , 1.0); fprintf(geof,"//------------------------------------------ \n"); if (k==4){ //take geometry from center gap (#4) cout << "write geo para3 for i="< media.geo fprintf(geof, " %f %f %f \n", dxe/2, -dye/2, -dze/2); fprintf(geof, " %f %f %f \n", dxe/2, dye/2, -dze/2); fprintf(geof, " %f %f %f \n", -dxe/2, dye/2, -dze/2); fprintf(geof, " %f %f %f \n", -dxe/2, -dye/2, -dze/2); fprintf(geof, " %f %f %f \n", dxe/2, -dye/2, dze/2); fprintf(geof, " %f %f %f \n", dxe/2, dye/2, dze/2); fprintf(geof, " %f %f %f \n", -dxe/2, dye/2, dze/2); fprintf(geof, " %f %f %f \n", -dxe/2, -dye/2, dze/2); fprintf(geof, "\n"); fprintf(geof, "%f %f %f \n" , startxpos+(j-1)*dxpos , yele , 0.); //position fprintf(geof, "%f %f %f " , cphi , 0.0 , sphi); //rotation matrix fprintf(geof, "%f %f %f " , 0.0 , 1.0 , 0.0); fprintf(geof, "%f %f %f \n" , -sphi , 0.0 , cphi); fprintf(geof,"//------------------------------------------ \n"); fprintf(geof,"t3pcb#%d \n",j); fprintf(geof,"tof%dgas \n", 3); fprintf(geof, "%f %f %f \n" , startxpos+(j-1)*dxpos ,-yele , 0.); //position fprintf(geof, "%f %f %f " , cphi , 0.0 , sphi); //rotation matrix fprintf(geof, "%f %f %f " , 0.0 , 1.0 , 0.0); fprintf(geof, "%f %f %f \n" , -sphi , 0.0 , cphi); fprintf(geof,"//------------------------------------------ \n"); }else{ //j>1 fprintf(geof,"t%dreg%dmod#%d \n",3,1,j); fprintf(geof,"tof%dgas \n", 3); fprintf(geof, "%f %f %f \n" , startxpos+(j-1)*dxpos , 0.0 , 0.); //position fprintf(geof, "%f %f %f " , cphi , 0.0 , sphi); //rotation matrix fprintf(geof, "%f %f %f " , 0.0 , 1.0 , 0.0); fprintf(geof, "%f %f %f \n" , -sphi , 0.0 , cphi); fprintf(geof,"//------------------------------------------ \n"); //cout << "write geo para2 for i="<0 fprintf(geof,"tof3#%d\n", i); fprintf(geof,"cave \n"); fprintf(geof, "%f %f %f \n" , xpos, ypos, Z); fprintf(geof, "%f %f %f " , cph , -sph , 0.0 ); fprintf(geof, "%f %f %f " , sph , cph , 0.0 ); fprintf(geof, "%f %f %f \n" , 0.0 , 0.0 , 1.0 ); fprintf(geof,"//------------------------------------------ \n"); for (int j=1; j<4; j++){ //loop over counters (modules) for (int l=0; l