// Daniel Pitzl, Nov 2011 // include CMS pixel files: data, gain // Armin Burgmeier, Jan 2012: converted into CMSPixelReader class #include // for getenv #include #include //#include "CMSpixelClust.h" void CMSPixelReader::open( unsigned int euRunNumber, int mode = 1 ) // 1=DUT, 2=REF { chip = 8; // TODO: Read chip num from run database file // TODO: implement skip (from run database file) // TODO: Read CMS run number from database file std::string filename = ""; // DP 14.3.2012 if( euRunNumber == 1559 ) filename = "/home/pitzl/psi/slc5/psi46expert/takeData/bt05r006623/mtb.bin";//Eu 1559 chip 8 4GeV if( euRunNumber == 1562 ) filename = "/home/pitzl/psi/slc5/psi46expert/takeData/bt05r006624/mtb.bin";//Eu 1562 chip 8 5GeV if( euRunNumber == 1565 ) filename = "/home/pitzl/psi/slc5/psi46expert/takeData/bt05r006627/mtb.bin";//Eu 1565 500M shift if( euRunNumber == 1584 ) filename = "/home/pitzl/psi/slc5/psi46expert/takeData/bt05r006704/mtb.bin";//Eu 1584 short shft // Fri 25.11.2011 chip 8, Calice finger scint trig, 5.4 GeV if( euRunNumber == 1589 ) filename = "/home/pitzl/psi/slc5/psi46expert/takeData/bt05r006710/mtb.bin";//Eu 1589 V117 H199 if( euRunNumber == 1590 ) filename = "/home/pitzl/psi/slc5/psi46expert/takeData/bt05r006711/mtb.bin";//Eu 1590 V114 H199 if( euRunNumber == 1591 ) filename = "/home/pitzl/psi/slc5/psi46expert/takeData/bt05r006712/mtb.bin";//Eu 1591 V111 H199 // Fri 25.11.2011 chip 8, Calice finger scint trig, 5.8 GeV, Mimosa thresh 7 if( euRunNumber == 1592 ) filename = "/home/pitzl/psi/slc5/psi46expert/takeData/bt05r006713/mtb.bin";//Eu 1592 V111 H199 if( euRunNumber == 1593 ) filename = "/home/pitzl/psi/slc5/psi46expert/takeData/bt05r006714/mtb.bin";//Eu 1593 V107 if( euRunNumber == 1594 ) filename = "/home/pitzl/psi/slc5/psi46expert/takeData/bt05r006715/mtb.bin";//Eu 1594 V103 if( euRunNumber == 1595 ) filename = "/home/pitzl/psi/slc5/psi46expert/takeData/bt05r006716/mtb.bin";//Eu 1595 H204 if( euRunNumber == 1596 ) filename = "/home/pitzl/psi/slc5/psi46expert/takeData/bt05r006717/mtb.bin";//Eu 1596 H195 if( euRunNumber == 1597 ) filename = "/home/pitzl/psi/slc5/psi46expert/takeData/bt05r006718/mtb.bin";//Eu 1597 V115 if( euRunNumber == 1598 ) filename = "/home/pitzl/psi/slc5/psi46expert/takeData/bt05r006719/mtb.bin";//Eu 1598 V119 // Mon 28.11.2011 chip 6, Calice scint + Eu back scint trig, 5.8 GeV, Mimosa thresh 8 if( euRunNumber == 1631 ){ filename = "/home/pitzl/psi/slc5/psi46expert/takeData/bt05r006735/mtb.bin";//Eu 1631 chip = 6;} if( euRunNumber == 1632 ){ filename = "/home/pitzl/psi/slc5/psi46expert/takeData/bt05r006736/mtb.bin";//Eu 1632 chip = 6;} // Tue 29.11.2011 chip 8, Calice scint trig, 5.8 GeV, Mimosa thresh 8 if( euRunNumber == 1638 ) filename = "/home/pitzl/psi/slc5/psi46expert/takeData/bt05r006744/mtb.bin";//Eu 1638 // Tue 29.11.2011 chip 8, Calice scint + Eu back scint trig, 5.8 GeV, Mimosa thresh 8 if( euRunNumber == 1640 ) filename = "/home/pitzl/psi/slc5/psi46expert/takeData/bt05r006745/mtb.bin";//Eu 1640 // Thu 1.12.2011 chip 8, Calice scint, 5.8 GeV, Mimosa thresh 10 if( euRunNumber == 1649 ) filename = "/home/pitzl/psi/slc5/psi46expert/takeData/bt05r006751/mtb.bin";//Eu 1649 9'929 if( euRunNumber == 1650 ) filename = "/home/pitzl/psi/slc5/psi46expert/takeData/bt05r006752/mtb.bin";//Eu 1650 10'187 if( euRunNumber == 1651 ) filename = "/home/pitzl/psi/slc5/psi46expert/takeData/bt05r006753/mtb.bin";//Eu 1651 11'810 if( euRunNumber == 1652 ) filename = "/home/pitzl/psi/slc5/psi46expert/takeData/bt05r006754/mtb.bin";//Eu 1652 861 if( euRunNumber == 1653 ) filename = "/home/pitzl/psi/slc5/psi46expert/takeData/bt05r006755/mtb.bin";//Eu 1653 9'936 if( euRunNumber == 1654 ) filename = "/home/pitzl/psi/slc5/psi46expert/takeData/bt05r006756/mtb.bin";//Eu 1654 219 // Mon 12.12. chip 6 if( euRunNumber == 1946 ){ filename = "/home/pitzl/psi/slc5/psi46expert/takeData/bt05r006779/mtb.bin";//Eu 1946, skip 70 chip = 6;} // Wed 14.12. chip 6 if( euRunNumber == 2153 ){ filename = "/home/pitzl/psi/slc5/psi46expert/takeData/bt05r006781/mtb.bin";//Eu 2153, skip 19 chip = 6;} // Thu 15.12. chip 6, 20 deg if( euRunNumber == 2257 ){ filename = "/home/pitzl/psi/slc5/psi46expert/takeData/bt05r006817/mtb.bin";//Eu 2257, skip chip = 6;} if( euRunNumber == 2258 ){ filename = "/home/pitzl/psi/slc5/psi46expert/takeData/bt05r006818/mtb.bin";//Eu 2258, skip chip = 6;} if( euRunNumber == 2261 ){ filename = "/home/pitzl/psi/slc5/psi46expert/takeData/bt05r006831/mtb.bin";//Eu 2261, skip chip = 6;} if( euRunNumber == 2265 ){ filename = "/home/pitzl/psi/slc5/psi46expert/takeData/bt05r006838/mtb.bin";//Eu 2265, skip chip = 6;} if( euRunNumber == 2266 ){ filename = "/home/pitzl/psi/slc5/psi46expert/takeData/bt05r006839/mtb.bin";//Eu 2266, skip chip = 6;} if( euRunNumber == 2267 ){ filename = "/home/pitzl/psi/slc5/psi46expert/takeData/bt05r006840/mtb.bin";//Eu 2267, skip chip = 6;} if( euRunNumber == 2269 ){ filename = "/home/pitzl/psi/slc5/psi46expert/takeData/bt05r006841/mtb.bin";//Eu 2269, skip chip = 6;} // Fri 16.12.2011, 2 GeV, 20 deg if( euRunNumber == 2293 ){ filename = "/home/pitzl/psi/slc5/psi46expert/takeData/bt05r006851/mtb.bin";//chip 6, skip 1 chip = 6;} if( euRunNumber == 2295 ){ filename = "/home/pitzl/psi/slc5/psi46expert/takeData/bt05r007006/mtb.bin";//chip 7, skip 23 chip = 6;} // Mon 19.12.2011, 6 GeV, chip 6, 20 deg: if( euRunNumber == 2314 ){ filename = "/home/pitzl/psi/slc5/psi46expert/takeData/bt05r006861/mtb.bin"; chip = 6;} // Mon 19.12.2011, 6 GeV, chip 7: if( euRunNumber == 2322 ){ filename = "/home/pitzl/psi/slc5/psi46expert/takeData/bt05r007014/mtb.bin";//20 deg chip = 7;} if( euRunNumber == 2325 ){ filename = "/home/pitzl/psi/slc5/psi46expert/takeData/bt05r007015/mtb.bin";//25 deg chip = 7;} if( euRunNumber == 2326 ){ filename = "/home/pitzl/psi/slc5/psi46expert/takeData/bt05r007016/mtb.bin";//30 deg chip = 7;} if( euRunNumber == 2328 ){ filename = "/home/pitzl/psi/slc5/psi46expert/takeData/bt05r007018/mtb.bin";//15 deg chip = 7;} if( euRunNumber == 2330 ){ filename = "/home/pitzl/psi/slc5/psi46expert/takeData/bt05r007019/mtb.bin";//10 deg chip = 7;} if( euRunNumber == 2331 ){ filename = "/home/pitzl/psi/slc5/psi46expert/takeData/bt05r007020/mtb.bin";//00 deg chip = 7;} // Feb 2012: if( euRunNumber == 61 ){ filename = "/home/pitzl/psi/slc5/psi46expert/takeData/bt05r001006/mtb.bin";//00 deg, corrupt chip = 11;} if( euRunNumber == 77 ){ filename = "/home/pitzl/psi/slc5/psi46expert/takeData/bt05r001013/mtb.bin";//00 deg chip = 11;} if( euRunNumber == 78 ){ filename = "/home/pitzl/psi/slc5/psi46expert/takeData/bt05r001014/mtb.bin";//00 deg chip = 11;} if( euRunNumber == 81 ){ filename = "/home/pitzl/psi/slc5/psi46expert/takeData/bt05r001015/mtb.bin";//00 deg chip = 11;} if( euRunNumber == 86 ){ filename = "/home/pitzl/psi/slc5/psi46expert/takeData/bt05r001021/mtb.bin";//00 deg chip = 14;} if( euRunNumber == 87 ){ filename = "/home/pitzl/psi/slc5/psi46expert/takeData/bt05r001022/mtb.bin";//00 deg chip = 14;} if( euRunNumber == 92 ){ filename = "/home/pitzl/psi/slc5/psi46expert/takeData/bt05r001034/mtb.bin";//00 deg chip = 10;} if( euRunNumber == 93 ){ filename = "/home/pitzl/psi/slc5/psi46expert/takeData/bt05r001035/mtb.bin";//00 deg chip = 10;} // Thu 9.2.2012, Mimosa threshold 5: noisy, opening 194 if( euRunNumber == 122 ){ filename = "/home/pitzl/psi/slc5/psi46expert/takeData/bt05r001116/mtb.bin";//20 deg chip = 11;} if( euRunNumber == 125 ){ filename = "/home/pitzl/psi/slc5/psi46expert/takeData/bt05r001117/mtb.bin";//20 deg chip = 11;} // Fri 10.2.2012. Mimosa threshold 8, opening 185 mm if( euRunNumber == 133 ){ filename = "/home/pitzl/psi/slc5/psi46expert/takeData/bt05r001130/mtb.bin";//20 deg chip = 11; if( mode == 2 ) { filename = "/home/pitzl/psi/slc5/psi46expert/takeData/bt05r001230/mtb.bin";//ref chip = 10; } } if( euRunNumber == 134 ){ filename = "/home/pitzl/psi/slc5/psi46expert/takeData/bt05r001131/mtb.bin";//20 deg chip = 11; if( mode == 2 ) { filename = "/home/pitzl/psi/slc5/psi46expert/takeData/bt05r001231/mtb.bin";//ref chip = 10; } } if( euRunNumber == 135 ){ filename = "/home/pitzl/psi/slc5/psi46expert/takeData/bt05r001132/mtb.bin";//20 deg chip = 11; } if( euRunNumber == 137 ){ filename = "/home/pitzl/psi/slc5/psi46expert/takeData/bt05r001140/mtb.bin";//20 deg chip = 11; if( mode == 2 ) { filename = "/home/pitzl/psi/slc5/psi46expert/takeData/bt05r001240/mtb.bin";//ref chip = 10; } } if( euRunNumber == 140 ){ filename = "/home/pitzl/psi/slc5/psi46expert/takeData/bt05r001141/mtb.bin";//20 deg chip = 11; if( mode == 2 ) { filename = "/home/pitzl/psi/slc5/psi46expert/takeData/bt05r001241/mtb.bin";//ref chip = 10; } } if( euRunNumber == 142 ){ filename = "/home/pitzl/psi/slc5/psi46expert/takeData/bt05r001142/mtb.bin";//20 deg chip = 11; if( mode == 2 ) { filename = "/home/pitzl/psi/slc5/psi46expert/takeData/bt05r001242/mtb.bin";//ref chip = 10; } } if( euRunNumber == 143 ){ filename = "/home/pitzl/psi/slc5/psi46expert/takeData/bt05r001143/mtb.bin";//20 deg chip = 11; if( mode == 2 ) { filename = "/home/pitzl/psi/slc5/psi46expert/takeData/bt05r001243/mtb.bin";//ref chip = 10; } } if( euRunNumber == 145 ){ filename = "/home/pitzl/psi/slc5/psi46expert/takeData/bt05r001145/mtb.bin";//20 deg chip = 11; if( mode == 2 ) { filename = "/home/pitzl/psi/slc5/psi46expert/takeData/bt05r001245/mtb.bin";//ref chip = 10; } } if( euRunNumber == 146 ){ filename = "/home/pitzl/psi/slc5/psi46expert/takeData/bt05r001146/mtb.bin";//20 deg chip = 11; if( mode == 2 ) { filename = "/home/pitzl/psi/slc5/psi46expert/takeData/bt05r001246/mtb.bin";//ref chip = 10; } } if( euRunNumber == 147 ){ filename = "/home/pitzl/psi/slc5/psi46expert/takeData/bt05r001147/mtb.bin";//20 deg chip = 11; if( mode == 2 ) { filename = "/home/pitzl/psi/slc5/psi46expert/takeData/bt05r001247/mtb.bin";//ref chip = 10; } } if( euRunNumber == 148 ){ filename = "/home/pitzl/psi/slc5/psi46expert/takeData/bt05r001148/mtb.bin";//20 deg chip = 11; if( mode == 2 ) { filename = "/home/pitzl/psi/slc5/psi46expert/takeData/bt05r001248/mtb.bin";//ref chip = 10; } } if( euRunNumber == 150 ){ filename = "/home/pitzl/psi/slc5/psi46expert/takeData/bt05r001150/mtb.bin";//20 deg chip = 11; if( mode == 2 ) { filename = "/home/pitzl/psi/slc5/psi46expert/takeData/bt05r001250/mtb.bin";//ref chip = 10; } } if( euRunNumber == 151 ){ filename = "/home/pitzl/psi/slc5/psi46expert/takeData/bt05r001151/mtb.bin";//20 deg chip = 11; if( mode == 2 ) { filename = "/home/pitzl/psi/slc5/psi46expert/takeData/bt05r001251/mtb.bin";//ref chip = 10; } } if( euRunNumber == 158 ){ filename = "/home/pitzl/psi/slc5/psi46expert/takeData/bt05r001161/mtb.bin";//20 deg chip = 11; if( mode == 2 ) { filename = "/home/pitzl/psi/slc5/psi46expert/takeData/bt05r001261/mtb.bin";//ref chip = 10; } } // Tue 21.2.2012: if( euRunNumber == 164 ){ filename = "/home/pitzl/psi/slc5/psi46expert/takeData/bt05r001163/mtb.bin";//20 deg chip = 11; if( mode == 2 ) { filename = "/home/pitzl/psi/slc5/psi46expert/takeData/bt05r001263/mtb.bin";//ref chip = 10; } } if( euRunNumber == 166 ){ filename = "/home/pitzl/psi/slc5/psi46expert/takeData/bt05r001164/mtb.bin";//20 deg chip = 11; if( mode == 2 ) { filename = "/home/pitzl/psi/slc5/psi46expert/takeData/bt05r001264/mtb.bin";//ref chip = 10; } } if( euRunNumber == 169 ){ filename = "/home/pitzl/psi/slc5/psi46expert/takeData/bt05r001165/mtb.bin";//20 deg chip = 11; if( mode == 2 ) { filename = "/home/pitzl/psi/slc5/psi46expert/takeData/bt05r001265/mtb.bin";//ref chip = 10; } } if( euRunNumber == 171 ){ filename = "/home/pitzl/psi/slc5/psi46expert/takeData/bt05r001166/mtb.bin";//20 deg chip = 11; if( mode == 2 ) { filename = "/home/pitzl/psi/slc5/psi46expert/takeData/bt05r001266/mtb.bin";//ref chip = 10; } } if( euRunNumber == 173 ){ filename = "/home/pitzl/psi/slc5/psi46expert/takeData/bt05r001167/mtb.bin";//20 deg chip = 11; if( mode == 2 ) { filename = "/home/pitzl/psi/slc5/psi46expert/takeData/bt05r001267/mtb.bin";//ref chip = 10; } } if( euRunNumber == 175 ){ filename = "/home/pitzl/psi/slc5/psi46expert/takeData/bt05r001168/mtb.bin";//20 deg chip = 11; if( mode == 2 ) { filename = "/home/pitzl/psi/slc5/psi46expert/takeData/bt05r001268/mtb.bin";//ref chip = 10; } } if( euRunNumber == 177 ){ filename = "/home/pitzl/psi/slc5/psi46expert/takeData/bt05r001169/mtb.bin";//20 deg chip = 11; if( mode == 2 ) { filename = "/home/pitzl/psi/slc5/psi46expert/takeData/bt05r001269/mtb.bin";//ref chip = 10; } } if( euRunNumber == 179 ){ filename = "/home/pitzl/psi/slc5/psi46expert/takeData/bt05r001170/mtb.bin";//20 deg chip = 11; if( mode == 2 ) { filename = "/home/pitzl/psi/slc5/psi46expert/takeData/bt05r001270/mtb.bin";//ref chip = 10; } } // Apr 2012: if( euRunNumber == 2839 ){ filename = "/home/pitzl/psi/slc5/psi46expert/takeData/bt05r001328/mtb.bin";//00 deg chip = 10; } if( euRunNumber == 2844 ){ filename = "/home/pitzl/psi/slc5/psi46expert/takeData/bt05r001331/mtb.bin";//00 deg chip = 10; if( mode == 2 ) { filename = "/home/pitzl/psi/slc5/psi46expert/takeData/bt05r001431/mtb.bin";//ref chip = 11; } } if( euRunNumber == 2845 ){ filename = "/home/pitzl/psi/slc5/psi46expert/takeData/bt05r001332/mtb.bin";//20 deg chip = 10; if( mode == 2 ) { filename = "/home/pitzl/psi/slc5/psi46expert/takeData/bt05r001432/mtb.bin";//ref chip = 11; } } if( euRunNumber == 2878 ){ filename = "/home/pitzl/psi/slc5/psi46expert/takeData/bt05r001333/mtb.bin";//20 deg chip = 10; if( mode == 2 ) { filename = "/home/pitzl/psi/slc5/psi46expert/takeData/bt05r001433/mtb.bin";//ref chip = 11; } } if( euRunNumber == 2880 ){ filename = "/home/pitzl/psi/slc5/psi46expert/takeData/bt05r001334/mtb.bin";//20 deg chip = 10; if( mode == 2 ) { filename = "/home/pitzl/psi/slc5/psi46expert/takeData/bt05r001434/mtb.bin";//ref chip = 11; } } if( filename.length() < 2 ) return; // DP 14.3.2012 mtbStream.open( filename.c_str() ); if(! mtbStream.is_open() ) { throw std::runtime_error(std::string(filename) + " not opened"); } else { std::cout << "CMS pixel file " << filename << " opened\n"; unsigned char a = mtbStream.get();//read ahead unsigned char b = mtbStream.get(); word = (b << 8) | a;//next word } // ROC address levels separation: if( chip == 7 ) { // run 7014 (19.12.2011) -96.0003 162.001 418.004 668.008 900 flevel[0] =-2000; flevel[1] = -96; flevel[2] = 162; flevel[3] = 418; flevel[4] = 668; flevel[5] = 900; flevel[6] = 2000; std::cout << "b2h address levels for chip " << chip << std::endl; } else if( chip == 6 ){ // Chip 6 Oct: flevel[0] = -999*ff; flevel[1] = -26*ff; flevel[2] = 41*ff; flevel[3] = 108*ff; flevel[4] = 175*ff; flevel[5] = 241*ff; flevel[6] = 999*ff; std::cout << "b2h address levels for chip " << chip << std::endl; } else if( chip == 10 ){ // chip 10: Feb 2012: determined in TBM mode: ff = 1 flevel[0] = -999; flevel[1] = -72; flevel[2] = 146; flevel[3] = 366; flevel[4] = 586; flevel[5] = 804; flevel[6] = 1999; // timing board 8: -32.0005 190.001 414.003 634.006 854.013 flevel[0] = -999; flevel[1] = -32; flevel[2] = 190; flevel[3] = 414; flevel[4] = 634; flevel[5] = 854; flevel[6] = 1999; cout << "b2h address levels for chip " << chip << endl; } else if( chip == 11 ){ // Chip 11 Feb 2012: flevel[0] = -999; flevel[1] = -106; flevel[2] = 104; flevel[3] = 316; flevel[4] = 528; flevel[5] = 738; flevel[6] = 999; cout << "b2h address levels for chip " << chip << endl; } else if( chip == 14 ){ // chip 14: Feb 2012: determined in TBM mode: ff = 1 flevel[0] = -999; flevel[1] = -118; flevel[2] = 90; flevel[3] = 300; flevel[4] = 510; flevel[5] = 715; flevel[6] = 1999; cout << "b2h address levels for chip " << chip << endl; } else { // chip 8: flevel[0] = -999*ff; flevel[1] = -25*ff; flevel[2] = 30*ff; flevel[3] = 100*ff; flevel[4] = 155*ff; flevel[5] = 215*ff; flevel[6] = 999*ff; std::cout << "b2h address levels for default chip 8\n"; } // gain file: const char* gainFileName; double aa = 1.0; if( chip == 6 ) gainFileName = "/home/pitzl/psi/slc5/psi46expert/chip6/gaintanh_C6.dat"; else if( chip == 7 ){ gainFileName = "/home/pitzl/psi/slc5/psi46expert/chip7/gaintanh_C7_tbm.dat"; aa = 0.25; } else if( chip == 10 ){ //gainFileName = "/home/pitzl/psi/slc5/psi46expert/chip10/gaintanh.dat"; gainFileName = "/home/pitzl/psi/slc5/psi46expert/chip10/gaintanh-chip10-board8-tbm.dat"; aa = 0.25; } else if( chip == 11 ){ //gainFileName = "/home/pitzl/psi/slc5/psi46expert/chip11/gaintanh.dat"; gainFileName = "/home/pitzl/psi/slc5/psi46expert/chip11/gaintanh-chip11-board9-tbm.dat"; aa = 0.25; } else if( chip == 14 ) gainFileName = "/home/pitzl/psi/slc5/psi46expert/chip14/gaintanh.dat"; else gainFileName = "/home/pitzl/psi/slc5/psi46expert/chip8/gaintanh_C8.dat"; std::ifstream gainFile( gainFileName); if(! gainFile ) { throw std::runtime_error("no CMS pixel gain file\n"); } else { std::cout << "using CMS pixel gain file" << gainFileName << std::endl; int ih; int icol; int irow; double am; double ho; double ga; double vo; while( gainFile >> ih ){ gainFile >> icol; gainFile >> irow; gainFile >> am;//Amax gainFile >> ho;//horz offset gainFile >> ga;//gain [ADC/large Vcal] gainFile >> vo;//vert offset amax[icol][irow] = am*aa; gain[icol][irow] = ga; horz[icol][irow] = ho; vert[icol][irow] = vo*aa; } }//gainFile std::cout << "short = " << sizeof(short) << " byte" << std::endl; std::cout << " int = " << sizeof( int) << " byte" << std::endl; std::cout << " long = " << sizeof( long) << " byte" << std::endl; std::cout << "long2 = " << sizeof(long long) << " byte" << std::endl; }