#include "PndMvdConvertApv.h" #include "PndMvdApvHit.h" #include "PndSdsDigiStrip.h" #include "TString.h" #include #include #include using namespace std; // ----- Constructor -------------------------------------------- PndMvdConvertApv::PndMvdConvertApv(const TString& CalibFileName, const TString& HitFileName) { fGeoH = PndGeoHandling::Instance(); fFake=false; cout<<"Scan HitFile..."< fes; // module detecor std::vector nEvents; if(!hitfile) { cout<<"Hitfile not found!"<>c; if (hitfile.eof()) break; if (!isdigit(c)) { char str[256]; hitfile.getline(str,256); continue; } hitfile.putback(c); //int triggID,ts,frame,moduleID; int fe,ch,l; long int ev; double q; // moduleID=0; hitfile >> ev >> fe >> ch >> q >> l; //cout<<"event "< fes) { std::ifstream calibfile(CalibFileName); if(!calibfile) { cout<<"Calibration file not found"<>c; if (calibfile.eof()) break; if (!isdigit(c)) { char str[256]; calibfile.getline(str,256); continue; } calibfile.putback(c); int feID, channel; double value; calibfile >> feID >> feID >> channel >> value; for(unsigned int vec=0;vec PndMvdConvertApv::Calc(std::vector hitlist) { std::vector result; for(UInt_t hitnumber=0;hitnumber e !!! }else{ if (fCalibPars[hitlist[hitnumber].GetFeID()].size()) { if (fCalibPars[hitlist[hitnumber].GetFeID()][hitlist[hitnumber].GetChannel()]) { q=fCalibPars[hitlist[hitnumber].GetFeID()][hitlist[hitnumber].GetChannel()]*(hitlist[hitnumber].GetADC())*1000.; // in electrons } } } //FIXME: Welche DetId braucht das Framework? "2" fuer Strips? //TODO: Detektornamen mit Geometrie sinnvoll verheiraten. // string detPath="SiliconTestStation_1/DummysensorAss_0/"; // detPath+="Module"; TString detPath="Module"; Int_t modId=-1; if(fFake) { if(fTopModuleID==hitlist[hitnumber].GetModuleID() || fBottomModuleID==hitlist[hitnumber].GetModuleID()) modId = 1; if(fBottomModuleID==hitlist[hitnumber].GetModuleID()) hitlist[hitnumber].SetFeID(hitlist[hitnumber].GetFeID()+3); }else{ modId = hitlist[hitnumber].GetModuleID(); } detPath+=modId; detPath+="Rect"; // std::cout<FindVolumeFast(detPath); TGeoVolume* Vol=0; if(Vol!=0) { // std::cout<GetName()<GetNode(-1)->cd(); detPath="/SiliconTestStation_1/DummysensorAss_0/"; detPath+=Vol->GetName(); detPath+="_0"; gGeoManager->cd(detPath.Data()); } else { // std::cout<<" -E- PndMvdConvertApv::Calc(): "<GetPath()<GetName(); // detPath = Vol->GetName(); // std::cout << "write Digi with "<< detPath.Data()<<" ( "<GetID(detPath)<<" )"< PndMvdConvertApv::ReadNext() { // cout<<"** PndMvdConvertApv::ReadNext() **"< digiList; bool work=true; while (!fDataFile.eof() && work) // read data { char c; fDataFile>>c; if (fDataFile.eof()) break; if (!isdigit(c)) { char str[256]; fDataFile.getline(str,256); continue; } fDataFile.putback(c); int triggID=0; int fe=0; int ts=0; int frame=0; int ch=0; int l=0; int moduleID=0; double q=0.; long int ev=0; fDataFile >> ev >> fe >> ch >> q >> l; //cout<<"event "<20) fhitlist.clear(); digiList = Calc(fhitlist); fhitlist.clear(); fLastEvent=ev; fEvent++; work=false; } PndMvdApvHit Hit(ev, moduleID, fe, triggID, ts, frame, ch, q, l); fhitlist.push_back(Hit); } if(!(fEvent%10000)) cout<<"[ "<<(fEvent*100)/fNofEvents<<" %] "< PndMvdConvertApv::ReadAll() { std::vector result; while(fEvent!=fNofEvents) { std::vector dummy=ReadNext(); for(unsigned int i=0;i